diff --git a/.coveragerc b/.coveragerc index d7a734c1d6..f9ef3447bf 100644 --- a/.coveragerc +++ b/.coveragerc @@ -25,3 +25,5 @@ exclude_lines = ignore_errors = True +[xml] +output = ./reports/coverage.xml diff --git a/.gitignore b/.gitignore index 087dba5265..5095c8d699 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # Tower awx/settings/local_settings.py* awx/*.sqlite3 +awx/*.sqlite3_* awx/job_status awx/projects awx/job_output @@ -22,6 +23,10 @@ celerybeat-schedule awx/ui/static awx/ui/build_test +# Tower setup playbook testing +setup/test/roles/postgresql +**/provision_docker + # Python & setuptools __pycache__ /build @@ -30,7 +35,7 @@ __pycache__ /tar-build /setup-bundle-build /dist -*.egg-info +/*.egg-info *.py[c,o] # JavaScript @@ -39,6 +44,8 @@ __pycache__ /bower.json /package.json /testem.yml +/coverage +/.istanbul.yml node_modules/** /tmp npm-debug.log @@ -47,6 +54,7 @@ npm-debug.log /DEBUG # Testing +.cache .coverage .tox coverage.xml @@ -54,12 +62,13 @@ htmlcov pep8.txt scratch testem.log +awx/awx_test.sqlite3-journal # Mac OS X *.DS_Store # Editors -*.swp +*.sw[poj] *~ # Vagrant @@ -80,13 +89,23 @@ setup/setup.log setup/inventory tower-backup-* +# Ansible +**/*.retry + # Other .tower_cycle env/* nohup.out reports +*.bak +*.bak[0-9] +*.dot +*.log +*.log.[0-9] +*.results +local/ # AWX python libs populated by requirements.txt awx/lib/.deps_built awx/lib/site-packages - +venv/* diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..c12528c389 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,31 @@ +### Summary + + + +### Environment + + + +### Steps To Reproduce: + + + +### Expected Results: + + + +### Actual Results: + + + +### Additional Information: + + diff --git a/MANIFEST.in b/MANIFEST.in index 36d627dc10..b52764c7e8 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,5 @@ recursive-include awx *.py -recursive-include awx/static *.ico +recursive-include awx/static * recursive-include awx/templates *.html recursive-include awx/api/templates *.md *.html recursive-include awx/ui/templates *.html @@ -17,7 +17,7 @@ recursive-exclude awx/settings local_settings.py* include tools/scripts/request_tower_configuration.sh include tools/scripts/request_tower_configuration.ps1 include tools/scripts/ansible-tower-service -include tools/munin_monitors/* +include tools/scripts/tower-python include tools/sosreport/* include COPYING include Makefile diff --git a/Makefile b/Makefile index b0940c7d85..de64580092 100644 --- a/Makefile +++ b/Makefile @@ -6,16 +6,25 @@ PACKER ?= packer PACKER_BUILD_OPTS ?= -var 'official=$(OFFICIAL)' -var 'aw_repo_url=$(AW_REPO_URL)' GRUNT ?= $(shell [ -t 0 ] && echo "grunt" || echo "grunt --no-color") TESTEM ?= ./node_modules/.bin/testem -TESTEM_DEBUG_BROWSER ?= Chrome BROCCOLI_BIN ?= ./node_modules/.bin/broccoli -MOCHA_BIN ?= ./node_modules/.bin/mocha +MOCHA_BIN ?= ./node_modules/.bin/_mocha +ISTANBUL_BIN ?= ./node_modules/.bin/istanbul +BROWSER_SYNC_BIN ?= ./node_modules/.bin/browser-sync NODE ?= node NPM_BIN ?= npm DEPS_SCRIPT ?= packaging/bundle/deps.py GIT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) +VENV_BASE ?= /tower_devel/venv +SCL_PREFIX ?= +CELERY_SCHEDULE_FILE ?= /celerybeat-schedule + CLIENT_TEST_DIR ?= build_test +# Python packages to install only from source (not from binary wheels) +# Comma separated list +SRC_ONLY_PKGS ?= cffi + # Determine appropriate shasum command UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) @@ -106,6 +115,7 @@ MOCK_CFG ?= RPM_SPECDIR= packaging/rpm RPM_SPEC = $(RPM_SPECDIR)/$(NAME).spec RPM_DIST ?= $(shell rpm --eval '%{?dist}' 2>/dev/null) + # Provide a fallback value for RPM_DIST ifeq ($(RPM_DIST),) RPM_DIST = .el6 @@ -115,7 +125,17 @@ RPM_ARCH ?= $(shell rpm --eval '%{_arch}' 2>/dev/null) ifeq ($(RPM_ARCH),) RPM_ARCH = $(shell uname -m) endif -RPM_NVR = $(NAME)-$(VERSION)-$(RELEASE)$(RPM_DIST) + +# Software collections settings if on EL6 +ifeq ($(RPM_DIST),.el6) + SCL_PREFIX = python27- + SCL_DEFINES = --define 'scl python27' +else + SCL_PREFIX = + SCL_DEFINES = +endif + +RPM_NVR = $(SCL_PREFIX)$(NAME)-$(VERSION)-$(RELEASE)$(RPM_DIST) # TAR Bundle build parameters DIST = $(shell echo $(RPM_DIST) | sed -e 's|^\.\(el\)\([0-9]\).*|\1|') @@ -152,12 +172,15 @@ endif .DEFAULT_GOAL := build -.PHONY: clean rebase push requirements requirements_dev requirements_jenkins \ - real-requirements real-requirements_dev real-requirements_jenkins \ - develop refresh adduser syncdb migrate dbchange dbshell runserver celeryd \ - receiver test test_coverage coverage_html ui_analysis_report test_jenkins dev_build \ +.PHONY: clean clean-tmp rebase push requirements requirements_dev \ + requirements_jenkins \ + develop refresh adduser migrate dbchange dbshell runserver celeryd \ + receiver test test_unit test_coverage coverage_html test_jenkins dev_build \ release_build release_clean sdist rpmtar mock-rpm mock-srpm rpm-sign \ - devjs minjs testjs testjs_ci node-tests browser-tests jshint ngdocs sync_ui \ + build-ui sync-ui test-ui build-ui-for-coverage test-ui-for-coverage \ + build-ui-for-browser-tests test-ui-debug jshint ngdocs \ + websocket-proxy browser-sync browser-sync-reload brocolli-watcher \ + devjs minjs testjs_ci \ deb deb-src debian debsign pbuilder reprepro setup_tarball \ virtualbox-ovf virtualbox-centos-7 virtualbox-centos-6 \ clean-bundle setup_bundle_tarball @@ -179,13 +202,6 @@ clean-grunt: rm -f package.json Gruntfile.js Brocfile.js bower.json rm -rf node_modules -# Remove UI build files -clean-ui: - rm -rf DEBUG - rm -rf awx/ui/build_test - rm -rf awx/ui/static/ - rm -rf awx/ui/dist - # Remove packer artifacts clean-packer: rm -rf packer_cache @@ -200,8 +216,21 @@ clean-packer: clean-bundle: rm -rf setup-bundle-build +# remove ui build artifacts +clean-ui: + rm -rf DEBUG + +clean-static: + rm -rf awx/ui/static/ + +clean-build-test: + rm -rf awx/ui/build_test/ + +clean-tmp: + rm -rf tmp/ + # Remove temporary build files, compiled Python files. -clean: clean-rpm clean-deb clean-grunt clean-ui clean-tar clean-packer clean-bundle +clean: clean-rpm clean-deb clean-grunt clean-ui clean-static clean-build-test clean-tar clean-packer clean-bundle rm -rf awx/lib/site-packages rm -rf awx/lib/.deps_built rm -rf dist/* @@ -225,30 +254,71 @@ rebase: push: git push origin master -# Install runtime, development and jenkins requirements -requirements requirements_dev requirements_jenkins: %: real-% +virtualenv: virtualenv_ansible virtualenv_tower -# Install third-party requirements needed for development environment. -# NOTE: -# * --target is only supported on newer versions of pip -# * https://github.com/pypa/pip/issues/3056 - the workaround is to override the `install-platlib` -# * --user (in conjunction with PYTHONUSERBASE="awx" may be a better option -# * --target implies --ignore-installed -real-requirements: - @if [ "$(PYTHON_VERSION)" = "2.6" ]; then \ - pip install -r requirements/requirements_python26.txt --target awx/lib/site-packages/ --install-option="--install-platlib=\$$base/lib/python"; \ - else \ - pip install -r requirements/requirements.txt --target awx/lib/site-packages/ --install-option="--install-platlib=\$$base/lib/python"; \ +virtualenv_ansible: + if [ "$(VENV_BASE)" ]; then \ + if [ ! -d "$(VENV_BASE)" ]; then \ + mkdir $(VENV_BASE); \ + fi; \ + if [ ! -d "$(VENV_BASE)/ansible" ]; then \ + virtualenv --system-site-packages --setuptools $(VENV_BASE)/ansible && \ + $(VENV_BASE)/ansible/bin/pip install -I setuptools==23.0.0 && \ + $(VENV_BASE)/ansible/bin/pip install -I pip==8.1.1; \ + fi; \ fi -real-requirements_dev: - pip install -r requirements/requirements_dev.txt --target awx/lib/site-packages/ --install-option="--install-platlib=\$$base/lib/python" +virtualenv_tower: + if [ "$(VENV_BASE)" ]; then \ + if [ ! -d "$(VENV_BASE)" ]; then \ + mkdir $(VENV_BASE); \ + fi; \ + if [ ! -d "$(VENV_BASE)/tower" ]; then \ + virtualenv --system-site-packages --setuptools $(VENV_BASE)/tower && \ + $(VENV_BASE)/tower/bin/pip install -I setuptools==23.0.0 && \ + $(VENV_BASE)/tower/bin/pip install -I pip==8.1.1; \ + fi; \ + fi + +requirements_ansible: virtualenv_ansible + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/ansible/bin/activate; \ + $(VENV_BASE)/ansible/bin/pip install --no-binary $(SRC_ONLY_PKGS) -r requirements/requirements_ansible.txt ;\ + else \ + pip install --no-binary $(SRC_ONLY_PKGS) -r requirements/requirements_ansible.txt ; \ + fi + +# Install third-party requirements needed for Tower's environment. +requirements_tower: virtualenv_tower + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + $(VENV_BASE)/tower/bin/pip install --no-binary $(SRC_ONLY_PKGS) -r requirements/requirements.txt ;\ + else \ + pip install --no-binary $(SRC_ONLY_PKGS) -r requirements/requirements.txt ; \ + fi + +requirements_tower_dev: + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + $(VENV_BASE)/tower/bin/pip install -r requirements/requirements_dev.txt; \ + fi # Install third-party requirements needed for running unittests in jenkins -real-requirements_jenkins: - pip install -r requirements/requirements_jenkins.txt +requirements_jenkins: + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + $(VENV_BASE)/tower/bin/pip install -Ir requirements/requirements_jenkins.txt; \ + else \ + pip install -Ir requirements/requirements_jenkins..txt; \ + fi && \ $(NPM_BIN) install csslint jshint +requirements: requirements_ansible requirements_tower + +requirements_dev: requirements requirements_tower_dev + +requirements_test: requirements requirements_jenkins + # "Install" ansible-tower package in development mode. develop: @if [ "$(VIRTUAL_ENV)" ]; then \ @@ -265,30 +335,28 @@ version_file: # Do any one-time init tasks. init: - @if [ "$(VIRTUAL_ENV)" ]; then \ - awx-manage register_instance --primary --hostname=127.0.0.1; \ - else \ - sudo awx-manage register_instance --primary --hostname=127.0.0.1; \ - fi + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ + tower-manage register_instance --primary --hostname=127.0.0.1; \ # Refresh development environment after pulling new code. refresh: clean requirements_dev version_file develop migrate # Create Django superuser. adduser: - $(PYTHON) manage.py createsuperuser - -# Create initial database tables (excluding migrations). -syncdb: - $(PYTHON) manage.py syncdb --noinput + tower-manage createsuperuser # Create database tables and apply any new migrations. -migrate: syncdb - $(PYTHON) manage.py migrate --noinput +migrate: + if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ + tower-manage migrate --noinput --fake-initial # Run after making changes to the models to create a new migration. dbchange: - $(PYTHON) manage.py schemamigration main v14_changes --auto + tower-manage makemigrations # access database shell, asks for password dbshell: @@ -316,27 +384,48 @@ servercc: server_noattach # Alternate approach to tmux to run all development tasks specified in # Procfile. https://youtu.be/OPMgaibszjk honcho: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ honcho start # Run the built-in development webserver (by default on http://localhost:8013). runserver: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ $(PYTHON) manage.py runserver # Run to start the background celery worker for development. celeryd: - $(PYTHON) manage.py celeryd -l DEBUG -B --autoscale=20,2 -Ofair + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ + $(PYTHON) manage.py celeryd -l DEBUG -B --autoscale=20,2 -Ofair --schedule=$(CELERY_SCHEDULE_FILE) # Run to start the zeromq callback receiver receiver: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ $(PYTHON) manage.py run_callback_receiver taskmanager: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ $(PYTHON) manage.py run_task_system socketservice: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ $(PYTHON) manage.py run_socketio_service factcacher: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ $(PYTHON) manage.py run_fact_cache_receiver reports: @@ -356,13 +445,17 @@ pylint: reports check: flake8 pep8 # pyflakes pylint +TEST_DIRS=awx/main/tests # Run all API unit tests. test: - $(PYTHON) manage.py test -v2 awx.main.tests + py.test $(TEST_DIRS) + +test_unit: + py.test awx/main/tests/unit # Run all API unit tests with coverage enabled. test_coverage: - coverage run manage.py test -v2 awx.main.tests + py.test --create-db --cov=awx --cov-report=xml --junitxml=./reports/junit.xml $(TEST_DIRS) # Output test coverage as HTML (into htmlcov directory). coverage_html: @@ -373,12 +466,13 @@ test_tox: tox -v # Run unit tests to produce output for Jenkins. -test_jenkins: - $(PYTHON) manage.py jenkins -v2 --enable-coverage --project-apps-tests +# Alias existing make target so old versions run against Jekins the same way +test_jenkins : test_coverage # UI TASKS # -------------------------------------- +# begin targets that pull ui files from packaging to the root of the app Gruntfile.js: packaging/node/Gruntfile.js cp $< $@ @@ -394,69 +488,155 @@ package.json: packaging/node/package.template testem.yml: packaging/node/testem.yml cp $< $@ -# Update local npm install +.istanbul.yml: packaging/node/.istanbul.yml + cp $< $@ +# end targets that pull ui files from packaging to the root of the app + +# update package.json and install npm dependencies node_modules: package.json $(NPM_BIN) install touch $@ -awx/ui/%: node_modules clean-ui Brocfile.js bower.json - $(BROCCOLI_BIN) build $@ -- $(UI_FLAGS) +# helper tasks to run broccoli build process at awx/ui/, +# to build the ui, use the build-ui target instead: +# UI_FLAGS=: additional parameters to pass broccoli +# for building +awx/ui/static: node_modules clean-ui clean-static Brocfile.js bower.json + $(BROCCOLI_BIN) build awx/ui/static -- $(UI_FLAGS) -# Concatenated, non-minified build; contains debug code and sourcemaps; does not include any tests -devjs: awx/ui/static +awx/ui/build_test: node_modules clean-ui clean-build-test Brocfile.js bower.json + $(BROCCOLI_BIN) build awx/ui/build_test -- $(UI_FLAGS) -# Concatenated, minified, compressed (production) build with no sourcemaps or tests -minjs: UI_FLAGS=--silent --compress --no-docs --no-debug --no-sourcemaps $(EXTRA_UI_FLAGS) -minjs: awx/ui/static +# build the ui to awx/ui/static: +# defaults to standard dev build (concatenated, non-minified, sourcemaps, no +# tests) +# PROD=true: standard prod build (concatenated, minified, no sourcemaps, +# compressed, no tests) +# EXTRA_UI_FLAGS=: additional parameters to pass broccoli +# for building +PROD ?= false -# Performs build to awx/ui/build_test and runs node tests via mocha -testjs: UI_FLAGS=--node-tests --no-concat --no-styles $(EXTRA_UI_FLAGS) -testjs: awx/ui/build_test node-tests +# TODO: Remove after 2.4 (alias for devjs/minjs) +devjs: build-ui +minjs: build-ui +ifeq ($(MAKECMDGOALS),minjs) + PROD = true +endif -# Performs nonminified, noncompressed build to awx/ui/static and runs browsers tests with testem ci -testjs_ci: UI_FLAGS=--no-styles --no-compress --browser-tests --no-node-tests --no-sourcemaps $(EXTRA_UI_FLAGS) -testjs_ci: awx/ui/static testem.yml browser-tests-ci +ifeq ($(PROD),true) + UI_FLAGS=--silent --compress --no-docs --no-debug --no-sourcemaps \ + $(EXTRA_UI_FLAGS) +else + UI_FLAGS=$(EXTRA_UI_FLAGS) +endif -# Performs nonminified, noncompressed build to awx/ui/static and runs browsers tests with testem ci in Chrome -testjs_debug: UI_FLAGS=--no-styles --no-compress --browser-tests --no-node-tests --no-sourcemaps $(EXTRA_UI_FLAGS) -testjs_debug: awx/ui/static testem.yml browser-tests-debug +build-ui: awx/ui/static -# Runs node tests via mocha without building -node-tests: - NODE_PATH=awx/ui/build_test $(MOCHA_BIN) --full-trace $(shell find awx/ui/build_test -name '*-test.js') $(MOCHA_FLAGS) +# launch watcher to continuously build the ui to awx/ui/static and run tests +# after changes are made: +# WATCHER_FLAGS: options to be utilized by broccoli timepiece +# UI_FLAGS=: additional parameters to pass broccoli +# for building +# DOCKER_MACHINE_NAME=: when +# passed, not only will brocolli rebuild, but browser-sync will proxy +# proxy tower and refresh the ui when a change is made. +DOCKER_MACHINE_NAME ?= none +ifeq ($(DOCKER_MACHINE_NAME),none) + sync-ui: node_modules clean-tmp brocolli-watcher +else + sync-ui: node_modules clean-tmp + tmux new-session -d -s ui_sync 'exec make brocolli-watcher' + tmux rename-window 'UI Sync' + tmux select-window -t ui_sync:0 + tmux split-window -v 'exec make browser-sync' + tmux split-window -h 'exec make websocket-proxy' + tmux select-layout main-vertical + tmux attach-session -t ui_sync +endif -# Runs browser tests on PhantomJS. Outputs the results in a consumable manner for Jenkins. -browser-tests-ci: - PATH=./node_modules/.bin:$(PATH) $(TESTEM) ci --file testem.yml -p 7359 -R xunit +websocket-proxy: + docker-machine ssh $(DOCKER_MACHINE_NAME) -L 8080:localhost:8080 -# Runs browser tests using settings from `testem.yml` you can pass in the browser you'd -# like to run the tests on (Defaults to Chrome, other options Safari, Firefox, and PhantomJS). -# If you want to run the tests in Node (which is the quickest, but also more difficult to debug), -# make sure to run the testjs/node-tests targets -browser-tests-debug: +browser-sync: + $(BROWSER_SYNC_BIN) start --proxy $(shell docker-machine ip $(DOCKER_MACHINE_NAME)):8013 --ws + +browser-sync-reload: + $(BROWSER_SYNC_BIN) reload + +brocolli-watcher: Brocfile.js testem.yml + $(NODE) tools/ui/timepiece.js awx/ui/static $(WATCHER_FLAGS) -- $(UI_FLAGS) + +# run ui unit-tests: +# defaults to a useful dev testing run. Builds the ui to awx/ui/build_test +# and runs mocha (node.js) tests with istanbul coverage (and an html +# coverage report) +# UI_TESTS_TO_RUN=-test.js: Set this to only run a specific test file +# CI=true: Builds the ui to awx/ui/build_test +# and runs mocha (node.js) tests with istanbul coverage (and a cobertura +# coverage report). Also builds the ui to awx/ui/static and runs the +# testem (phantomjs) tests. Outputs these to XUNIT format to be consumed +# and displayed in jenkins +# DEBUG=true: Builds the ui to awx/ui/static and runs testem tests in Chrome +# so you can breakpoint the tests and underlying code to figure out why +# tests are failing. +# TESTEM_DEBUG_BROWSER: the browser to run tests in, default to Chrome + +# TODO: deprecated past 2.4 +testjs_ci: test-ui # w var UI_TEST_MODE=CI + +UI_TEST_MODE ?= DEV +ifeq ($(UI_TEST_MODE),CI) + # ci testing run + # this used to be testjs_ci, sort-of + REPORTER = xunit + test-ui: .istanbul.yml build-ui-for-coverage test-ui-for-coverage +else +ifeq ($(UI_TEST_MODE),DEV_DEBUG) + # debug (breakpoint) dev testing run + test-ui: build-ui-for-browser-tests test-ui-debug +else + # default dev testing run + test-ui: .istanbul.yml build-ui-for-coverage test-ui-for-coverage +endif +endif + +# helper tasks to test ui, don't call directly +build-ui-for-coverage: UI_FLAGS=--node-tests --no-concat --no-styles +build-ui-for-coverage: awx/ui/build_test + +REPORTER ?= standard +UI_TESTS_TO_RUN ?= all +ifeq ($(REPORTER), xunit) + test-ui-for-coverage: + XUNIT_FILE=reports/test-results-ui.xml NODE_PATH=awx/ui/build_test $(ISTANBUL_BIN) cover --include-all-sources $(MOCHA_BIN) -- --full-trace --reporter xunit-file $(shell find awx/ui/build_test -name '*-test.js'); cp coverage/ui-coverage-report.xml reports/coverage-report-ui.xml +else +ifeq ($(UI_TESTS_TO_RUN), all) + test-ui-for-coverage: + NODE_PATH=awx/ui/build_test $(ISTANBUL_BIN) cover --include-all-sources $(MOCHA_BIN) -- --full-trace $(shell find awx/ui/build_test -name '*-test.js') +else +test-ui-for-coverage: + NODE_PATH=awx/ui/build_test $(ISTANBUL_BIN) cover $(MOCHA_BIN) -- --full-trace $(shell find awx/ui/build_test -name '$(UI_TESTS_TO_RUN)') +endif +endif + +build-ui-for-browser-tests: UI_FLAGS=--no-styles --no-compress --browser-tests --no-node-tests +build-ui-for-browser-tests: awx/ui/static + +TESTEM_DEBUG_BROWSER ?= Chrome +test-ui-debug: PATH=./node_modules/.bin:$(PATH) $(TESTEM) --file testem.yml -l $(TESTEM_DEBUG_BROWSER) -# Check .js files for errors and lint +# lint .js files jshint: node_modules Gruntfile.js $(GRUNT) $@ -# Generate UI code documentation -ngdocs: devjs Gruntfile.js +# generate ui docs +ngdocs: build-ui Gruntfile.js $(GRUNT) $@ -# Launch watcher for build process -sync_ui: node_modules Brocfile.js testem.yml - $(NODE) tools/ui/timepiece.js awx/ui/static $(WATCHER_FLAGS) -- $(UI_FLAGS) - -# Build code complexity report for UI code -ui_analysis_report: reports/ui_code node_modules Gruntfile.js - $(GRUNT) plato:report - -# Non-concatenated, non-minified build with no tests, no debug code, no sourcemaps for plato reports -reports/ui_code: node_modules clean-ui Brocfile.js bower.json Gruntfile.js - rm -rf reports/ui_code - $(BROCCOLI_BIN) build reports/ui_code -- --no-concat --no-debug --no-styles --no-sourcemaps - # END UI TASKS # -------------------------------------- @@ -474,7 +654,7 @@ tar-build/$(SETUP_TAR_FILE): @cp -a setup tar-build/$(SETUP_TAR_NAME) @rsync -az docs/licenses tar-build/$(SETUP_TAR_NAME)/ @cd tar-build/$(SETUP_TAR_NAME) && sed -e 's#%NAME%#$(NAME)#;s#%VERSION%#$(VERSION)#;s#%RELEASE%#$(RELEASE)#;' group_vars/all.in > group_vars/all - @cd tar-build && tar -czf $(SETUP_TAR_FILE) --exclude "*/all.in" $(SETUP_TAR_NAME)/ + @cd tar-build && tar -czf $(SETUP_TAR_FILE) --exclude "*/all.in" --exclude "**/test/*" $(SETUP_TAR_NAME)/ @ln -sf $(SETUP_TAR_FILE) tar-build/$(SETUP_TAR_LINK) tar-build/$(SETUP_TAR_CHECKSUM): @@ -541,6 +721,7 @@ rpm-build/$(SDIST_TAR_FILE): rpm-build dist/$(SDIST_TAR_FILE) cp packaging/rpm/$(NAME).te rpm-build/ cp packaging/rpm/$(NAME).sysconfig rpm-build/ cp packaging/remove_tower_source.py rpm-build/ + cp packaging/bytecompile.sh rpm-build/ if [ "$(OFFICIAL)" != "yes" ] ; then \ (cd dist/ && tar zxf $(SDIST_TAR_FILE)) ; \ (cd dist/ && mv $(NAME)-$(VERSION)-$(BUILD) $(NAME)-$(VERSION)) ; \ @@ -554,7 +735,7 @@ rpmtar: sdist rpm-build/$(SDIST_TAR_FILE) rpm-build/$(RPM_NVR).src.rpm: /etc/mock/$(MOCK_CFG).cfg $(MOCK_BIN) -r $(MOCK_CFG) --resultdir rpm-build --buildsrpm --spec rpm-build/$(NAME).spec --sources rpm-build \ - --define "tower_version $(VERSION)" --define "tower_release $(RELEASE)" + --define "tower_version $(VERSION)" --define "tower_release $(RELEASE)" $(SCL_DEFINES) mock-srpm: rpmtar rpm-build/$(RPM_NVR).src.rpm @echo "#############################################" @@ -564,7 +745,7 @@ mock-srpm: rpmtar rpm-build/$(RPM_NVR).src.rpm rpm-build/$(RPM_NVR).$(RPM_ARCH).rpm: rpm-build/$(RPM_NVR).src.rpm $(MOCK_BIN) -r $(MOCK_CFG) --resultdir rpm-build --rebuild rpm-build/$(RPM_NVR).src.rpm \ - --define "tower_version $(VERSION)" --define "tower_release $(RELEASE)" + --define "tower_version $(VERSION)" --define "tower_release $(RELEASE)" $(SCL_DEFINES) mock-rpm: rpmtar rpm-build/$(RPM_NVR).$(RPM_ARCH).rpm @echo "#############################################" @@ -696,9 +877,11 @@ packaging/packer/ansible-tower-$(VERSION)-vmx/ansible-tower-$(VERSION).vmx: pack # TODO - figure out how to build the front-end and python requirements with # 'build' build: + export SCL_PREFIX $(PYTHON) setup.py build install: + export SCL_PREFIX HTTPD_SCL_PREFIX $(PYTHON) setup.py install $(SETUP_INSTALL_ARGS) # Docker Compose Development environment @@ -708,6 +891,16 @@ docker-compose: docker-compose-test: cd tools && docker-compose run --rm --service-ports tower /bin/bash +MACHINE?=default +docker-clean: + rm -f awx/lib/.deps_built + eval $$(docker-machine env $(MACHINE)) + docker stop $$(docker ps -a -q) + -docker rm $$(docker ps -f name=tools_tower -a -q) + -docker rmi tools_tower + +docker-refresh: docker-clean docker-compose + mongo-debug-ui: docker run -it --rm --name mongo-express --link tools_mongo_1:mongo -e ME_CONFIG_OPTIONS_EDITORTHEME=ambiance -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=password -p 8081:8081 knickers/mongo-express diff --git a/README.md b/README.md index 2c50c8f920..cc5eacadd7 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,12 @@ +[![Build Status](http://jenkins.testing.ansible.com/buildStatus/icon?job=Test_Tower_Unittest)](http://jenkins.testing.ansible.com/job/Test_Tower_Unittest) +[![Requirements Status](https://requires.io/github/ansible/ansible-tower/requirements.svg?branch=devel)](https://requires.io/github/ansible/ansible-tower/requirements/?branch=devel) + Ansible Tower ============= Tower provides a web-based user interface, REST API and task engine built on top of Ansible. -The current version under development is 2.2.1. - -Development releases always use the 'master' branch. - -Release History -================ - -* 1.2.2, July 31, 2013. -* 1.3.0, September 15, 2013. -* 1.3.1, September 17, 2013. -* 1.4.0, November 25, 2013. -* 1.4.5, February 10, 2014. -* 1.4.8, April 7, 2014. -* 1.4.9, April 17, 2014. -* 1.4.10, April 28, 2014. -* 1.4.11, May 30, 2014. -* 2.0.0, August 19, 2014 -* 2.0.1, September 4, 2014 -* 2.0.2, October 6, 2014 -* 2.0.3, November 14, 2014 -* 2.0.4, November 21, 2014 -* 2.0.5, December 10, 2014 -* 2.1.0, January 7, 2015 -* 2.1.1, February 4, 2015 -* 2.1.2, March 25, 2015 -* 2.1.3, April 15, 2015 -* 2.1.4, June 12, 2015 -* 2.1.5, June 15, 2015 -* 2.1.6, June 23, 2015 -* 2.2.0, July 14, 2015 -* 2.2.1, August 12, 2015 -* 2.2.2, August 19, 2015 -* 2.3.0, September 22, 2015 -* 2.3.1, October 2, 2015 -* 2.4.0, November 14, 2015 - -Any fixes should be applied on the appropriate release branch and be cherry-picked to -master. - Resources --------- diff --git a/awx/__init__.py b/awx/__init__.py index 63561718b3..c8081e8794 100644 --- a/awx/__init__.py +++ b/awx/__init__.py @@ -4,9 +4,8 @@ import os import sys import warnings -import site -__version__ = '2.4.5' +__version__ = '3.0.0' __all__ = ['__version__'] @@ -37,18 +36,6 @@ def find_commands(management_dir): def prepare_env(): # Update the default settings environment variable based on current mode. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'awx.settings.%s' % MODE) - # Add local site-packages directory to path. - local_site_packages = os.path.join(os.path.dirname(__file__), 'lib', - 'site-packages') - site.addsitedir(local_site_packages) - try: - index = sys.path.index(local_site_packages) - sys.path.pop(index) - # Work around https://bugs.python.org/issue7744 - # by moving local_site_packages to the front of sys.path - sys.path.insert(0, local_site_packages) - except ValueError: - pass # Hide DeprecationWarnings when running in production. Need to first load # settings to apply our filter after Django's own warnings filter. from django.conf import settings @@ -75,10 +62,26 @@ def prepare_env(): settings.DATABASES['default'][opt] = os.environ['AWX_TEST_DATABASE_%s' % opt] # Disable capturing all SQL queries in memory when in DEBUG mode. if settings.DEBUG and not getattr(settings, 'SQL_DEBUG', True): - from django.db.backends import BaseDatabaseWrapper - from django.db.backends.util import CursorWrapper + from django.db.backends.base.base import BaseDatabaseWrapper + from django.db.backends.utils import CursorWrapper BaseDatabaseWrapper.make_debug_cursor = lambda self, cursor: CursorWrapper(cursor, self) + # Use the default devserver addr/port defined in settings for runserver. + default_addr = getattr(settings, 'DEVSERVER_DEFAULT_ADDR', '127.0.0.1') + default_port = getattr(settings, 'DEVSERVER_DEFAULT_PORT', 8000) + from django.core.management.commands import runserver as core_runserver + original_handle = core_runserver.Command.handle + + def handle(self, *args, **options): + if not options.get('addrport'): + options['addrport'] = '%s:%d' % (default_addr, int(default_port)) + elif options.get('addrport').isdigit(): + options['addrport'] = '%s:%d' % (default_addr, int(options['addrport'])) + return original_handle(self, *args, **options) + + core_runserver.Command.handle = handle + + def manage(): # Prepare the AWX environment. prepare_env() diff --git a/awx/api/authentication.py b/awx/api/authentication.py index 72dccc61f4..c8143facbd 100644 --- a/awx/api/authentication.py +++ b/awx/api/authentication.py @@ -3,10 +3,11 @@ # Python import urllib +import logging # Django from django.utils.timezone import now as tz_now -from django.conf import settings +from django.utils.encoding import smart_text # Django REST Framework from rest_framework import authentication @@ -15,7 +16,9 @@ from rest_framework import HTTP_HEADER_ENCODING # AWX from awx.main.models import UnifiedJob, AuthToken +from awx.main.conf import tower_settings +logger = logging.getLogger('awx.api.authentication') class TokenAuthentication(authentication.TokenAuthentication): ''' @@ -90,11 +93,11 @@ class TokenAuthentication(authentication.TokenAuthentication): # Token invalidated due to session limit config being reduced # Session limit reached invalidation will also take place on authentication - if settings.AUTH_TOKEN_PER_USER != -1: + if tower_settings.AUTH_TOKEN_PER_USER != -1: if not token.in_valid_tokens(now=now): token.invalidate(reason='limit_reached') raise exceptions.AuthenticationFailed(AuthToken.reason_long('limit_reached')) - + # If the user is inactive, then return an error. if not token.user.is_active: raise exceptions.AuthenticationFailed('User inactive or deleted') @@ -117,6 +120,16 @@ class TokenGetAuthentication(TokenAuthentication): return super(TokenGetAuthentication, self).authenticate(request) +class LoggedBasicAuthentication(authentication.BasicAuthentication): + + def authenticate(self, request): + ret = super(LoggedBasicAuthentication, self).authenticate(request) + if ret: + username = ret[0].username if ret[0] else '' + logger.debug(smart_text(u"User {} performed a {} to {} through the API".format(username, request.method, request.path))) + return ret + + class TaskAuthentication(authentication.BaseAuthentication): ''' Custom authentication used for views accessed by the inventory and callback diff --git a/awx/api/fields.py b/awx/api/fields.py new file mode 100644 index 0000000000..f1acaa7e72 --- /dev/null +++ b/awx/api/fields.py @@ -0,0 +1,89 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +# Django +from django.utils.encoding import force_text + +# Django REST Framework +from rest_framework import serializers + +__all__ = ['BooleanNullField', 'CharNullField', 'ChoiceNullField', 'EncryptedPasswordField', 'VerbatimField'] + + +class NullFieldMixin(object): + ''' + Mixin to prevent shortcutting validation when we want to allow null input, + but coerce the resulting value to another type. + ''' + + def validate_empty_values(self, data): + (is_empty_value, data) = super(NullFieldMixin, self).validate_empty_values(data) + if is_empty_value and data is None: + return (False, data) + return (is_empty_value, data) + + +class BooleanNullField(NullFieldMixin, serializers.NullBooleanField): + ''' + Custom boolean field that allows null and empty string as False values. + ''' + + def to_internal_value(self, data): + return bool(super(BooleanNullField, self).to_internal_value(data)) + + +class CharNullField(NullFieldMixin, serializers.CharField): + ''' + Custom char field that allows null as input and coerces to an empty string. + ''' + + def __init__(self, **kwargs): + kwargs['allow_null'] = True + super(CharNullField, self).__init__(**kwargs) + + def to_internal_value(self, data): + return super(CharNullField, self).to_internal_value(data or u'') + + +class ChoiceNullField(NullFieldMixin, serializers.ChoiceField): + ''' + Custom choice field that allows null as input and coerces to an empty string. + ''' + + def __init__(self, **kwargs): + kwargs['allow_null'] = True + super(ChoiceNullField, self).__init__(**kwargs) + + def to_internal_value(self, data): + return super(ChoiceNullField, self).to_internal_value(data or u'') + + +class EncryptedPasswordField(CharNullField): + ''' + Custom field to handle encrypted password values (on credentials). + ''' + + def to_internal_value(self, data): + value = super(EncryptedPasswordField, self).to_internal_value(data or u'') + # If user submits a value starting with $encrypted$, ignore it. + if force_text(value).startswith('$encrypted$'): + raise serializers.SkipField + return value + + def to_representation(self, value): + # Replace the actual encrypted value with the string $encrypted$. + if force_text(value).startswith('$encrypted$'): + return '$encrypted$' + return value + + +class VerbatimField(serializers.Field): + ''' + Custom field that passes the value through without changes. + ''' + + def to_internal_value(self, data): + return data + + def to_representation(self, value): + return value diff --git a/awx/api/filters.py b/awx/api/filters.py index bc3f05d37c..55155224c4 100644 --- a/awx/api/filters.py +++ b/awx/api/filters.py @@ -8,9 +8,10 @@ import re from django.core.exceptions import FieldError, ValidationError from django.db import models from django.db.models import Q -from django.db.models.related import RelatedObject from django.db.models.fields import FieldDoesNotExist +from django.db.models.fields.related import ForeignObjectRel from django.contrib.contenttypes.models import ContentType +from django.utils.encoding import force_text # Django REST Framework from rest_framework.exceptions import ParseError @@ -25,19 +26,6 @@ class MongoFilterBackend(BaseFilterBackend): def filter_queryset(self, request, queryset, view): return queryset -class ActiveOnlyBackend(BaseFilterBackend): - ''' - Filter to show only objects where is_active/active is True. - ''' - - def filter_queryset(self, request, queryset, view): - for field in queryset.model._meta.fields: - if field.name == 'is_active': - queryset = queryset.filter(is_active=True) - elif field.name == 'active': - queryset = queryset.filter(active=True) - return queryset - class TypeFilterBackend(BaseFilterBackend): ''' Filter on type field now returned with all objects. @@ -46,7 +34,7 @@ class TypeFilterBackend(BaseFilterBackend): def filter_queryset(self, request, queryset, view): try: types = None - for key, value in request.QUERY_PARAMS.items(): + for key, value in request.query_params.items(): if key == 'type': if ',' in value: types = value.split(',') @@ -70,7 +58,7 @@ class TypeFilterBackend(BaseFilterBackend): else: queryset = queryset.none() return queryset - except FieldError, e: + except FieldError as e: # Return a 400 for invalid field names. raise ParseError(*e.args) @@ -107,23 +95,21 @@ class FieldLookupBackend(BaseFilterBackend): 'last_updated': 'last_job_run', }.get(name, name) + new_parts.append(name) + if name == 'pk': field = model._meta.pk else: field = model._meta.get_field_by_name(name)[0] - if n < (len(parts) - 2): - if getattr(field, 'rel', None): - model = field.rel.to - else: - model = field.model - new_parts.append(name) + model = getattr(field, 'related_model', None) or field.model + if parts: new_parts.append(parts[-1]) new_lookup = '__'.join(new_parts) return field, new_lookup def to_python_related(self, value): - value = unicode(value) + value = force_text(value) if value.lower() in ('none', 'null'): return None else: @@ -134,7 +120,7 @@ class FieldLookupBackend(BaseFilterBackend): return to_python_boolean(value, allow_none=True) elif isinstance(field, models.BooleanField): return to_python_boolean(value) - elif isinstance(field, RelatedObject): + elif isinstance(field, ForeignObjectRel): return self.to_python_related(value) else: return field.to_python(value) @@ -145,13 +131,15 @@ class FieldLookupBackend(BaseFilterBackend): value = to_python_boolean(value) elif new_lookup.endswith('__in'): items = [] + if not value: + raise ValueError('cannot provide empty value for __in') for item in value.split(','): items.append(self.value_to_python_for_field(field, item)) value = items elif new_lookup.endswith('__regex') or new_lookup.endswith('__iregex'): try: re.compile(value) - except re.error, e: + except re.error as e: raise ValueError(e.args[0]) else: value = self.value_to_python_for_field(field, value) @@ -159,20 +147,20 @@ class FieldLookupBackend(BaseFilterBackend): def filter_queryset(self, request, queryset, view): try: - # Apply filters specified via QUERY_PARAMS. Each entry in the lists + # Apply filters specified via query_params. Each entry in the lists # below is (negate, field, value). and_filters = [] or_filters = [] chain_filters = [] - for key, values in request.QUERY_PARAMS.lists(): + for key, values in request.query_params.lists(): if key in self.RESERVED_NAMES: continue - + # HACK: Make job event filtering by host name mostly work even # when not capturing job event hosts M2M. if queryset.model._meta.object_name == 'JobEvent' and key.startswith('hosts__name'): key = key.replace('hosts__name', 'or__host__name') - or_filters.append((False, 'host__name__isnull', True)) + or_filters.append((False, 'host__name__isnull', True)) # Custom __int filter suffix (internal use only). q_int = False @@ -231,11 +219,11 @@ class FieldLookupBackend(BaseFilterBackend): else: q = Q(**{k:v}) queryset = queryset.filter(q) - queryset = queryset.filter(*args) - return queryset.distinct() - except (FieldError, FieldDoesNotExist, ValueError), e: + queryset = queryset.filter(*args).distinct() + return queryset + except (FieldError, FieldDoesNotExist, ValueError) as e: raise ParseError(e.args[0]) - except ValidationError, e: + except ValidationError as e: raise ParseError(e.messages) class OrderByBackend(BaseFilterBackend): @@ -246,7 +234,7 @@ class OrderByBackend(BaseFilterBackend): def filter_queryset(self, request, queryset, view): try: order_by = None - for key, value in request.QUERY_PARAMS.items(): + for key, value in request.query_params.items(): if key in ('order', 'order_by'): order_by = value if ',' in value: @@ -273,6 +261,6 @@ class OrderByBackend(BaseFilterBackend): new_order_by.append(field) queryset = queryset.order_by(*new_order_by) return queryset - except FieldError, e: + except FieldError as e: # Return a 400 for invalid field names. raise ParseError(*e.args) diff --git a/awx/api/generics.py b/awx/api/generics.py index a0f892210c..51598979d8 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -7,32 +7,37 @@ import logging import time # Django -from django.http import Http404 from django.conf import settings from django.db import connection +from django.http import QueryDict from django.shortcuts import get_object_or_404 from django.template.loader import render_to_string +from django.utils.encoding import smart_text from django.utils.safestring import mark_safe +from django.contrib.contenttypes.models import ContentType # Django REST Framework from rest_framework.authentication import get_authorization_header from rest_framework.exceptions import PermissionDenied from rest_framework import generics from rest_framework.response import Response -from rest_framework.request import clone_request from rest_framework import status from rest_framework import views # AWX from awx.main.models import * # noqa from awx.main.utils import * # noqa +from awx.api.serializers import ResourceAccessListElementSerializer __all__ = ['APIView', 'GenericAPIView', 'ListAPIView', 'SimpleListAPIView', 'ListCreateAPIView', 'SubListAPIView', 'SubListCreateAPIView', 'SubListCreateAttachDetachAPIView', 'RetrieveAPIView', 'RetrieveUpdateAPIView', 'RetrieveDestroyAPIView', 'RetrieveUpdateDestroyAPIView', 'DestroyAPIView', - 'MongoAPIView', 'MongoListAPIView'] + 'SubDetailAPIView', + 'ResourceAccessList', + 'ParentMixin', + 'DeleteLastUnattachLabelMixin',] logger = logging.getLogger('awx.api.generics') @@ -144,6 +149,7 @@ class APIView(views.APIView): 'new_in_220': getattr(self, 'new_in_220', False), 'new_in_230': getattr(self, 'new_in_230', False), 'new_in_240': getattr(self, 'new_in_240', False), + 'new_in_300': getattr(self, 'new_in_300', False), } def get_description(self, html=False): @@ -154,18 +160,22 @@ class APIView(views.APIView): context = self.get_description_context() return render_to_string(template_list, context) - def metadata(self, request): - ''' - Add version number where view was added to Tower. - ''' - ret = super(APIView, self).metadata(request) - added_in_version = '1.2' - for version in ('2.4.0', '2.3.0', '2.2.0', '2.1.0', '2.0.0', '1.4.8', '1.4.5', '1.4', '1.3'): - if getattr(self, 'new_in_%s' % version.replace('.', ''), False): - added_in_version = version - break - ret['added_in_version'] = added_in_version - return ret + def update_raw_data(self, data): + # Remove the parent key if the view is a sublist, since it will be set + # automatically. + parent_key = getattr(self, 'parent_key', None) + if parent_key: + data.pop(parent_key, None) + + # Use request data as-is when original request is an update and the + # submitted data was rejected. + request_method = getattr(self, '_raw_data_request_method', None) + response_status = getattr(self, '_raw_data_response_status', 0) + if request_method in ('POST', 'PUT', 'PATCH') and response_status in xrange(400, 500): + return self.request.data.copy() + + return data + class GenericAPIView(generics.GenericAPIView, APIView): # Base class for all model-based views. @@ -177,18 +187,25 @@ class GenericAPIView(generics.GenericAPIView, APIView): def get_serializer(self, *args, **kwargs): serializer = super(GenericAPIView, self).get_serializer(*args, **kwargs) # Override when called from browsable API to generate raw data form; - # always remove read only fields from sample raw data. + # update serializer "validated" data to be displayed by the raw data + # form. if hasattr(self, '_raw_data_form_marker'): + # Always remove read only fields from serializer. for name, field in serializer.fields.items(): if getattr(field, 'read_only', None): del serializer.fields[name] + serializer._data = self.update_raw_data(serializer.data) return serializer def get_queryset(self): #if hasattr(self.request.user, 'get_queryset'): # return self.request.user.get_queryset(self.model) - #else: - return super(GenericAPIView, self).get_queryset() + if self.queryset is not None: + return self.queryset._clone() + elif self.model is not None: + return self.model._default_manager.all() + else: + return super(GenericAPIView, self).get_queryset() def get_description_context(self): # Set instance attributes needed to get serializer metadata. @@ -200,91 +217,13 @@ class GenericAPIView(generics.GenericAPIView, APIView): if hasattr(self.model, "_meta"): if hasattr(self.model._meta, "verbose_name"): d.update({ - 'model_verbose_name': unicode(self.model._meta.verbose_name), - 'model_verbose_name_plural': unicode(self.model._meta.verbose_name_plural), + 'model_verbose_name': smart_text(self.model._meta.verbose_name), + 'model_verbose_name_plural': smart_text(self.model._meta.verbose_name_plural), }) - d.update({'serializer_fields': self.get_serializer().metadata()}) + d['serializer_fields'] = self.metadata_class().get_serializer_info(self.get_serializer()) d['settings'] = settings return d - def metadata(self, request): - ''' - Add field information for GET requests (so field names/labels are - available even when we can't POST/PUT). - ''' - ret = super(GenericAPIView, self).metadata(request) - actions = ret.get('actions', {}) - # Remove read only fields from PUT/POST data. - for method in ('POST', 'PUT'): - fields = actions.get(method, {}) - for field, meta in fields.items(): - if not isinstance(meta, dict): - continue - if meta.pop('read_only', False): - fields.pop(field) - if 'GET' in self.allowed_methods: - cloned_request = clone_request(request, 'GET') - try: - # Test global permissions - self.check_permissions(cloned_request) - # Test object permissions - if hasattr(self, 'retrieve'): - try: - self.get_object() - except Http404: - # Http404 should be acceptable and the serializer - # metadata should be populated. Except this so the - # outer "else" clause of the try-except-else block - # will be executed. - pass - except (exceptions.APIException, PermissionDenied): - pass - else: - # If user has appropriate permissions for the view, include - # appropriate metadata about the fields that should be supplied. - serializer = self.get_serializer() - actions['GET'] = serializer.metadata() - if hasattr(serializer, 'get_types'): - ret['types'] = serializer.get_types() - # Remove fields labeled as write_only, remove field attributes - # that aren't relevant for retrieving data. - for field, meta in actions['GET'].items(): - if not isinstance(meta, dict): - continue - meta.pop('required', None) - meta.pop('read_only', None) - meta.pop('default', None) - meta.pop('min_length', None) - meta.pop('max_length', None) - if meta.pop('write_only', False): - actions['GET'].pop(field) - if actions: - ret['actions'] = actions - if getattr(self, 'search_fields', None): - ret['search_fields'] = self.search_fields - return ret - -class MongoAPIView(GenericAPIView): - - def get_parent_object(self): - parent_filter = { - self.lookup_field: self.kwargs.get(self.lookup_field, None), - } - return get_object_or_404(self.parent_model, **parent_filter) - - def check_parent_access(self, parent=None): - parent = parent or self.get_parent_object() - parent_access = getattr(self, 'parent_access', 'read') - if parent_access in ('read', 'delete'): - args = (self.parent_model, parent_access, parent) - else: - args = (self.parent_model, parent_access, parent, None) - if not self.request.user.can_access(*args): - raise PermissionDenied() - -class MongoListAPIView(generics.ListAPIView, MongoAPIView): - pass - class SimpleListAPIView(generics.ListAPIView, GenericAPIView): def get_queryset(self): @@ -321,25 +260,7 @@ class ListCreateAPIView(ListAPIView, generics.ListCreateAPIView): # Base class for a list view that allows creating new objects. pass -class SubListAPIView(ListAPIView): - # Base class for a read-only sublist view. - - # Subclasses should define at least: - # model = ModelClass - # serializer_class = SerializerClass - # parent_model = ModelClass - # relationship = 'rel_name_from_parent_to_model' - # And optionally (user must have given access permission on parent object - # to view sublist): - # parent_access = 'read' - - def get_description_context(self): - d = super(SubListAPIView, self).get_description_context() - d.update({ - 'parent_model_verbose_name': unicode(self.parent_model._meta.verbose_name), - 'parent_model_verbose_name_plural': unicode(self.parent_model._meta.verbose_name_plural), - }) - return d +class ParentMixin(object): def get_parent_object(self): parent_filter = { @@ -357,11 +278,31 @@ class SubListAPIView(ListAPIView): if not self.request.user.can_access(*args): raise PermissionDenied() +class SubListAPIView(ListAPIView, ParentMixin): + # Base class for a read-only sublist view. + + # Subclasses should define at least: + # model = ModelClass + # serializer_class = SerializerClass + # parent_model = ModelClass + # relationship = 'rel_name_from_parent_to_model' + # And optionally (user must have given access permission on parent object + # to view sublist): + # parent_access = 'read' + + def get_description_context(self): + d = super(SubListAPIView, self).get_description_context() + d.update({ + 'parent_model_verbose_name': smart_text(self.parent_model._meta.verbose_name), + 'parent_model_verbose_name_plural': smart_text(self.parent_model._meta.verbose_name_plural), + }) + return d + def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) qs = self.request.user.get_queryset(self.model).distinct() - sublist_qs = getattr(parent, self.relationship).distinct() + sublist_qs = getattrd(parent, self.relationship).distinct() return qs & sublist_qs class SubListCreateAPIView(SubListAPIView, ListCreateAPIView): @@ -387,10 +328,11 @@ class SubListCreateAPIView(SubListAPIView, ListCreateAPIView): # Make a copy of the data provided (since it's readonly) in order to # inject additional data. - if hasattr(request.DATA, 'dict'): - data = request.DATA.dict() + if hasattr(request.data, 'copy'): + data = request.data.copy() else: - data = request.DATA + data = QueryDict('') + data.update(request.data) # add the parent key to the post data using the pk from the URL parent_key = getattr(self, 'parent_key', None) @@ -404,14 +346,14 @@ class SubListCreateAPIView(SubListAPIView, ListCreateAPIView): status=status.HTTP_400_BAD_REQUEST) # Verify we have permission to add the object as given. - if not request.user.can_access(self.model, 'add', serializer.init_data): + if not request.user.can_access(self.model, 'add', serializer.initial_data): raise PermissionDenied() # save the object through the serializer, reload and returned the saved # object deserialized obj = serializer.save() serializer = self.get_serializer(instance=obj) - + headers = {'Location': obj.get_absolute_url()} return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) @@ -419,12 +361,19 @@ class SubListCreateAttachDetachAPIView(SubListCreateAPIView): # Base class for a sublist view that allows for creating subobjects and # attaching/detaching them from the parent. + def get_description_context(self): + d = super(SubListCreateAttachDetachAPIView, self).get_description_context() + d.update({ + "has_attach": True, + }) + return d + def attach(self, request, *args, **kwargs): created = False parent = self.get_parent_object() - relationship = getattr(parent, self.relationship) - sub_id = request.DATA.get('id', None) - data = request.DATA + relationship = getattrd(parent, self.relationship) + sub_id = request.data.get('id', None) + data = request.data # Create the sub object if an ID is not provided. if not sub_id: @@ -441,7 +390,7 @@ class SubListCreateAttachDetachAPIView(SubListCreateAPIView): # Retrive the sub object (whether created or by ID). sub = get_object_or_400(self.model, pk=sub_id) - + # Verify we have permission to attach. if not request.user.can_access(self.parent_model, 'attach', parent, sub, self.relationship, data, @@ -460,51 +409,82 @@ class SubListCreateAttachDetachAPIView(SubListCreateAPIView): else: return Response(status=status.HTTP_204_NO_CONTENT) - def unattach(self, request, *args, **kwargs): - sub_id = request.DATA.get('id', None) + def unattach_validate(self, request): + sub_id = request.data.get('id', None) + res = None if not sub_id: data = dict(msg='"id" is required to disassociate') - return Response(data, status=status.HTTP_400_BAD_REQUEST) + res = Response(data, status=status.HTTP_400_BAD_REQUEST) + return (sub_id, res) + def unattach_by_id(self, request, sub_id): parent = self.get_parent_object() parent_key = getattr(self, 'parent_key', None) - relationship = getattr(parent, self.relationship) + relationship = getattrd(parent, self.relationship) sub = get_object_or_400(self.model, pk=sub_id) if not request.user.can_access(self.parent_model, 'unattach', parent, - sub, self.relationship): + sub, self.relationship, request.data): raise PermissionDenied() if parent_key: - # sub object has a ForeignKey to the parent, so we can't remove it - # from the set, only mark it as inactive. - sub.mark_inactive() + sub.delete() else: relationship.remove(sub) return Response(status=status.HTTP_204_NO_CONTENT) + def unattach(self, request, *args, **kwargs): + (sub_id, res) = self.unattach_validate(request) + if res: + return res + return self.unattach_by_id(request, sub_id) + def post(self, request, *args, **kwargs): - if not isinstance(request.DATA, dict): + if not isinstance(request.data, dict): return Response('invalid type for post data', status=status.HTTP_400_BAD_REQUEST) - if 'disassociate' in request.DATA: + if 'disassociate' in request.data: return self.unattach(request, *args, **kwargs) else: return self.attach(request, *args, **kwargs) +''' +Models for which you want the last instance to be deleted from the database +when the last disassociate is called should inherit from this class. Further, +the model should implement is_detached() +''' +class DeleteLastUnattachLabelMixin(object): + def unattach(self, request, *args, **kwargs): + (sub_id, res) = super(DeleteLastUnattachLabelMixin, self).unattach_validate(request) + if res: + return res + + res = super(DeleteLastUnattachLabelMixin, self).unattach_by_id(request, sub_id) + + obj = self.model.objects.get(id=sub_id) + + if obj.is_detached(): + obj.delete() + + return res + +class SubDetailAPIView(generics.RetrieveAPIView, GenericAPIView, ParentMixin): + pass + class RetrieveAPIView(generics.RetrieveAPIView, GenericAPIView): pass class RetrieveUpdateAPIView(RetrieveAPIView, generics.RetrieveUpdateAPIView): - def pre_save(self, obj): - super(RetrieveUpdateAPIView, self).pre_save(obj) - def update(self, request, *args, **kwargs): self.update_filter(request, *args, **kwargs) return super(RetrieveUpdateAPIView, self).update(request, *args, **kwargs) + def partial_update(self, request, *args, **kwargs): + self.update_filter(request, *args, **kwargs) + return super(RetrieveUpdateAPIView, self).partial_update(request, *args, **kwargs) + def update_filter(self, request, *args, **kwargs): ''' scrub any fields the user cannot/should not put/patch, based on user context. This runs after read-only serialization filtering ''' pass @@ -514,17 +494,9 @@ class RetrieveDestroyAPIView(RetrieveAPIView, generics.RetrieveDestroyAPIView): def destroy(self, request, *args, **kwargs): # somewhat lame that delete has to call it's own permissions check obj = self.get_object() - # FIXME: Why isn't the active check being caught earlier by RBAC? - if not getattr(obj, 'active', True): - raise Http404() - if not getattr(obj, 'is_active', True): - raise Http404() if not request.user.can_access(self.model, 'delete', obj): raise PermissionDenied() - if hasattr(obj, 'mark_inactive'): - obj.mark_inactive() - else: - raise NotImplementedError('destroy() not implemented yet for %s' % obj) + obj.delete() return Response(status=status.HTTP_204_NO_CONTENT) class RetrieveUpdateDestroyAPIView(RetrieveUpdateAPIView, RetrieveDestroyAPIView): @@ -532,3 +504,21 @@ class RetrieveUpdateDestroyAPIView(RetrieveUpdateAPIView, RetrieveDestroyAPIView class DestroyAPIView(GenericAPIView, generics.DestroyAPIView): pass + + +class ResourceAccessList(ListAPIView): + + serializer_class = ResourceAccessListElementSerializer + + def get_queryset(self): + self.object_id = self.kwargs['pk'] + resource_model = getattr(self, 'resource_model') + obj = get_object_or_404(resource_model, pk=self.object_id) + + content_type = ContentType.objects.get_for_model(obj) + roles = set(Role.objects.filter(content_type=content_type, object_id=obj.id)) + + ancestors = set() + for r in roles: + ancestors.update(set(r.ancestors.all())) + return User.objects.filter(roles__in=list(ancestors)).distinct() diff --git a/awx/api/license.py b/awx/api/license.py index 60d10f5dcd..55706364f8 100644 --- a/awx/api/license.py +++ b/awx/api/license.py @@ -11,19 +11,21 @@ class LicenseForbids(APIException): default_detail = 'Your Tower license does not allow that.' -def get_license(show_key=False): +def get_license(show_key=False, bypass_database=False): """Return a dictionary representing the license currently in place on this Tower instance. """ license_reader = TaskSerializer() - return license_reader.from_file(show_key=show_key) + if bypass_database: + return license_reader.from_file(show_key=show_key) + return license_reader.from_database(show_key=show_key) -def feature_enabled(name): +def feature_enabled(name, bypass_database=False): """Return True if the requested feature is enabled, False otherwise. If the feature does not exist, raise KeyError. """ - license = get_license() + license = get_license(bypass_database=bypass_database) # Sanity check: If there is no license, the feature is considered # to be off. diff --git a/awx/api/management/commands/uses_mongo.py b/awx/api/management/commands/uses_mongo.py index 267c389d62..8ea6404f4a 100644 --- a/awx/api/management/commands/uses_mongo.py +++ b/awx/api/management/commands/uses_mongo.py @@ -28,7 +28,7 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): # Get the license data. license_reader = TaskSerializer() - license_data = license_reader.from_file() + license_data = license_reader.from_database() # Does the license have features, at all? # If there is no license yet, then all features are clearly off. diff --git a/awx/api/metadata.py b/awx/api/metadata.py new file mode 100644 index 0000000000..c326a4a875 --- /dev/null +++ b/awx/api/metadata.py @@ -0,0 +1,190 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +from collections import OrderedDict + +# Django +from django.core.exceptions import PermissionDenied +from django.http import Http404 +from django.utils.encoding import force_text, smart_text + +# Django REST Framework +from rest_framework import exceptions +from rest_framework import metadata +from rest_framework import serializers +from rest_framework.relations import RelatedField +from rest_framework.request import clone_request + +# Ansible Tower +from awx.main.models import InventorySource, NotificationTemplate + + +class Metadata(metadata.SimpleMetadata): + + def get_field_info(self, field): + field_info = OrderedDict() + field_info['type'] = self.label_lookup[field] + field_info['required'] = getattr(field, 'required', False) + + text_attrs = [ + 'read_only', 'label', 'help_text', + 'min_length', 'max_length', + 'min_value', 'max_value' + ] + + for attr in text_attrs: + value = getattr(field, attr, None) + if value is not None and value != '': + field_info[attr] = force_text(value, strings_only=True) + + # Update help text for common fields. + serializer = getattr(field, 'parent', None) + if serializer: + field_help_text = { + 'id': 'Database ID for this {}.', + 'name': 'Name of this {}.', + 'description': 'Optional description of this {}.', + 'type': 'Data type for this {}.', + 'url': 'URL for this {}.', + 'related': 'Data structure with URLs of related resources.', + 'summary_fields': 'Data structure with name/description for related resources.', + 'created': 'Timestamp when this {} was created.', + 'modified': 'Timestamp when this {} was last modified.', + } + if field.field_name in field_help_text: + opts = serializer.Meta.model._meta.concrete_model._meta + verbose_name = smart_text(opts.verbose_name) + field_info['help_text'] = field_help_text[field.field_name].format(verbose_name) + + # Indicate if a field has a default value. + # FIXME: Still isn't showing all default values? + try: + field_info['default'] = field.get_default() + except serializers.SkipField: + pass + + if getattr(field, 'child', None): + field_info['child'] = self.get_field_info(field.child) + elif getattr(field, 'fields', None): + field_info['children'] = self.get_serializer_info(field) + + if hasattr(field, 'choices') and not isinstance(field, RelatedField): + field_info['choices'] = [(choice_value, choice_name) for choice_value, choice_name in field.choices.items()] + + # Indicate if a field is write-only. + if getattr(field, 'write_only', False): + field_info['write_only'] = True + + # Special handling of inventory source_region choices that vary based on + # selected inventory source. + if field.field_name == 'source_regions': + for cp in ('azure', 'ec2', 'gce', 'rax'): + get_regions = getattr(InventorySource, 'get_%s_region_choices' % cp) + field_info['%s_region_choices' % cp] = get_regions() + + # Special handling of group_by choices for EC2. + if field.field_name == 'group_by': + for cp in ('ec2',): + get_group_by_choices = getattr(InventorySource, 'get_%s_group_by_choices' % cp) + field_info['%s_group_by_choices' % cp] = get_group_by_choices() + + # Special handling of notification configuration where the required properties + # are conditional on the type selected. + if field.field_name == 'notification_configuration': + for (notification_type_name, notification_tr_name, notification_type_class) in NotificationTemplate.NOTIFICATION_TYPES: + field_info[notification_type_name] = notification_type_class.init_parameters + + # Update type of fields returned... + if field.field_name == 'type': + field_info['type'] = 'choice' + elif field.field_name == 'url': + field_info['type'] = 'string' + elif field.field_name in ('related', 'summary_fields'): + field_info['type'] = 'object' + elif field.field_name in ('created', 'modified'): + field_info['type'] = 'datetime' + + return field_info + + def determine_actions(self, request, view): + # Add field information for GET requests (so field names/labels are + # available even when we can't POST/PUT). + actions = {} + for method in {'GET', 'PUT', 'POST'} & set(view.allowed_methods): + view.request = clone_request(request, method) + try: + # Test global permissions + if hasattr(view, 'check_permissions'): + view.check_permissions(view.request) + # Test object permissions + if method == 'PUT' and hasattr(view, 'get_object'): + view.get_object() + except (exceptions.APIException, PermissionDenied, Http404): + continue + else: + # If user has appropriate permissions for the view, include + # appropriate metadata about the fields that should be supplied. + serializer = view.get_serializer() + actions[method] = self.get_serializer_info(serializer) + finally: + view.request = request + + for field, meta in actions[method].items(): + if not isinstance(meta, dict): + continue + + # Add type choices if available from the serializer. + if field == 'type' and hasattr(serializer, 'get_type_choices'): + meta['choices'] = serializer.get_type_choices() + + # For GET method, remove meta attributes that aren't relevant + # when reading a field and remove write-only fields. + if method == 'GET': + meta.pop('required', None) + meta.pop('read_only', None) + meta.pop('default', None) + meta.pop('min_length', None) + meta.pop('max_length', None) + if meta.pop('write_only', False): + actions['GET'].pop(field) + + # For PUT/POST methods, remove read-only fields. + if method in ('PUT', 'POST'): + if meta.pop('read_only', False): + actions[method].pop(field) + + return actions + + def determine_metadata(self, request, view): + metadata = super(Metadata, self).determine_metadata(request, view) + + # Add version number in which view was added to Tower. + added_in_version = '1.2' + for version in ('3.0.0', '2.4.0', '2.3.0', '2.2.0', '2.1.0', '2.0.0', '1.4.8', '1.4.5', '1.4', '1.3'): + if getattr(view, 'new_in_%s' % version.replace('.', ''), False): + added_in_version = version + break + metadata['added_in_version'] = added_in_version + + # Add type(s) handled by this view/serializer. + if hasattr(view, 'get_serializer'): + serializer = view.get_serializer() + if hasattr(serializer, 'get_types'): + metadata['types'] = serializer.get_types() + + # Add search fields if available from the view. + if getattr(view, 'search_fields', None): + metadata['search_fields'] = view.search_fields + + return metadata + +class RoleMetadata(Metadata): + def determine_metadata(self, request, view): + metadata = super(RoleMetadata, self).determine_metadata(request, view) + if 'actions' in metadata: + metadata['actions'].pop('POST') + metadata['actions']['POST'] = { + "id": {"type": "integer", "label": "ID", "help_text": "Database ID for this role."}, + "disassociate": {"type": "integer", "label": "Disassociate", "help_text": "Provide to remove this role."}, + } + return metadata diff --git a/awx/api/pagination.py b/awx/api/pagination.py index ac8ba62123..ee17aee0e1 100644 --- a/awx/api/pagination.py +++ b/awx/api/pagination.py @@ -2,36 +2,24 @@ # All Rights Reserved. # Django REST Framework -from rest_framework import serializers, pagination -from rest_framework.templatetags.rest_framework import replace_query_param +from rest_framework import pagination +from rest_framework.utils.urls import replace_query_param -class NextPageField(pagination.NextPageField): - '''Pagination field to output URL path.''' - def to_native(self, value): - if not value.has_next(): +class Pagination(pagination.PageNumberPagination): + + page_size_query_param = 'page_size' + + def get_next_link(self): + if not self.page.has_next(): return None - page = value.next_page_number() - request = self.context.get('request') - url = request and request.get_full_path() or '' - return replace_query_param(url, self.page_field, page) + url = self.request and self.request.get_full_path() or '' + page_number = self.page.next_page_number() + return replace_query_param(url, self.page_query_param, page_number) -class PreviousPageField(pagination.NextPageField): - '''Pagination field to output URL path.''' - - def to_native(self, value): - if not value.has_previous(): + def get_previous_link(self): + if not self.page.has_previous(): return None - page = value.previous_page_number() - request = self.context.get('request') - url = request and request.get_full_path() or '' - return replace_query_param(url, self.page_field, page) - -class PaginationSerializer(pagination.BasePaginationSerializer): - ''' - Custom pagination serializer to output only URL path (without host/port). - ''' - - count = serializers.Field(source='paginator.count') - next = NextPageField(source='*') - previous = PreviousPageField(source='*') + url = self.request and self.request.get_full_path() or '' + page_number = self.page.previous_page_number() + return replace_query_param(url, self.page_query_param, page_number) diff --git a/awx/api/parsers.py b/awx/api/parsers.py new file mode 100644 index 0000000000..94ddbec561 --- /dev/null +++ b/awx/api/parsers.py @@ -0,0 +1,30 @@ +# Python +from collections import OrderedDict +import json + +# Django +from django.conf import settings +from django.utils import six + +# Django REST Framework +from rest_framework import parsers +from rest_framework.exceptions import ParseError + + +class JSONParser(parsers.JSONParser): + """ + Parses JSON-serialized data, preserving order of dictionary keys. + """ + + def parse(self, stream, media_type=None, parser_context=None): + """ + Parses the incoming bytestream as JSON and returns the resulting data. + """ + parser_context = parser_context or {} + encoding = parser_context.get('encoding', settings.DEFAULT_CHARSET) + + try: + data = stream.read().decode(encoding) + return json.loads(data, object_pairs_hook=OrderedDict) + except ValueError as exc: + raise ParseError('JSON parse error - %s' % six.text_type(exc)) diff --git a/awx/api/permissions.py b/awx/api/permissions.py index 95b640f72f..6e1320e2d8 100644 --- a/awx/api/permissions.py +++ b/awx/api/permissions.py @@ -19,7 +19,7 @@ from awx.main.utils import get_object_or_400 logger = logging.getLogger('awx.api.permissions') __all__ = ['ModelAccessPermission', 'JobTemplateCallbackPermission', - 'TaskPermission'] + 'TaskPermission', 'ProjectUpdatePermission'] class ModelAccessPermission(permissions.BasePermission): ''' @@ -61,7 +61,7 @@ class ModelAccessPermission(permissions.BasePermission): else: if obj: return True - return check_user_access(request.user, view.model, 'add', request.DATA) + return check_user_access(request.user, view.model, 'add', request.data) def check_put_permissions(self, request, view, obj=None): if not obj: @@ -70,10 +70,10 @@ class ModelAccessPermission(permissions.BasePermission): return True if getattr(view, 'is_variable_data', False): return check_user_access(request.user, view.model, 'change', obj, - dict(variables=request.DATA)) + dict(variables=request.data)) else: return check_user_access(request.user, view.model, 'change', obj, - request.DATA) + request.data) def check_patch_permissions(self, request, view, obj=None): return self.check_put_permissions(request, view, obj) @@ -103,11 +103,7 @@ class ModelAccessPermission(permissions.BasePermission): if not request.user or request.user.is_anonymous(): return False - # Don't allow inactive users (and respond with a 403). - if not request.user.is_active: - raise PermissionDenied('your account is inactive') - - # Always allow superusers (as long as they are active). + # Always allow superusers if getattr(view, 'always_allow_superuser', True) and request.user.is_superuser: return True @@ -127,11 +123,11 @@ class ModelAccessPermission(permissions.BasePermission): def has_permission(self, request, view, obj=None): logger.debug('has_permission(user=%s method=%s data=%r, %s, %r)', - request.user, request.method, request.DATA, + request.user, request.method, request.data, view.__class__.__name__, obj) try: response = self.check_permissions(request, view, obj) - except Exception, e: + except Exception as e: logger.debug('has_permission raised %r', e, exc_info=True) raise else: @@ -156,13 +152,11 @@ class JobTemplateCallbackPermission(ModelAccessPermission): # Require method to be POST, host_config_key to be specified and match # the requested job template, and require the job template to be # active in order to proceed. - host_config_key = request.DATA.get('host_config_key', '') + host_config_key = request.data.get('host_config_key', '') if request.method.lower() != 'post': raise PermissionDenied() elif not host_config_key: raise PermissionDenied() - elif obj and not obj.active: - raise PermissionDenied() elif obj and obj.host_config_key != host_config_key: raise PermissionDenied() else: @@ -182,7 +176,7 @@ class TaskPermission(ModelAccessPermission): # Verify that the ID present in the auth token is for a valid, active # unified job. try: - unified_job = UnifiedJob.objects.get(active=True, status='running', + unified_job = UnifiedJob.objects.get(status='running', pk=int(request.auth.split('-')[0])) except (UnifiedJob.DoesNotExist, TypeError): return False @@ -196,3 +190,15 @@ class TaskPermission(ModelAccessPermission): return bool(not obj or obj.pk == unified_job.pk) else: return False + +class ProjectUpdatePermission(ModelAccessPermission): + ''' + Permission check used by ProjectUpdateView to determine who can update projects + ''' + def check_get_permissions(self, request, view, obj=None): + project = get_object_or_400(view.model, pk=view.kwargs['pk']) + return check_user_access(request.user, view.model, 'read', project) + + def check_post_permissions(self, request, view, obj=None): + project = get_object_or_400(view.model, pk=view.kwargs['pk']) + return check_user_access(request.user, view.model, 'start', project) diff --git a/awx/api/renderers.py b/awx/api/renderers.py index fd60520db2..348a8220c4 100644 --- a/awx/api/renderers.py +++ b/awx/api/renderers.py @@ -4,6 +4,7 @@ # Django REST Framework from rest_framework import renderers + class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer): ''' Customizations to the default browsable API renderer. @@ -16,24 +17,39 @@ class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer): return renderers.JSONRenderer() return renderer - def get_raw_data_form(self, view, method, request): + def get_context(self, data, accepted_media_type, renderer_context): + # Store the associated response status to know how to populate the raw + # data form. + try: + setattr(renderer_context['view'], '_raw_data_response_status', renderer_context['response'].status_code) + return super(BrowsableAPIRenderer, self).get_context(data, accepted_media_type, renderer_context) + finally: + delattr(renderer_context['view'], '_raw_data_response_status') + + def get_raw_data_form(self, data, view, method, request): + # Set a flag on the view to indiciate to the view/serializer that we're + # creating a raw data form for the browsable API. Store the original + # request method to determine how to populate the raw data form. try: setattr(view, '_raw_data_form_marker', True) - return super(BrowsableAPIRenderer, self).get_raw_data_form(view, method, request) + setattr(view, '_raw_data_request_method', request.method) + return super(BrowsableAPIRenderer, self).get_raw_data_form(data, view, method, request) finally: delattr(view, '_raw_data_form_marker') + delattr(view, '_raw_data_request_method') - def get_rendered_html_form(self, view, method, request): - '''Never show auto-generated form (only raw form).''' + def get_rendered_html_form(self, data, view, method, request): + # Never show auto-generated form (only raw form). obj = getattr(view, 'object', None) if not self.show_form_for_method(view, method, request, obj): return if method in ('DELETE', 'OPTIONS'): return True # Don't actually need to return a form - def get_context(self, data, accepted_media_type, renderer_context): - context = super(BrowsableAPIRenderer, self).get_context(data, accepted_media_type, renderer_context) - return context + def get_filter_form(self, data, view, request): + # Don't show filter form in browsable API. + return + class PlainTextRenderer(renderers.BaseRenderer): @@ -45,9 +61,12 @@ class PlainTextRenderer(renderers.BaseRenderer): data = unicode(data) return data.encode(self.charset) + class DownloadTextRenderer(PlainTextRenderer): + format = "txt_download" + class AnsiTextRenderer(PlainTextRenderer): media_type = 'text/plain' diff --git a/awx/api/serializers.py b/awx/api/serializers.py index bf258cc524..679d23aeee 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2,14 +2,12 @@ # All Rights Reserved. # Python -import functools +import copy import json import re import logging +from collections import OrderedDict from dateutil import rrule -from ast import literal_eval - -from rest_framework_mongoengine.serializers import MongoEngineModelSerializer, MongoEngineModelSerializerOptions # PyYAML import yaml @@ -18,17 +16,20 @@ import yaml from django.conf import settings from django.contrib.auth import authenticate from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType from django.core.urlresolvers import reverse -from django.core.exceptions import ObjectDoesNotExist -from django.db.models.fields import BLANK_CHOICE_DASH -from django.utils.datastructures import SortedDict +from django.core.exceptions import ObjectDoesNotExist, ValidationError as DjangoValidationError +from django.db import models # from django.utils.translation import ugettext_lazy as _ -from django.utils.encoding import smart_str +from django.utils.encoding import force_text +from django.utils.text import capfirst # Django REST Framework -from rest_framework.compat import get_concrete_model +from rest_framework.exceptions import ValidationError from rest_framework import fields from rest_framework import serializers +from rest_framework import validators +from rest_framework.utils.serializer_helpers import ReturnList # Django-Polymorphic from polymorphic import PolymorphicModel @@ -36,17 +37,17 @@ from polymorphic import PolymorphicModel # AWX from awx.main.constants import SCHEDULEABLE_PROVIDERS from awx.main.models import * # noqa -from awx.main.utils import get_type_for_model, get_model_for_type, build_url, timestamp_apiformat -from awx.main.redact import REPLACE_STR +from awx.main.fields import ImplicitRoleField +from awx.main.utils import get_type_for_model, get_model_for_type, build_url, timestamp_apiformat, camelcase_to_underscore, getattrd +from awx.main.conf import tower_settings from awx.api.license import feature_enabled - -from awx.fact.models import * # noqa +from awx.api.fields import BooleanNullField, CharNullField, ChoiceNullField, EncryptedPasswordField, VerbatimField logger = logging.getLogger('awx.api.serializers') # Fields that should be summarized regardless of object type. -DEFAULT_SUMMARY_FIELDS = ('name', 'description')# , 'created_by', 'modified_by')#, 'type') +DEFAULT_SUMMARY_FIELDS = ('id', 'name', 'description')# , 'created_by', 'modified_by')#, 'type') # Keys are fields (foreign keys) where, if found on an instance, summary info # should be added to the serialized data. Values are a tuple of field names on @@ -75,7 +76,7 @@ SUMMARIZABLE_FK_FIELDS = { 'project': DEFAULT_SUMMARY_FIELDS + ('status',), 'credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud'), 'cloud_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud'), - 'permission': DEFAULT_SUMMARY_FIELDS, + 'network_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'net'), 'job': DEFAULT_SUMMARY_FIELDS + ('status', 'failed',), 'job_template': DEFAULT_SUMMARY_FIELDS, 'schedule': DEFAULT_SUMMARY_FIELDS + ('next_run',), @@ -86,50 +87,28 @@ SUMMARIZABLE_FK_FIELDS = { 'current_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'), 'current_job': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'), 'inventory_source': ('source', 'last_updated', 'status'), + 'custom_inventory_script': DEFAULT_SUMMARY_FIELDS, 'source_script': ('name', 'description'), + 'role': ('id', 'role_field'), + 'notification_template': DEFAULT_SUMMARY_FIELDS, } -# Monkeypatch REST framework to include default value and write_only flag in -# field metadata. -def add_metadata_default(f): - @functools.wraps(f) - def _add_metadata_default(self, *args, **kwargs): - metadata = f(self, *args, **kwargs) - if hasattr(self, 'get_default_value'): - default = self.get_default_value() - if default is None and metadata.get('type', '') != 'field': - default = getattr(self, 'empty', None) - if default or not getattr(self, 'required', False): - metadata['default'] = default - if getattr(self, 'write_only', False): - metadata['write_only'] = True - return metadata - return _add_metadata_default -fields.Field.metadata = add_metadata_default(fields.Field.metadata) +def reverse_gfk(content_object): + ''' + Computes a reverse for a GenericForeignKey field. -class ChoiceField(fields.ChoiceField): + Returns a dictionary of the form + { '': reverse() } + for example + { 'organization': '/api/v1/organizations/1/' } + ''' + if content_object is None or not hasattr(content_object, 'get_absolute_url'): + return {} - def __init__(self, *args, **kwargs): - super(ChoiceField, self).__init__(*args, **kwargs) - if not self.required: - # Remove extra blank option if one is already present (for writable - # field) or if present at all for read-only fields. - if ([x[0] for x in self.choices].count(u'') > 1 or self.get_default_value() != u'' or self.read_only) \ - and BLANK_CHOICE_DASH[0] in self.choices: - self.choices = [x for x in self.choices - if x != BLANK_CHOICE_DASH[0]] - - def metadata(self): - metadata = super(ChoiceField, self).metadata() - metadata['choices'] = self.choices or [] - if not self.choices: - metadata.pop('default', None) - return metadata - -# Monkeypatch REST framework to replace default ChoiceField used by -# ModelSerializer. -serializers.ChoiceField = ChoiceField + return { + camelcase_to_underscore(content_object.__class__.__name__): content_object.get_absolute_url() + } class BaseSerializerMetaclass(serializers.SerializerMetaclass): @@ -153,17 +132,46 @@ class BaseSerializerMetaclass(serializers.SerializerMetaclass): # Define fields as 'foo' and 'bar'; ignore base class fields. fields = ('foo', 'bar') + # Extra field kwargs dicts are also merged from base classes. + extra_kwargs = { + 'foo': {'required': True}, + 'bar': {'read_only': True}, + } + + # If a subclass were to define extra_kwargs as: + extra_kwargs = { + 'foo': {'required': False, 'default': ''}, + 'bar': {'label': 'New Label for Bar'}, + } + + # The resulting value of extra_kwargs would be: + extra_kwargs = { + 'foo': {'required': False, 'default': ''}, + 'bar': {'read_only': True, 'label': 'New Label for Bar'}, + } + + # Extra field kwargs cannot be removed in subclasses, only replaced. + ''' + @staticmethod + def _is_list_of_strings(x): + return isinstance(x, (list, tuple)) and all([isinstance(y, basestring) for y in x]) + + @staticmethod + def _is_extra_kwargs(x): + return isinstance(x, dict) and all([isinstance(k, basestring) and isinstance(v, dict) for k,v in x.items()]) + @classmethod def _update_meta(cls, base, meta, other=None): for attr in dir(other): if attr.startswith('_'): continue - meta_val = getattr(meta, attr, []) - val = getattr(other, attr, []) - # Special handling for lists of strings (field names). - if isinstance(val, (list, tuple)) and all([isinstance(x, basestring) for x in val]): + val = getattr(other, attr) + meta_val = getattr(meta, attr, None) + # Special handling for lists/tuples of strings (field names). + if cls._is_list_of_strings(val) and cls._is_list_of_strings(meta_val or []): + meta_val = meta_val or [] new_vals = [] except_vals = [] if base: # Merge values from all bases. @@ -179,6 +187,20 @@ class BaseSerializerMetaclass(serializers.SerializerMetaclass): for v in new_vals: if v not in except_vals and v not in val: val.append(v) + val = tuple(val) + # Merge extra_kwargs dicts from base classes. + elif cls._is_extra_kwargs(val) and cls._is_extra_kwargs(meta_val or {}): + meta_val = meta_val or {} + new_val = {} + if base: + for k,v in meta_val.items(): + new_val[k] = copy.deepcopy(v) + for k,v in val.items(): + new_val.setdefault(k, {}).update(copy.deepcopy(v)) + val = new_val + # Any other values are copied in case they are mutable objects. + else: + val = copy.deepcopy(val) setattr(meta, attr, val) def __new__(cls, name, bases, attrs): @@ -190,64 +212,29 @@ class BaseSerializerMetaclass(serializers.SerializerMetaclass): return super(BaseSerializerMetaclass, cls).__new__(cls, name, bases, attrs) -class BaseSerializerOptions(serializers.ModelSerializerOptions): - - def __init__(self, meta): - super(BaseSerializerOptions, self).__init__(meta) - self.summary_fields = getattr(meta, 'summary_fields', ()) - self.summarizable_fields = getattr(meta, 'summarizable_fields', ()) - - class BaseSerializer(serializers.ModelSerializer): __metaclass__ = BaseSerializerMetaclass - _options_class = BaseSerializerOptions class Meta: fields = ('id', 'type', 'url', 'related', 'summary_fields', 'created', 'modified', 'name', 'description') - summary_fields = () # FIXME: List of field names from this serializer that should be used when included as part of another's summary_fields. - summarizable_fields = () # FIXME: List of field names on this serializer that should be included in summary_fields. + summary_fields = () + summarizable_fields = () # add the URL and related resources - type = serializers.SerializerMethodField('get_type') - url = serializers.SerializerMethodField('get_url') + type = serializers.SerializerMethodField() + url = serializers.SerializerMethodField() related = serializers.SerializerMethodField('_get_related') summary_fields = serializers.SerializerMethodField('_get_summary_fields') # make certain fields read only - created = serializers.SerializerMethodField('get_created') - modified = serializers.SerializerMethodField('get_modified') - active = serializers.SerializerMethodField('get_active') + created = serializers.SerializerMethodField() + modified = serializers.SerializerMethodField() - def get_fields(self): - opts = get_concrete_model(self.opts.model)._meta - ret = super(BaseSerializer, self).get_fields() - for key, field in ret.items(): - if key == 'id' and not getattr(field, 'help_text', None): - field.help_text = 'Database ID for this %s.' % unicode(opts.verbose_name) - elif key == 'type': - field.help_text = 'Data type for this %s.' % unicode(opts.verbose_name) - field.type_label = 'multiple choice' - elif key == 'url': - field.help_text = 'URL for this %s.' % unicode(opts.verbose_name) - field.type_label = 'string' - elif key == 'related': - field.help_text = 'Data structure with URLs of related resources.' - field.type_label = 'object' - elif key == 'summary_fields': - field.help_text = 'Data structure with name/description for related resources.' - field.type_label = 'object' - elif key == 'created': - field.help_text = 'Timestamp when this %s was created.' % unicode(opts.verbose_name) - field.type_label = 'datetime' - elif key == 'modified': - field.help_text = 'Timestamp when this %s was last modified.' % unicode(opts.verbose_name) - field.type_label = 'datetime' - return ret def get_type(self, obj): - return get_type_for_model(self.opts.model) + return get_type_for_model(self.Meta.model) def get_types(self): return [self.get_type(None)] @@ -262,12 +249,12 @@ class BaseSerializer(serializers.ModelSerializer): } choices = [] for t in self.get_types(): - name = type_name_map.get(t, unicode(get_model_for_type(t)._meta.verbose_name).title()) + name = type_name_map.get(t, force_text(get_model_for_type(t)._meta.verbose_name).title()) choices.append((t, name)) return choices def get_url(self, obj): - if obj is None: + if obj is None or not hasattr(obj, 'get_absolute_url'): return '' elif isinstance(obj, User): return reverse('api:user_detail', args=(obj.pk,)) @@ -278,10 +265,10 @@ class BaseSerializer(serializers.ModelSerializer): return {} if obj is None else self.get_related(obj) def get_related(self, obj): - res = SortedDict() - if getattr(obj, 'created_by', None) and obj.created_by.is_active: + res = OrderedDict() + if getattr(obj, 'created_by', None): res['created_by'] = reverse('api:user_detail', args=(obj.created_by.pk,)) - if getattr(obj, 'modified_by', None) and obj.modified_by.is_active: + if getattr(obj, 'modified_by', None): res['modified_by'] = reverse('api:user_detail', args=(obj.modified_by.pk,)) return res @@ -291,7 +278,7 @@ class BaseSerializer(serializers.ModelSerializer): def get_summary_fields(self, obj): # Return values for certain fields on related objects, to simplify # displaying lists of items without additional API requests. - summary_fields = SortedDict() + summary_fields = OrderedDict() for fk, related_fields in SUMMARIZABLE_FK_FIELDS.items(): try: # A few special cases where we don't want to access the field @@ -306,11 +293,7 @@ class BaseSerializer(serializers.ModelSerializer): continue if fkval == obj: continue - if hasattr(fkval, 'active') and not fkval.active: - continue - if hasattr(fkval, 'is_active') and not fkval.is_active: - continue - summary_fields[fk] = SortedDict() + summary_fields[fk] = OrderedDict() for field in related_fields: fval = getattr(fkval, field, None) if fval is None and field == 'type': @@ -325,14 +308,28 @@ class BaseSerializer(serializers.ModelSerializer): # Can be raised by the reverse accessor for a OneToOneField. except ObjectDoesNotExist: pass - if getattr(obj, 'created_by', None) and obj.created_by.is_active: - summary_fields['created_by'] = SortedDict() + if getattr(obj, 'created_by', None): + summary_fields['created_by'] = OrderedDict() for field in SUMMARIZABLE_FK_FIELDS['user']: summary_fields['created_by'][field] = getattr(obj.created_by, field) - if getattr(obj, 'modified_by', None) and obj.modified_by.is_active: - summary_fields['modified_by'] = SortedDict() + if getattr(obj, 'modified_by', None): + summary_fields['modified_by'] = OrderedDict() for field in SUMMARIZABLE_FK_FIELDS['user']: summary_fields['modified_by'][field] = getattr(obj.modified_by, field) + + # RBAC summary fields + roles = {} + for field in obj._meta.get_fields(): + if type(field) is ImplicitRoleField: + role = getattr(obj, field.name) + #roles[field.name] = RoleSerializer(data=role).to_representation(role) + roles[field.name] = { + 'id': role.id, + 'name': role.name, + 'description': role.description, + } + if len(roles) > 0: + summary_fields['object_roles'] = roles return summary_fields def get_created(self, obj): @@ -340,31 +337,96 @@ class BaseSerializer(serializers.ModelSerializer): return None elif isinstance(obj, User): return obj.date_joined - else: + elif hasattr(obj, 'created'): return obj.created + return None def get_modified(self, obj): if obj is None: return None elif isinstance(obj, User): return obj.last_login # Not actually exposed for User. - else: + elif hasattr(obj, 'modified'): return obj.modified + return None - def get_active(self, obj): - if obj is None: - return False - elif isinstance(obj, User): - return obj.is_active - else: - return obj.active + def build_standard_field(self, field_name, model_field): + # DRF 3.3 serializers.py::build_standard_field() -> utils/field_mapping.py::get_field_kwargs() short circuits + # when a Model's editable field is set to False. The short circuit skips choice rendering. + # + # This logic is to force rendering choice's on an uneditable field. + # Note: Consider expanding this rendering for more than just choices fields + # Note: This logic works in conjuction with + if hasattr(model_field, 'choices') and model_field.choices: + was_editable = model_field.editable + model_field.editable = True - def get_validation_exclusions(self, instance=None): - # Override base class method to continue to use model validation for - # fields (including optional ones), appears this was broken by DRF - # 2.3.13 update. - cls = self.opts.model - opts = get_concrete_model(cls)._meta + field_class, field_kwargs = super(BaseSerializer, self).build_standard_field(field_name, model_field) + if hasattr(model_field, 'choices') and model_field.choices: + model_field.editable = was_editable + if was_editable is False: + field_kwargs['read_only'] = True + + # Pass model field default onto the serializer field if field is not read-only. + if model_field.has_default() and not field_kwargs.get('read_only', False): + field_kwargs['default'] = field_kwargs['initial'] = model_field.get_default() + + # Enforce minimum value of 0 for PositiveIntegerFields. + if isinstance(model_field, (models.PositiveIntegerField, models.PositiveSmallIntegerField)) and 'choices' not in field_kwargs: + field_kwargs['min_value'] = 0 + + # Use custom boolean field that allows null and empty string as False values. + if isinstance(model_field, models.BooleanField) and not field_kwargs.get('read_only', False): + field_class = BooleanNullField + + # Use custom char or choice field that coerces null to an empty string. + if isinstance(model_field, (models.CharField, models.TextField)) and not field_kwargs.get('read_only', False): + if 'choices' in field_kwargs: + field_class = ChoiceNullField + else: + field_class = CharNullField + + # Update verbosity choices from settings (for job templates, jobs, ad hoc commands). + if field_name == 'verbosity' and 'choices' in field_kwargs: + field_kwargs['choices'] = getattr(settings, 'VERBOSITY_CHOICES', field_kwargs['choices']) + + # Update the message used for the unique validator to use capitalized + # verbose name; keeps unique message the same as with DRF 2.x. + opts = self.Meta.model._meta.concrete_model._meta + for validator in field_kwargs.get('validators', []): + if isinstance(validator, validators.UniqueValidator): + unique_error_message = model_field.error_messages.get('unique', None) + if unique_error_message: + unique_error_message = unique_error_message % { + 'model_name': capfirst(opts.verbose_name), + 'field_label': capfirst(model_field.verbose_name), + } + validator.message = unique_error_message + + return field_class, field_kwargs + + def build_relational_field(self, field_name, relation_info): + field_class, field_kwargs = super(BaseSerializer, self).build_relational_field(field_name, relation_info) + # Don't include choices for foreign key fields. + field_kwargs.pop('choices', None) + return field_class, field_kwargs + + def get_unique_together_validators(self): + # Allow the model's full_clean method to handle the unique together validation. + return [] + + def run_validation(self, data=fields.empty): + try: + return super(BaseSerializer, self).run_validation(data) + except ValidationError as exc: + # Avoid bug? in DRF if exc.detail happens to be a list instead of a dict. + raise ValidationError(detail=serializers.get_validation_error_detail(exc)) + + def get_validation_exclusions(self, obj=None): + # Borrowed from DRF 2.x - return model fields that should be excluded + # from model validation. + cls = self.Meta.model + opts = cls._meta.concrete_model._meta exclusions = [field.name for field in opts.fields + opts.many_to_many] for field_name, field in self.fields.items(): field_name = field.source or field_name @@ -377,52 +439,61 @@ class BaseSerializer(serializers.ModelSerializer): exclusions.remove(field_name) return exclusions - def to_native(self, obj): - # When rendering the raw data form, create an instance of the model so - # that the model defaults will be filled in. - view = self.context.get('view', None) - parent_key = getattr(view, 'parent_key', None) - if not obj and hasattr(view, '_raw_data_form_marker'): - obj = self.opts.model() - # FIXME: Would be nice to include any posted data for the raw data - # form, so that a submission with errors can be modified in place - # and resubmitted. - ret = super(BaseSerializer, self).to_native(obj) - # Remove parent key from raw form data, since it will be automatically - # set by the sub list create view. - if parent_key and hasattr(view, '_raw_data_form_marker'): - ret.pop(parent_key, None) - return ret - - def metadata(self): - fields = super(BaseSerializer, self).metadata() - for field, meta in fields.items(): - if not isinstance(meta, dict): - continue - if field == 'type': - meta['choices'] = self.get_type_choices() - #if meta.get('type', '') == 'field': - # meta['type'] = 'id' - return fields + def validate(self, attrs): + attrs = super(BaseSerializer, self).validate(attrs) + try: + # Create/update a model instance and run it's full_clean() method to + # do any validation implemented on the model class. + exclusions = self.get_validation_exclusions(self.instance) + obj = self.instance or self.Meta.model() + for k,v in attrs.items(): + if k not in exclusions: + setattr(obj, k, v) + obj.full_clean(exclude=exclusions) + # full_clean may modify values on the instance; copy those changes + # back to attrs so they are saved. + for k in attrs.keys(): + if k not in exclusions: + attrs[k] = getattr(obj, k) + except DjangoValidationError as exc: + # DjangoValidationError may contain a list or dict; normalize into a + # dict where the keys are the field name and the values are a list + # of error messages, then raise as a DRF ValidationError. DRF would + # normally convert any DjangoValidationError to a non-field specific + # error message; here we preserve field-specific errors raised from + # the model's full_clean method. + d = exc.update_error_dict({}) + for k,v in d.items(): + v = v if isinstance(v, list) else [v] + v2 = [] + for e in v: + if isinstance(e, DjangoValidationError): + v2.extend(list(e)) + elif isinstance(e, list): + v2.extend(e) + else: + v2.append(e) + d[k] = map(force_text, v2) + raise ValidationError(d) + return attrs -class BaseFactSerializerOptions(MongoEngineModelSerializerOptions): - def __init__(self, meta): - super(BaseFactSerializerOptions, self).__init__(meta) +class EmptySerializer(serializers.Serializer): + pass +class BaseFactSerializer(BaseSerializer): -class BaseFactSerializer(MongoEngineModelSerializer): - _options_class = BaseFactSerializerOptions __metaclass__ = BaseSerializerMetaclass def get_fields(self): ret = super(BaseFactSerializer, self).get_fields() - if 'module' in ret and feature_enabled('system_tracking'): - choices = [(o, o.title()) for o in FactVersion.objects.all().only('module').distinct('module')] - ret['module'] = ChoiceField(source='module', choices=choices, read_only=True, required=False) + if 'module' in ret: + # TODO: the values_list may pull in a LOT of entries before the distinct is called + modules = Fact.objects.all().values_list('module', flat=True).distinct() + choices = [(o, o.title()) for o in modules] + ret['module'] = serializers.ChoiceField(choices=choices, read_only=True, required=False) return ret - class UnifiedJobTemplateSerializer(BaseSerializer): class Meta: @@ -432,11 +503,11 @@ class UnifiedJobTemplateSerializer(BaseSerializer): def get_related(self, obj): res = super(UnifiedJobTemplateSerializer, self).get_related(obj) - if obj.current_job and obj.current_job.active: + if obj.current_job: res['current_job'] = obj.current_job.get_absolute_url() - if obj.last_job and obj.last_job.active: + if obj.last_job: res['last_job'] = obj.last_job.get_absolute_url() - if obj.next_schedule and obj.next_schedule.active: + if obj.next_schedule: res['next_schedule'] = obj.next_schedule.get_absolute_url() return res @@ -446,7 +517,7 @@ class UnifiedJobTemplateSerializer(BaseSerializer): else: return super(UnifiedJobTemplateSerializer, self).get_types() - def to_native(self, obj): + def to_representation(self, obj): serializer_class = None if type(self) is UnifiedJobTemplateSerializer: if isinstance(obj, Project): @@ -457,16 +528,14 @@ class UnifiedJobTemplateSerializer(BaseSerializer): serializer_class = JobTemplateSerializer if serializer_class: serializer = serializer_class(instance=obj) - return serializer.to_native(obj) + return serializer.to_representation(obj) else: - return super(UnifiedJobTemplateSerializer, self).to_native(obj) + return super(UnifiedJobTemplateSerializer, self).to_representation(obj) class UnifiedJobSerializer(BaseSerializer): - result_stdout = serializers.SerializerMethodField('get_result_stdout') - unified_job_template = serializers.Field(source='unified_job_template_id', label='unified job template') - job_env = serializers.CharField(source='job_env', label='job env', read_only=True) + result_stdout = serializers.SerializerMethodField() class Meta: model = UnifiedJob @@ -474,6 +543,16 @@ class UnifiedJobSerializer(BaseSerializer): 'failed', 'started', 'finished', 'elapsed', 'job_args', 'job_cwd', 'job_env', 'job_explanation', 'result_stdout', 'result_traceback') + extra_kwargs = { + 'unified_job_template': { + 'source': 'unified_job_template_id', + 'label': 'unified job template', + }, + 'job_env': { + 'read_only': True, + 'label': 'job_env', + } + } def get_types(self): if type(self) is UnifiedJobSerializer: @@ -483,9 +562,9 @@ class UnifiedJobSerializer(BaseSerializer): def get_related(self, obj): res = super(UnifiedJobSerializer, self).get_related(obj) - if obj.unified_job_template and obj.unified_job_template.active: + if obj.unified_job_template: res['unified_job_template'] = obj.unified_job_template.get_absolute_url() - if obj.schedule and obj.schedule.active: + if obj.schedule: res['schedule'] = obj.schedule.get_absolute_url() if isinstance(obj, ProjectUpdate): res['stdout'] = reverse('api:project_update_stdout', args=(obj.pk,)) @@ -497,7 +576,7 @@ class UnifiedJobSerializer(BaseSerializer): res['stdout'] = reverse('api:ad_hoc_command_stdout', args=(obj.pk,)) return res - def to_native(self, obj): + def to_representation(self, obj): serializer_class = None if type(self) is UnifiedJobSerializer: if isinstance(obj, ProjectUpdate): @@ -512,24 +591,31 @@ class UnifiedJobSerializer(BaseSerializer): serializer_class = SystemJobSerializer if serializer_class: serializer = serializer_class(instance=obj) - ret = serializer.to_native(obj) + ret = serializer.to_representation(obj) else: - ret = super(UnifiedJobSerializer, self).to_native(obj) + ret = super(UnifiedJobSerializer, self).to_representation(obj) if 'elapsed' in ret: ret['elapsed'] = float(ret['elapsed']) return ret def get_result_stdout(self, obj): obj_size = obj.result_stdout_size - if obj_size > settings.STDOUT_MAX_BYTES_DISPLAY: - return "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY) + if obj_size > tower_settings.STDOUT_MAX_BYTES_DISPLAY: + return "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, + tower_settings.STDOUT_MAX_BYTES_DISPLAY) return obj.result_stdout + class UnifiedJobListSerializer(UnifiedJobSerializer): class Meta: - exclude = ('*', 'job_args', 'job_cwd', 'job_env', 'result_traceback', - 'result_stdout') + fields = ('*', '-job_args', '-job_cwd', '-job_env', '-result_traceback', '-result_stdout') + + def get_field_names(self, declared_fields, info): + field_names = super(UnifiedJobListSerializer, self).get_field_names(declared_fields, info) + # Meta multiple inheritance and -field_name options don't seem to be + # taking effect above, so remove the undesired fields here. + return tuple(x for x in field_names if x not in ('job_args', 'job_cwd', 'job_env', 'result_traceback', 'result_stdout')) def get_types(self): if type(self) is UnifiedJobListSerializer: @@ -537,7 +623,7 @@ class UnifiedJobListSerializer(UnifiedJobSerializer): else: return super(UnifiedJobListSerializer, self).get_types() - def to_native(self, obj): + def to_representation(self, obj): serializer_class = None if type(self) is UnifiedJobListSerializer: if isinstance(obj, ProjectUpdate): @@ -552,9 +638,9 @@ class UnifiedJobListSerializer(UnifiedJobSerializer): serializer_class = SystemJobListSerializer if serializer_class: serializer = serializer_class(instance=obj) - ret = serializer.to_native(obj) + ret = serializer.to_representation(obj) else: - ret = super(UnifiedJobListSerializer, self).to_native(obj) + ret = super(UnifiedJobListSerializer, self).to_representation(obj) if 'elapsed' in ret: ret['elapsed'] = float(ret['elapsed']) return ret @@ -562,15 +648,16 @@ class UnifiedJobListSerializer(UnifiedJobSerializer): class UnifiedJobStdoutSerializer(UnifiedJobSerializer): - result_stdout = serializers.SerializerMethodField('get_result_stdout') + result_stdout = serializers.SerializerMethodField() class Meta: fields = ('result_stdout',) def get_result_stdout(self, obj): obj_size = obj.result_stdout_size - if obj_size > settings.STDOUT_MAX_BYTES_DISPLAY: - return "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY) + if obj_size > tower_settings.STDOUT_MAX_BYTES_DISPLAY: + return "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, + tower_settings.STDOUT_MAX_BYTES_DISPLAY) return obj.result_stdout def get_types(self): @@ -579,49 +666,39 @@ class UnifiedJobStdoutSerializer(UnifiedJobSerializer): else: return super(UnifiedJobStdoutSerializer, self).get_types() - # TODO: Needed? - #def to_native(self, obj): - # ret = super(UnifiedJobStdoutSerializer, self).to_native(obj) - # return ret.get('result_stdout', '') - class UserSerializer(BaseSerializer): password = serializers.CharField(required=False, default='', write_only=True, help_text='Write-only field used to change the password.') ldap_dn = serializers.CharField(source='profile.ldap_dn', read_only=True) + external_account = serializers.SerializerMethodField(help_text='Set if the account is managed by an external service') + is_system_auditor = serializers.BooleanField(default=False) class Meta: model = User fields = ('*', '-name', '-description', '-modified', '-summary_fields', 'username', 'first_name', 'last_name', - 'email', 'is_superuser', 'password', 'ldap_dn') + 'email', 'is_superuser', 'is_system_auditor', 'password', 'ldap_dn', 'external_account') - def to_native(self, obj): - ret = super(UserSerializer, self).to_native(obj) + def to_representation(self, obj): + ret = super(UserSerializer, self).to_representation(obj) ret.pop('password', None) - ret.fields.pop('password', None) if obj: ret['auth'] = obj.social_auth.values('provider', 'uid') return ret - def get_validation_exclusions(self): - ret = super(UserSerializer, self).get_validation_exclusions() + def get_validation_exclusions(self, obj=None): + ret = super(UserSerializer, self).get_validation_exclusions(obj) ret.append('password') return ret - def restore_object(self, attrs, instance=None): - new_password = attrs.pop('password', None) - # first time creating, password required - if instance is None and new_password in (None, ''): - self._errors = {'password': ['Password required for new User']} - return - instance = super(UserSerializer, self).restore_object(attrs, instance) - instance._new_password = new_password - return instance + def validate_password(self, value): + if not self.instance and value in (None, ''): + raise serializers.ValidationError('Password required for new User.') + return value - def save_object(self, obj, **kwargs): - new_password = getattr(obj, '_new_password', None) + def _update_password(self, obj, new_password): # For now we're not raising an error, just not saving password for # users managed by LDAP who already have an unusable password set. if getattr(settings, 'AUTH_LDAP_SERVER_URI', None) and feature_enabled('ldap'): @@ -636,11 +713,44 @@ class UserSerializer(BaseSerializer): getattr(settings, 'SOCIAL_AUTH_GITHUB_TEAM_KEY', None) or getattr(settings, 'SOCIAL_AUTH_SAML_ENABLED_IDPS', None)) and obj.social_auth.all(): new_password = None + if obj.pk and getattr(settings, 'RADIUS_SERVER', '') and not obj.has_usable_password(): + new_password = None if new_password: obj.set_password(new_password) - if not obj.password: + obj.save(update_fields=['password']) + elif not obj.password: obj.set_unusable_password() - return super(UserSerializer, self).save_object(obj, **kwargs) + obj.save(update_fields=['password']) + + def get_external_account(self, obj): + account_type = None + if getattr(settings, 'AUTH_LDAP_SERVER_URI', None) and feature_enabled('ldap'): + try: + if obj.pk and obj.profile.ldap_dn and not obj.has_usable_password(): + account_type = "ldap" + except AttributeError: + pass + if (getattr(settings, 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', None) or + getattr(settings, 'SOCIAL_AUTH_GITHUB_KEY', None) or + getattr(settings, 'SOCIAL_AUTH_GITHUB_ORG_KEY', None) or + getattr(settings, 'SOCIAL_AUTH_GITHUB_TEAM_KEY', None) or + getattr(settings, 'SOCIAL_AUTH_SAML_ENABLED_IDPS', None)) and obj.social_auth.all(): + account_type = "social" + if obj.pk and getattr(settings, 'RADIUS_SERVER', '') and not obj.has_usable_password(): + account_type = "radius" + return account_type + + def create(self, validated_data): + new_password = validated_data.pop('password', None) + obj = super(UserSerializer, self).create(validated_data) + self._update_password(obj, new_password) + return obj + + def update(self, obj, validated_data): + new_password = validated_data.pop('password', None) + obj = super(UserSerializer, self).update(obj, validated_data) + self._update_password(obj, new_password) + return obj def get_related(self, obj): res = super(UserSerializer, self).get_related(obj) @@ -650,41 +760,42 @@ class UserSerializer(BaseSerializer): admin_of_organizations = reverse('api:user_admin_of_organizations_list', args=(obj.pk,)), projects = reverse('api:user_projects_list', args=(obj.pk,)), credentials = reverse('api:user_credentials_list', args=(obj.pk,)), - permissions = reverse('api:user_permissions_list', args=(obj.pk,)), + roles = reverse('api:user_roles_list', args=(obj.pk,)), activity_stream = reverse('api:user_activity_stream_list', args=(obj.pk,)), + access_list = reverse('api:user_access_list', args=(obj.pk,)), )) return res - def _validate_ldap_managed_field(self, attrs, source): + def _validate_ldap_managed_field(self, value, field_name): if not getattr(settings, 'AUTH_LDAP_SERVER_URI', None) or not feature_enabled('ldap'): - return attrs + return value try: - is_ldap_user = bool(self.object.profile.ldap_dn) + is_ldap_user = bool(self.instance and self.instance.profile.ldap_dn) except AttributeError: is_ldap_user = False if is_ldap_user: ldap_managed_fields = ['username'] ldap_managed_fields.extend(getattr(settings, 'AUTH_LDAP_USER_ATTR_MAP', {}).keys()) ldap_managed_fields.extend(getattr(settings, 'AUTH_LDAP_USER_FLAGS_BY_GROUP', {}).keys()) - if source in ldap_managed_fields and source in attrs: - if attrs[source] != getattr(self.object, source): - raise serializers.ValidationError('Unable to change %s on user managed by LDAP' % source) - return attrs + if field_name in ldap_managed_fields: + if value != getattr(self.instance, field_name): + raise serializers.ValidationError('Unable to change %s on user managed by LDAP.' % field_name) + return value - def validate_username(self, attrs, source): - return self._validate_ldap_managed_field(attrs, source) + def validate_username(self, value): + return self._validate_ldap_managed_field(value, 'username') - def validate_first_name(self, attrs, source): - return self._validate_ldap_managed_field(attrs, source) + def validate_first_name(self, value): + return self._validate_ldap_managed_field(value, 'first_name') - def validate_last_name(self, attrs, source): - return self._validate_ldap_managed_field(attrs, source) + def validate_last_name(self, value): + return self._validate_ldap_managed_field(value, 'last_name') - def validate_email(self, attrs, source): - return self._validate_ldap_managed_field(attrs, source) + def validate_email(self, value): + return self._validate_ldap_managed_field(value, 'email') - def validate_is_superuser(self, attrs, source): - return self._validate_ldap_managed_field(attrs, source) + def validate_is_superuser(self, value): + return self._validate_ldap_managed_field(value, 'is_superuser') class OrganizationSerializer(BaseSerializer): @@ -701,10 +812,29 @@ class OrganizationSerializer(BaseSerializer): users = reverse('api:organization_users_list', args=(obj.pk,)), admins = reverse('api:organization_admins_list', args=(obj.pk,)), teams = reverse('api:organization_teams_list', args=(obj.pk,)), - activity_stream = reverse('api:organization_activity_stream_list', args=(obj.pk,)) + credentials = reverse('api:organization_credential_list', args=(obj.pk,)), + activity_stream = reverse('api:organization_activity_stream_list', args=(obj.pk,)), + notification_templates = reverse('api:organization_notification_templates_list', args=(obj.pk,)), + notification_templates_any = reverse('api:organization_notification_templates_any_list', args=(obj.pk,)), + notification_templates_success = reverse('api:organization_notification_templates_success_list', args=(obj.pk,)), + notification_templates_error = reverse('api:organization_notification_templates_error_list', args=(obj.pk,)), + object_roles = reverse('api:organization_object_roles_list', args=(obj.pk,)), + access_list = reverse('api:organization_access_list', args=(obj.pk,)), )) return res + def get_summary_fields(self, obj): + summary_dict = super(OrganizationSerializer, self).get_summary_fields(obj) + counts_dict = self.context.get('related_field_counts', None) + if counts_dict is not None and summary_dict is not None: + if obj.id not in counts_dict: + summary_dict['related_field_counts'] = { + 'inventories': 0, 'teams': 0, 'users': 0, + 'job_templates': 0, 'admins': 0, 'projects': 0} + else: + summary_dict['related_field_counts'] = counts_dict[obj.id] + return summary_dict + class ProjectOptionsSerializer(BaseSerializer): @@ -714,59 +844,71 @@ class ProjectOptionsSerializer(BaseSerializer): def get_related(self, obj): res = super(ProjectOptionsSerializer, self).get_related(obj) - if obj.credential and obj.credential.active: + if obj.credential: res['credential'] = reverse('api:credential_detail', args=(obj.credential.pk,)) return res - def validate_local_path(self, attrs, source): + def validate(self, attrs): + errors = {} + # Don't allow assigning a local_path used by another project. # Don't allow assigning a local_path when scm_type is set. valid_local_paths = Project.get_local_path_choices() - if self.object: - scm_type = attrs.get('scm_type', self.object.scm_type) or u'' + if self.instance: + scm_type = attrs.get('scm_type', self.instance.scm_type) or u'' else: scm_type = attrs.get('scm_type', u'') or u'' - if self.object and not scm_type: - valid_local_paths.append(self.object.local_path) + if self.instance and not scm_type: + valid_local_paths.append(self.instance.local_path) if scm_type: - attrs.pop(source, None) - if source in attrs and attrs[source] not in valid_local_paths: - raise serializers.ValidationError('Invalid path choice') - return attrs + attrs.pop('local_path', None) + if 'local_path' in attrs and attrs['local_path'] not in valid_local_paths: + errors['local_path'] = 'Invalid path choice.' - def to_native(self, obj): - ret = super(ProjectOptionsSerializer, self).to_native(obj) - if obj is not None and 'credential' in ret and (not obj.credential or not obj.credential.active): + if errors: + raise serializers.ValidationError(errors) + + return super(ProjectOptionsSerializer, self).validate(attrs) + + def to_representation(self, obj): + ret = super(ProjectOptionsSerializer, self).to_representation(obj) + if obj is not None and 'credential' in ret and not obj.credential: ret['credential'] = None return ret class ProjectSerializer(UnifiedJobTemplateSerializer, ProjectOptionsSerializer): - playbooks = serializers.Field(source='playbooks', help_text='Array of playbooks available within this project.') - scm_delete_on_next_update = serializers.BooleanField(source='scm_delete_on_next_update', read_only=True) - status = ChoiceField(source='status', choices=Project.PROJECT_STATUS_CHOICES, read_only=True, required=False) - last_update_failed = serializers.BooleanField(source='last_update_failed', read_only=True) - last_updated = serializers.DateTimeField(source='last_updated', read_only=True) + status = serializers.ChoiceField(choices=Project.PROJECT_STATUS_CHOICES, read_only=True) + last_update_failed = serializers.BooleanField(read_only=True) + last_updated = serializers.DateTimeField(read_only=True) class Meta: model = Project - fields = ('*', 'scm_delete_on_next_update', 'scm_update_on_launch', + fields = ('*', 'organization', 'scm_delete_on_next_update', 'scm_update_on_launch', 'scm_update_cache_timeout') + \ ('last_update_failed', 'last_updated') # Backwards compatibility + read_only_fields = ('scm_delete_on_next_update',) def get_related(self, obj): res = super(ProjectSerializer, self).get_related(obj) res.update(dict( - organizations = reverse('api:project_organizations_list', args=(obj.pk,)), teams = reverse('api:project_teams_list', args=(obj.pk,)), playbooks = reverse('api:project_playbooks', args=(obj.pk,)), update = reverse('api:project_update_view', args=(obj.pk,)), project_updates = reverse('api:project_updates_list', args=(obj.pk,)), schedules = reverse('api:project_schedules_list', args=(obj.pk,)), activity_stream = reverse('api:project_activity_stream_list', args=(obj.pk,)), + notification_templates_any = reverse('api:project_notification_templates_any_list', args=(obj.pk,)), + notification_templates_success = reverse('api:project_notification_templates_success_list', args=(obj.pk,)), + notification_templates_error = reverse('api:project_notification_templates_error_list', args=(obj.pk,)), + access_list = reverse('api:project_access_list', args=(obj.pk,)), + object_roles = reverse('api:project_object_roles_list', args=(obj.pk,)), )) + if obj.organization: + res['organization'] = reverse('api:organization_detail', + args=(obj.organization.pk,)) # Backwards compatibility. if obj.current_update: res['current_update'] = reverse('api:project_update_detail', @@ -776,21 +918,38 @@ class ProjectSerializer(UnifiedJobTemplateSerializer, ProjectOptionsSerializer): args=(obj.last_update.pk,)) return res + def validate(self, attrs): + organization = None + if 'organization' in attrs: + organization = attrs['organization'] + elif self.instance: + organization = self.instance.organization + + view = self.context.get('view', None) + if not organization and not view.request.user.is_superuser: + # Only allow super users to create orgless projects + raise serializers.ValidationError('Organization is missing') + return super(ProjectSerializer, self).validate(attrs) + class ProjectPlaybooksSerializer(ProjectSerializer): + playbooks = serializers.ReadOnlyField(help_text='Array of playbooks available within this project.') + class Meta: model = Project fields = ('playbooks',) - def to_native(self, obj): - ret = super(ProjectPlaybooksSerializer, self).to_native(obj) - return ret.get('playbooks', []) + @property + def data(self): + ret = super(ProjectPlaybooksSerializer, self).data + ret = ret.get('playbooks', []) + return ReturnList(ret, serializer=self) class ProjectUpdateViewSerializer(ProjectSerializer): - can_update = serializers.BooleanField(source='can_update', read_only=True) + can_update = serializers.BooleanField(read_only=True) class Meta: fields = ('can_update',) @@ -807,6 +966,7 @@ class ProjectUpdateSerializer(UnifiedJobSerializer, ProjectOptionsSerializer): res.update(dict( project = reverse('api:project_detail', args=(obj.project.pk,)), cancel = reverse('api:project_update_cancel', args=(obj.pk,)), + notifications = reverse('api:project_update_notifications_list', args=(obj.pk,)), )) return res @@ -818,7 +978,7 @@ class ProjectUpdateListSerializer(ProjectUpdateSerializer, UnifiedJobListSeriali class ProjectUpdateCancelSerializer(ProjectUpdateSerializer): - can_cancel = serializers.BooleanField(source='can_cancel', read_only=True) + can_cancel = serializers.BooleanField(read_only=True) class Meta: fields = ('can_cancel',) @@ -826,15 +986,15 @@ class ProjectUpdateCancelSerializer(ProjectUpdateSerializer): class BaseSerializerWithVariables(BaseSerializer): - def validate_variables(self, attrs, source): + def validate_variables(self, value): try: - json.loads(attrs.get(source, '').strip() or '{}') + json.loads(value.strip() or '{}') except ValueError: try: - yaml.safe_load(attrs[source]) + yaml.safe_load(value) except yaml.YAMLError: - raise serializers.ValidationError('Must be valid JSON or YAML') - return attrs + raise serializers.ValidationError('Must be valid JSON or YAML.') + return value class InventorySerializer(BaseSerializerWithVariables): @@ -857,17 +1017,20 @@ class InventorySerializer(BaseSerializerWithVariables): tree = reverse('api:inventory_tree_view', args=(obj.pk,)), inventory_sources = reverse('api:inventory_inventory_sources_list', args=(obj.pk,)), activity_stream = reverse('api:inventory_activity_stream_list', args=(obj.pk,)), + job_templates = reverse('api:inventory_job_template_list', args=(obj.pk,)), scan_job_templates = reverse('api:inventory_scan_job_template_list', args=(obj.pk,)), ad_hoc_commands = reverse('api:inventory_ad_hoc_commands_list', args=(obj.pk,)), + access_list = reverse('api:inventory_access_list', args=(obj.pk,)), + object_roles = reverse('api:inventory_object_roles_list', args=(obj.pk,)), #single_fact = reverse('api:inventory_single_fact_view', args=(obj.pk,)), )) - if obj.organization and obj.organization.active: + if obj.organization: res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) return res - def to_native(self, obj): - ret = super(InventorySerializer, self).to_native(obj) - if obj is not None and 'organization' in ret and (not obj.organization or not obj.organization.active): + def to_representation(self, obj): + ret = super(InventorySerializer, self).to_representation(obj) + if obj is not None and 'organization' in ret and not obj.organization: ret['organization'] = None return ret @@ -877,7 +1040,7 @@ class InventoryDetailSerializer(InventorySerializer): class Meta: fields = ('*', 'can_run_ad_hoc_commands') - can_run_ad_hoc_commands = serializers.SerializerMethodField('get_can_run_ad_hoc_commands') + can_run_ad_hoc_commands = serializers.SerializerMethodField() def get_can_run_ad_hoc_commands(self, obj): view = self.context.get('view', None) @@ -887,8 +1050,7 @@ class InventoryDetailSerializer(InventorySerializer): class InventoryScriptSerializer(InventorySerializer): class Meta: - fields = ('id',) - exclude = ('id',) + fields = () class HostSerializer(BaseSerializerWithVariables): @@ -898,7 +1060,15 @@ class HostSerializer(BaseSerializerWithVariables): fields = ('*', 'inventory', 'enabled', 'instance_id', 'variables', 'has_active_failures', 'has_inventory_sources', 'last_job', 'last_job_host_summary') - readonly_fields = ('last_job', 'last_job_host_summary') + read_only_fields = ('last_job', 'last_job_host_summary') + + def build_relational_field(self, field_name, relation_info): + field_class, field_kwargs = super(HostSerializer, self).build_relational_field(field_name, relation_info) + # Inventory is read-only unless creating a new host. + if self.instance and field_name == 'inventory': + field_kwargs['read_only'] = True + field_kwargs.pop('queryset', None) + return field_class, field_kwargs def get_related(self, obj): res = super(HostSerializer, self).get_related(obj) @@ -915,11 +1085,11 @@ class HostSerializer(BaseSerializerWithVariables): fact_versions = reverse('api:host_fact_versions_list', args=(obj.pk,)), #single_fact = reverse('api:host_single_fact_view', args=(obj.pk,)), )) - if obj.inventory and obj.inventory.active: + if obj.inventory: res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) - if obj.last_job and obj.last_job.active: + if obj.last_job: res['last_job'] = reverse('api:job_detail', args=(obj.last_job.pk,)) - if obj.last_job_host_summary and obj.last_job_host_summary.job.active: + if obj.last_job_host_summary: res['last_job_host_summary'] = reverse('api:job_host_summary_detail', args=(obj.last_job_host_summary.pk,)) return res @@ -935,7 +1105,7 @@ class HostSerializer(BaseSerializerWithVariables): 'name': j.job.job_template.name if j.job.job_template is not None else "", 'status': j.job.status, 'finished': j.job.finished, - } for j in obj.job_host_summaries.filter(job__active=True).select_related('job__job_template').order_by('-created')[:5]]}) + } for j in obj.job_host_summaries.select_related('job__job_template').order_by('-created')[:5]]}) return d def _get_host_port_from_name(self, name): @@ -948,25 +1118,22 @@ class HostSerializer(BaseSerializerWithVariables): if port < 1 or port > 65535: raise ValueError except ValueError: - raise serializers.ValidationError(u'Invalid port specification: %s' % unicode(port)) + raise serializers.ValidationError(u'Invalid port specification: %s' % force_text(port)) return name, port - def validate_name(self, attrs, source): - name = unicode(attrs.get(source, '')) + def validate_name(self, value): + name = force_text(value or '') # Validate here only, update in main validate method. host, port = self._get_host_port_from_name(name) - return attrs + return value def validate(self, attrs): - name = unicode(attrs.get('name', '')) + name = force_text(attrs.get('name', self.instance and self.instance.name or '')) host, port = self._get_host_port_from_name(name) if port: attrs['name'] = host - if self.object: - variables = unicode(attrs.get('variables', self.object.variables) or '') - else: - variables = unicode(attrs.get('variables', '')) + variables = force_text(attrs.get('variables', self.instance and self.instance.variables or '')) try: vars_dict = json.loads(variables.strip() or '{}') vars_dict['ansible_ssh_port'] = port @@ -979,19 +1146,19 @@ class HostSerializer(BaseSerializerWithVariables): vars_dict['ansible_ssh_port'] = port attrs['variables'] = yaml.dump(vars_dict) except (yaml.YAMLError, TypeError): - raise serializers.ValidationError('Must be valid JSON or YAML') + raise serializers.ValidationError('Must be valid JSON or YAML.') - return attrs + return super(HostSerializer, self).validate(attrs) - def to_native(self, obj): - ret = super(HostSerializer, self).to_native(obj) + def to_representation(self, obj): + ret = super(HostSerializer, self).to_representation(obj) if not obj: return ret - if 'inventory' in ret and (not obj.inventory or not obj.inventory.active): + if 'inventory' in ret and not obj.inventory: ret['inventory'] = None - if 'last_job' in ret and (not obj.last_job or not obj.last_job.active): + if 'last_job' in ret and not obj.last_job: ret['last_job'] = None - if 'last_job_host_summary' in ret and (not obj.last_job_host_summary or not obj.last_job_host_summary.job.active): + if 'last_job_host_summary' in ret and not obj.last_job_host_summary: ret['last_job_host_summary'] = None return ret @@ -1004,6 +1171,14 @@ class GroupSerializer(BaseSerializerWithVariables): 'total_hosts', 'hosts_with_active_failures', 'total_groups', 'groups_with_active_failures', 'has_inventory_sources') + def build_relational_field(self, field_name, relation_info): + field_class, field_kwargs = super(GroupSerializer, self).build_relational_field(field_name, relation_info) + # Inventory is read-only unless creating a new group. + if self.instance and field_name == 'inventory': + field_kwargs['read_only'] = True + field_kwargs.pop('queryset', None) + return field_class, field_kwargs + def get_related(self, obj): res = super(GroupSerializer, self).get_related(obj) res.update(dict( @@ -1019,28 +1194,27 @@ class GroupSerializer(BaseSerializerWithVariables): ad_hoc_commands = reverse('api:group_ad_hoc_commands_list', args=(obj.pk,)), #single_fact = reverse('api:group_single_fact_view', args=(obj.pk,)), )) - if obj.inventory and obj.inventory.active: + if obj.inventory: res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) if obj.inventory_source: res['inventory_source'] = reverse('api:inventory_source_detail', args=(obj.inventory_source.pk,)) return res - def validate_name(self, attrs, source): - name = attrs.get(source, '') - if name in ('all', '_meta'): - raise serializers.ValidationError('Invalid group name') - return attrs + def validate_name(self, value): + if value in ('all', '_meta'): + raise serializers.ValidationError('Invalid group name.') + return value - def to_native(self, obj): - ret = super(GroupSerializer, self).to_native(obj) - if obj is not None and 'inventory' in ret and (not obj.inventory or not obj.inventory.active): + def to_representation(self, obj): + ret = super(GroupSerializer, self).to_representation(obj) + if obj is not None and 'inventory' in ret and not obj.inventory: ret['inventory'] = None return ret class GroupTreeSerializer(GroupSerializer): - children = serializers.SerializerMethodField('get_children') + children = serializers.SerializerMethodField() class Meta: model = Group @@ -1049,7 +1223,7 @@ class GroupTreeSerializer(GroupSerializer): def get_children(self, obj): if obj is None: return {} - children_qs = obj.children.filter(active=True) + children_qs = obj.children children_qs = children_qs.select_related('inventory') children_qs = children_qs.prefetch_related('inventory_source') return GroupTreeSerializer(children_qs, many=True).data @@ -1060,18 +1234,18 @@ class BaseVariableDataSerializer(BaseSerializer): class Meta: fields = ('variables',) - def to_native(self, obj): + def to_representation(self, obj): if obj is None: return {} - ret = super(BaseVariableDataSerializer, self).to_native(obj) + ret = super(BaseVariableDataSerializer, self).to_representation(obj) try: return json.loads(ret.get('variables', '') or '{}') except ValueError: return yaml.safe_load(ret.get('variables', '')) - def from_native(self, data, files): + def to_internal_value(self, data): data = {'variables': json.dumps(data)} - return super(BaseVariableDataSerializer, self).from_native(data, files) + return super(BaseVariableDataSerializer, self).to_internal_value(data) class InventoryVariableDataSerializer(BaseVariableDataSerializer): @@ -1093,29 +1267,35 @@ class GroupVariableDataSerializer(BaseVariableDataSerializer): class CustomInventoryScriptSerializer(BaseSerializer): + script = serializers.CharField(trim_whitespace=False) + class Meta: model = CustomInventoryScript fields = ('*', "script", "organization") - def validate_script(self, attrs, source): - script_contents = attrs.get(source, '') - if not script_contents.startswith("#!"): + def validate_script(self, value): + if not value.startswith("#!"): raise serializers.ValidationError('Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python') - return attrs + return value - def to_native(self, obj): - ret = super(CustomInventoryScriptSerializer, self).to_native(obj) + def to_representation(self, obj): + ret = super(CustomInventoryScriptSerializer, self).to_representation(obj) if obj is None: return ret request = self.context.get('request', None) - if request is not None and request.user is not None and not request.user.is_superuser: + if request.user not in obj.admin_role and \ + not request.user.is_superuser and \ + not request.user.is_system_auditor: ret['script'] = None return ret def get_related(self, obj): res = super(CustomInventoryScriptSerializer, self).get_related(obj) + res.update(dict( + object_roles = reverse('api:inventory_script_object_roles_list', args=(obj.pk,)), + )) - if obj.organization and obj.organization.active: + if obj.organization: res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) return res @@ -1128,77 +1308,63 @@ class InventorySourceOptionsSerializer(BaseSerializer): def get_related(self, obj): res = super(InventorySourceOptionsSerializer, self).get_related(obj) - if obj.credential and obj.credential.active: + if obj.credential: res['credential'] = reverse('api:credential_detail', args=(obj.credential.pk,)) - if obj.source_script and obj.source_script.active: + if obj.source_script: res['source_script'] = reverse('api:inventory_script_detail', args=(obj.source_script.pk,)) return res - def validate_source(self, attrs, source): - # TODO: Validate - # src = attrs.get(source, '') - # obj = self.object - return attrs - - def validate_source_script(self, attrs, source): - src = attrs.get(source, None) - if 'source' in attrs and attrs.get('source', '') == 'custom': - if src is None or src == '': - raise serializers.ValidationError("source_script must be provided") - try: - if src.organization != self.object.inventory.organization: - raise serializers.ValidationError("source_script does not belong to the same organization as the inventory") - except Exception: - # TODO: Log - raise serializers.ValidationError("source_script doesn't exist") - return attrs - - def validate_source_vars(self, attrs, source): + def validate_source_vars(self, value): # source_env must be blank, a valid JSON or YAML dict, or ... - # FIXME: support key=value pairs. try: - json.loads(attrs.get(source, '').strip() or '{}') - return attrs + json.loads((value or '').strip() or '{}') + return value except ValueError: pass try: - yaml.safe_load(attrs[source]) - return attrs + yaml.safe_load(value) + return value except yaml.YAMLError: pass - raise serializers.ValidationError('Must be valid JSON or YAML') + raise serializers.ValidationError('Must be valid JSON or YAML.') - def validate_source_regions(self, attrs, source): - # FIXME - return attrs + def validate(self, attrs): + # TODO: Validate source, validate source_regions + errors = {} - def metadata(self): - metadata = super(InventorySourceOptionsSerializer, self).metadata() - field_opts = metadata.get('source_regions', {}) - for cp in ('azure', 'ec2', 'gce', 'rax'): - get_regions = getattr(self.opts.model, 'get_%s_region_choices' % cp) - field_opts['%s_region_choices' % cp] = get_regions() - field_opts = metadata.get('group_by', {}) - for cp in ('ec2',): - get_group_by_choices = getattr(self.opts.model, 'get_%s_group_by_choices' % cp) - field_opts['%s_group_by_choices' % cp] = get_group_by_choices() - return metadata + source = attrs.get('source', self.instance and self.instance.source or '') + source_script = attrs.get('source_script', self.instance and self.instance.source_script or '') + if source == 'custom': + if source_script is None or source_script == '': + errors['source_script'] = "If 'source' is 'custom', 'source_script' must be provided." + else: + try: + if source_script.organization != self.instance.inventory.organization: + errors['source_script'] = "The 'source_script' does not belong to the same organization as the inventory." + except Exception as exc: + errors['source_script'] = "'source_script' doesn't exist." + logger.error(str(exc)) - def to_native(self, obj): - ret = super(InventorySourceOptionsSerializer, self).to_native(obj) + if errors: + raise serializers.ValidationError(errors) + + return super(InventorySourceOptionsSerializer, self).validate(attrs) + + def to_representation(self, obj): + ret = super(InventorySourceOptionsSerializer, self).to_representation(obj) if obj is None: return ret - if 'credential' in ret and (not obj.credential or not obj.credential.active): + if 'credential' in ret and not obj.credential: ret['credential'] = None return ret class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOptionsSerializer): - status = ChoiceField(source='status', choices=InventorySource.INVENTORY_SOURCE_STATUS_CHOICES, read_only=True, required=False) - last_update_failed = serializers.BooleanField(source='last_update_failed', read_only=True) - last_updated = serializers.DateTimeField(source='last_updated', read_only=True) + status = serializers.ChoiceField(choices=InventorySource.INVENTORY_SOURCE_STATUS_CHOICES, read_only=True) + last_update_failed = serializers.BooleanField(read_only=True) + last_updated = serializers.DateTimeField(read_only=True) class Meta: model = InventorySource @@ -1216,10 +1382,13 @@ class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOpt activity_stream = reverse('api:inventory_activity_stream_list', args=(obj.pk,)), hosts = reverse('api:inventory_source_hosts_list', args=(obj.pk,)), groups = reverse('api:inventory_source_groups_list', args=(obj.pk,)), + notification_templates_any = reverse('api:inventory_source_notification_templates_any_list', args=(obj.pk,)), + notification_templates_success = reverse('api:inventory_source_notification_templates_success_list', args=(obj.pk,)), + notification_templates_error = reverse('api:inventory_source_notification_templates_error_list', args=(obj.pk,)), )) - if obj.inventory and obj.inventory.active: + if obj.inventory: res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) - if obj.group and obj.group.active: + if obj.group: res['group'] = reverse('api:group_detail', args=(obj.group.pk,)) # Backwards compatibility. if obj.current_update: @@ -1230,20 +1399,20 @@ class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOpt args=(obj.last_update.pk,)) return res - def to_native(self, obj): - ret = super(InventorySourceSerializer, self).to_native(obj) + def to_representation(self, obj): + ret = super(InventorySourceSerializer, self).to_representation(obj) if obj is None: return ret - if 'inventory' in ret and (not obj.inventory or not obj.inventory.active): + if 'inventory' in ret and not obj.inventory: ret['inventory'] = None - if 'group' in ret and (not obj.group or not obj.group.active): + if 'group' in ret and not obj.group: ret['group'] = None return ret class InventorySourceUpdateSerializer(InventorySourceSerializer): - can_update = serializers.BooleanField(source='can_update', read_only=True) + can_update = serializers.BooleanField(read_only=True) class Meta: fields = ('can_update',) @@ -1260,6 +1429,7 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri res.update(dict( inventory_source = reverse('api:inventory_source_detail', args=(obj.inventory_source.pk,)), cancel = reverse('api:inventory_update_cancel', args=(obj.pk,)), + notifications = reverse('api:inventory_update_notifications_list', args=(obj.pk,)), )) return res @@ -1271,7 +1441,7 @@ class InventoryUpdateListSerializer(InventoryUpdateSerializer, UnifiedJobListSer class InventoryUpdateCancelSerializer(InventoryUpdateSerializer): - can_cancel = serializers.BooleanField(source='can_cancel', read_only=True) + can_cancel = serializers.BooleanField(read_only=True) class Meta: fields = ('can_cancel',) @@ -1289,189 +1459,372 @@ class TeamSerializer(BaseSerializer): projects = reverse('api:team_projects_list', args=(obj.pk,)), users = reverse('api:team_users_list', args=(obj.pk,)), credentials = reverse('api:team_credentials_list', args=(obj.pk,)), - permissions = reverse('api:team_permissions_list', args=(obj.pk,)), + roles = reverse('api:team_roles_list', args=(obj.pk,)), + object_roles = reverse('api:team_object_roles_list', args=(obj.pk,)), activity_stream = reverse('api:team_activity_stream_list', args=(obj.pk,)), + access_list = reverse('api:team_access_list', args=(obj.pk,)), )) - if obj.organization and obj.organization.active: + if obj.organization: res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) return res - def to_native(self, obj): - ret = super(TeamSerializer, self).to_native(obj) - if obj is not None and 'organization' in ret and (not obj.organization or not obj.organization.active): + def to_representation(self, obj): + ret = super(TeamSerializer, self).to_representation(obj) + if obj is not None and 'organization' in ret and not obj.organization: ret['organization'] = None return ret -class PermissionSerializer(BaseSerializer): + +class RoleSerializer(BaseSerializer): class Meta: - model = Permission - fields = ('*', 'user', 'team', 'project', 'inventory', - 'permission_type', 'run_ad_hoc_commands') + model = Role + read_only_fields = ('id', 'role_field', 'description', 'name') + + def to_representation(self, obj): + ret = super(RoleSerializer, self).to_representation(obj) + + def spacify_type_name(cls): + return re.sub(r'([a-z])([A-Z])', '\g<1> \g<2>', cls.__name__) + + if obj.object_id: + content_object = obj.content_object + if hasattr(content_object, 'username'): + ret['summary_fields']['resource_name'] = obj.content_object.username + if hasattr(content_object, 'name'): + ret['summary_fields']['resource_name'] = obj.content_object.name + ret['summary_fields']['resource_type'] = obj.content_type.name + ret['summary_fields']['resource_type_display_name'] = spacify_type_name(obj.content_type.model_class()) + + ret.pop('created') + ret.pop('modified') + return ret def get_related(self, obj): - res = super(PermissionSerializer, self).get_related(obj) - if obj.user and obj.user.is_active: - res['user'] = reverse('api:user_detail', args=(obj.user.pk,)) - if obj.team and obj.team.active: - res['team'] = reverse('api:team_detail', args=(obj.team.pk,)) - if obj.project and obj.project.active: - res['project'] = reverse('api:project_detail', args=(obj.project.pk,)) - if obj.inventory and obj.inventory.active: - res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) - return res + ret = super(RoleSerializer, self).get_related(obj) + ret['users'] = reverse('api:role_users_list', args=(obj.pk,)) + ret['teams'] = reverse('api:role_teams_list', args=(obj.pk,)) + try: + if obj.content_object: + ret.update(reverse_gfk(obj.content_object)) + except AttributeError: + # AttributeError's happen if our content_object is pointing at + # a model that no longer exists. This is dirty data and ideally + # doesn't exist, but in case it does, let's not puke. + pass + return ret - def validate(self, attrs): - # Can only set either user or team. - if attrs.get('user', None) and attrs.get('team', None): - raise serializers.ValidationError('permission can only be assigned' - ' to a user OR a team, not both') - # Cannot assign admit/read/write permissions for a project. - if attrs.get('permission_type', None) in ('admin', 'read', 'write') and attrs.get('project', None): - raise serializers.ValidationError('project cannot be assigned for ' - 'inventory-only permissions') - # Project is required when setting deployment permissions. - if attrs.get('permission_type', None) in ('run', 'check') and not attrs.get('project', None): - raise serializers.ValidationError('project is required when ' - 'assigning deployment permissions') - return attrs - def to_native(self, obj): - ret = super(PermissionSerializer, self).to_native(obj) - if obj is None: + +class ResourceAccessListElementSerializer(UserSerializer): + + def to_representation(self, user): + ''' + With this method we derive "direct" and "indirect" access lists. Contained + in the direct access list are all the roles the user is a member of, and + all of the roles that are directly granted to any teams that the user is a + member of. + + The indirect access list is a list of all of the roles that the user is + a member of that are ancestors of any roles that grant permissions to + the resource. + ''' + ret = super(ResourceAccessListElementSerializer, self).to_representation(user) + object_id = self.context['view'].object_id + obj = self.context['view'].resource_model.objects.get(pk=object_id) + + if 'summary_fields' not in ret: + ret['summary_fields'] = {} + + def format_role_perm(role): + role_dict = { 'id': role.id, 'name': role.name, 'description': role.description} + try: + role_dict['resource_name'] = role.content_object.name + role_dict['resource_type'] = role.content_type.name + role_dict['related'] = reverse_gfk(role.content_object) + except: + pass + return { 'role': role_dict, 'descendant_roles': get_roles_on_resource(obj, role)} + + def format_team_role_perm(team_role, permissive_role_ids): + ret = [] + for role in team_role.children.filter(id__in=permissive_role_ids).all(): + role_dict = { + 'id': role.id, + 'name': role.name, + 'description': role.description, + 'team_id': team_role.object_id, + 'team_name': team_role.content_object.name + } + try: + role_dict['resource_name'] = role.content_object.name + role_dict['resource_type'] = role.content_type.name + role_dict['related'] = reverse_gfk(role.content_object) + except: + pass + ret.append({ 'role': role_dict, 'descendant_roles': get_roles_on_resource(obj, team_role)}) return ret - if 'user' in ret and (not obj.user or not obj.user.is_active): - ret['user'] = None - if 'team' in ret and (not obj.team or not obj.team.active): - ret['team'] = None - if 'project' in ret and (not obj.project or not obj.project.active): - ret['project'] = None - if 'inventory' in ret and (not obj.inventory or not obj.inventory.active): - ret['inventory'] = None + + team_content_type = ContentType.objects.get_for_model(Team) + content_type = ContentType.objects.get_for_model(obj) + + + content_type = ContentType.objects.get_for_model(obj) + direct_permissive_role_ids = Role.objects.filter(content_type=content_type, object_id=obj.id).values_list('id', flat=True) + all_permissive_role_ids = Role.objects.filter(content_type=content_type, object_id=obj.id).values_list('ancestors__id', flat=True) + + direct_access_roles = user.roles \ + .filter(id__in=direct_permissive_role_ids).all() + + direct_team_roles = Role.objects \ + .filter(content_type=team_content_type, + members=user, + children__in=direct_permissive_role_ids) + if content_type == team_content_type: + # When looking at the access list for a team, exclude the entries + # for that team. This exists primarily so we don't list the read role + # as a direct role when a user is a member or admin of a team + direct_team_roles = direct_team_roles.exclude( + children__content_type=team_content_type, + children__object_id=obj.id + ) + + + indirect_team_roles = Role.objects \ + .filter(content_type=team_content_type, + members=user, + children__in=all_permissive_role_ids) \ + .exclude(id__in=direct_team_roles) + + indirect_access_roles = user.roles \ + .filter(id__in=all_permissive_role_ids) \ + .exclude(id__in=direct_permissive_role_ids) \ + .exclude(id__in=direct_team_roles) \ + .exclude(id__in=indirect_team_roles) + + ret['summary_fields']['direct_access'] \ + = [format_role_perm(r) for r in direct_access_roles.distinct()] \ + + [y for x in (format_team_role_perm(r, direct_permissive_role_ids) for r in direct_team_roles.distinct()) for y in x] + + ret['summary_fields']['indirect_access'] \ + = [format_role_perm(r) for r in indirect_access_roles.distinct()] \ + + [y for x in (format_team_role_perm(r, all_permissive_role_ids) for r in indirect_team_roles.distinct()) for y in x] + return ret class CredentialSerializer(BaseSerializer): - # FIXME: may want to make some of these filtered based on user accessing - - password = serializers.CharField(required=False, default='') - security_token = serializers.CharField(required=False, default='') - ssh_key_data = serializers.CharField(required=False, default='') - ssh_key_unlock = serializers.CharField(required=False, default='') - become_password = serializers.CharField(required=False, default='') - vault_password = serializers.CharField(required=False, default='') - class Meta: model = Credential - fields = ('*', 'user', 'team', 'kind', 'cloud', 'host', 'username', - 'password', 'security_token', 'project', 'ssh_key_data', 'ssh_key_unlock', + fields = ('*', 'kind', 'cloud', 'host', 'username', + 'password', 'security_token', 'project', 'domain', + 'ssh_key_data', 'ssh_key_unlock', 'organization', 'become_method', 'become_username', 'become_password', - 'vault_password') + 'vault_password', 'subscription', 'tenant', 'secret', 'client', + 'authorize', 'authorize_password') - def to_native(self, obj): - ret = super(CredentialSerializer, self).to_native(obj) - if obj is not None and 'user' in ret and (not obj.user or not obj.user.is_active): - ret['user'] = None - if obj is not None and 'team' in ret and (not obj.team or not obj.team.active): - ret['team'] = None - # Replace the actual encrypted value with the string $encrypted$. - for field in Credential.PASSWORD_FIELDS: - if field in ret and unicode(ret[field]).startswith('$encrypted$'): - ret[field] = '$encrypted$' - return ret - - def restore_object(self, attrs, instance=None): - # If the value sent to the API startswith $encrypted$, ignore it. - for field in Credential.PASSWORD_FIELDS: - if unicode(attrs.get(field, '')).startswith('$encrypted$'): - attrs.pop(field, None) - - # If creating a credential from a view that automatically sets the - # parent_key (user or team), set the other value to None. - view = self.context.get('view', None) - parent_key = getattr(view, 'parent_key', None) - if parent_key == 'user': - attrs['team'] = None - if parent_key == 'team': - attrs['user'] = None - - instance = super(CredentialSerializer, self).restore_object(attrs, instance) - return instance + def build_standard_field(self, field_name, model_field): + field_class, field_kwargs = super(CredentialSerializer, self).build_standard_field(field_name, model_field) + if field_name in Credential.PASSWORD_FIELDS: + field_class = EncryptedPasswordField + field_kwargs['required'] = False + field_kwargs['default'] = '' + return field_class, field_kwargs def get_related(self, obj): res = super(CredentialSerializer, self).get_related(obj) + + if obj.organization: + res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) + res.update(dict( - activity_stream = reverse('api:credential_activity_stream_list', args=(obj.pk,)) + activity_stream = reverse('api:credential_activity_stream_list', args=(obj.pk,)), + access_list = reverse('api:credential_access_list', args=(obj.pk,)), + object_roles = reverse('api:credential_object_roles_list', args=(obj.pk,)), + owner_users = reverse('api:credential_owner_users_list', args=(obj.pk,)), + owner_teams = reverse('api:credential_owner_teams_list', args=(obj.pk,)), )) - if obj.user: - res['user'] = reverse('api:user_detail', args=(obj.user.pk,)) - if obj.team: - res['team'] = reverse('api:team_detail', args=(obj.team.pk,)) + + parents = obj.admin_role.parents.exclude(object_id__isnull=True) + if parents.count() > 0: + res.update({parents[0].content_type.name:parents[0].content_object.get_absolute_url()}) + elif obj.admin_role.members.count() > 0: + user = obj.admin_role.members.first() + res.update({'user': reverse('api:user_detail', args=(user.pk,))}) + return res + def get_summary_fields(self, obj): + summary_dict = super(CredentialSerializer, self).get_summary_fields(obj) + summary_dict['owners'] = [] + + for user in obj.admin_role.members.all(): + summary_dict['owners'].append({ + 'id': user.pk, + 'type': 'user', + 'name': user.username, + 'description': ' '.join([user.first_name, user.last_name]), + 'url': reverse('api:user_detail', args=(user.pk,)), + }) + + for parent in obj.admin_role.parents.exclude(object_id__isnull=True).all(): + summary_dict['owners'].append({ + 'id': parent.content_object.pk, + 'type': camelcase_to_underscore(parent.content_object.__class__.__name__), + 'name': parent.content_object.name, + 'description': parent.content_object.description, + 'url': parent.content_object.get_absolute_url(), + }) + + return summary_dict + + +class CredentialSerializerCreate(CredentialSerializer): + + user = serializers.PrimaryKeyRelatedField( + queryset=User.objects.all(), + required=False, default=None, write_only=True, allow_null=True, + help_text='Write-only field used to add user to owner role. If provided, ' + 'do not give either team or organization. Only valid for creation.') + team = serializers.PrimaryKeyRelatedField( + queryset=Team.objects.all(), + required=False, default=None, write_only=True, allow_null=True, + help_text='Write-only field used to add team to owner role. If provided, ' + 'do not give either user or organization. Only valid for creation.') + organization = serializers.PrimaryKeyRelatedField( + queryset=Organization.objects.all(), + required=False, default=None, write_only=True, allow_null=True, + help_text='Write-only field used to add organization to owner role. If provided, ' + 'do not give either team or team. Only valid for creation.') + + class Meta: + model = Credential + fields = ('*', 'user', 'team') + + def validate(self, attrs): + owner_fields = set() + for field in ('user', 'team', 'organization'): + if field in attrs: + if attrs[field]: + owner_fields.add(field) + else: + attrs.pop(field) + if not owner_fields: + raise serializers.ValidationError({"detail": "Missing 'user', 'team', or 'organization'."}) + elif len(owner_fields) > 1: + raise serializers.ValidationError({"detail": "Expecting exactly one of 'user', 'team', or 'organization'."}) + + return super(CredentialSerializerCreate, self).validate(attrs) + + def create(self, validated_data): + user = validated_data.pop('user', None) + team = validated_data.pop('team', None) + credential = super(CredentialSerializerCreate, self).create(validated_data) + if user: + credential.admin_role.members.add(user) + if team: + credential.admin_role.parents.add(team.member_role) + return credential + + +class UserCredentialSerializerCreate(CredentialSerializerCreate): + + class Meta: + model = Credential + fields = ('*', '-team', '-organization') + + +class TeamCredentialSerializerCreate(CredentialSerializerCreate): + + class Meta: + model = Credential + fields = ('*', '-user', '-organization') + + +class OrganizationCredentialSerializerCreate(CredentialSerializerCreate): + + class Meta: + model = Credential + fields = ('*', '-user', '-team') + class JobOptionsSerializer(BaseSerializer): class Meta: fields = ('*', 'job_type', 'inventory', 'project', 'playbook', - 'credential', 'cloud_credential', 'forks', 'limit', + 'credential', 'cloud_credential', 'network_credential', 'forks', 'limit', 'verbosity', 'extra_vars', 'job_tags', 'force_handlers', - 'skip_tags', 'start_at_task') + 'skip_tags', 'start_at_task',) def get_related(self, obj): res = super(JobOptionsSerializer, self).get_related(obj) - if obj.inventory and obj.inventory.active: + res['labels'] = reverse('api:job_template_label_list', args=(obj.pk,)) + if obj.inventory: res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) - if obj.project and obj.project.active: + if obj.project: res['project'] = reverse('api:project_detail', args=(obj.project.pk,)) - if obj.credential and obj.credential.active: + if obj.credential: res['credential'] = reverse('api:credential_detail', args=(obj.credential.pk,)) - if obj.cloud_credential and obj.cloud_credential.active: + if obj.cloud_credential: res['cloud_credential'] = reverse('api:credential_detail', args=(obj.cloud_credential.pk,)) + if obj.network_credential: + res['network_credential'] = reverse('api:credential_detail', + args=(obj.network_credential.pk,)) return res - def to_native(self, obj): - ret = super(JobOptionsSerializer, self).to_native(obj) + def _summary_field_labels(self, obj): + return {'count': obj.labels.count(), 'results': [{'id': x.id, 'name': x.name} for x in obj.labels.all().order_by('name')[:10]]} + + def get_summary_fields(self, obj): + res = super(JobOptionsSerializer, self).get_summary_fields(obj) + res['labels'] = self._summary_field_labels(obj) + return res + + def to_representation(self, obj): + ret = super(JobOptionsSerializer, self).to_representation(obj) if obj is None: return ret - if 'inventory' in ret and (not obj.inventory or not obj.inventory.active): + if 'inventory' in ret and not obj.inventory: ret['inventory'] = None - if 'project' in ret and (not obj.project or not obj.project.active): + if 'project' in ret and not obj.project: ret['project'] = None if 'playbook' in ret: ret['playbook'] = '' - if 'credential' in ret and (not obj.credential or not obj.credential.active): + if 'credential' in ret and not obj.credential: ret['credential'] = None - if 'cloud_credential' in ret and (not obj.cloud_credential or not obj.cloud_credential.active): + if 'cloud_credential' in ret and not obj.cloud_credential: ret['cloud_credential'] = None + if 'network_credential' in ret and not obj.network_credential: + ret['network_credential'] = None return ret - def validate_project(self, attrs, source): - project = attrs.get('project', None) - if not project and attrs.get('job_type') != PERM_INVENTORY_SCAN: - raise serializers.ValidationError("This field is required.") - return attrs + def validate(self, attrs): + if 'project' in self.fields and 'playbook' in self.fields: + project = attrs.get('project', self.instance and self.instance.project or None) + playbook = attrs.get('playbook', self.instance and self.instance.playbook or '') + job_type = attrs.get('job_type', self.instance and self.instance.job_type or None) + if not project and job_type != PERM_INVENTORY_SCAN: + raise serializers.ValidationError({'project': 'This field is required.'}) + if project and playbook and force_text(playbook) not in project.playbooks: + raise serializers.ValidationError({'playbook': 'Playbook not found for project.'}) + if project and not playbook: + raise serializers.ValidationError({'playbook': 'Must select playbook for project.'}) - def validate_playbook(self, attrs, source): - project = attrs.get('project', None) - playbook = attrs.get('playbook', '') - if project and playbook and smart_str(playbook) not in project.playbooks: - raise serializers.ValidationError('Playbook not found for project') - if project and not playbook: - raise serializers.ValidationError('Must select playbook for project') - return attrs + return super(JobOptionsSerializer, self).validate(attrs) class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer): - status = ChoiceField(source='status', choices=JobTemplate.JOB_TEMPLATE_STATUS_CHOICES, read_only=True, required=False) + status = serializers.ChoiceField(choices=JobTemplate.JOB_TEMPLATE_STATUS_CHOICES, read_only=True, required=False) class Meta: model = JobTemplate - fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'survey_enabled', 'become_enabled') + fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'ask_limit_on_launch', + 'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch', + 'ask_credential_on_launch', 'survey_enabled', 'become_enabled', 'allow_simultaneous') def get_related(self, obj): res = super(JobTemplateSerializer, self).get_related(obj) @@ -1480,49 +1833,90 @@ class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer): schedules = reverse('api:job_template_schedules_list', args=(obj.pk,)), activity_stream = reverse('api:job_template_activity_stream_list', args=(obj.pk,)), launch = reverse('api:job_template_launch', args=(obj.pk,)), + notification_templates_any = reverse('api:job_template_notification_templates_any_list', args=(obj.pk,)), + notification_templates_success = reverse('api:job_template_notification_templates_success_list', args=(obj.pk,)), + notification_templates_error = reverse('api:job_template_notification_templates_error_list', args=(obj.pk,)), + access_list = reverse('api:job_template_access_list', args=(obj.pk,)), + survey_spec = reverse('api:job_template_survey_spec', args=(obj.pk,)), + labels = reverse('api:job_template_label_list', args=(obj.pk,)), + object_roles = reverse('api:job_template_object_roles_list', args=(obj.pk,)), )) if obj.host_config_key: res['callback'] = reverse('api:job_template_callback', args=(obj.pk,)) - if obj.survey_enabled: - res['survey_spec'] = reverse('api:job_template_survey_spec', args=(obj.pk,)) return res + def _recent_jobs(self, obj): + return [{'id': x.id, 'status': x.status, 'finished': x.finished} for x in obj.jobs.all().order_by('-created')[:10]] + def get_summary_fields(self, obj): d = super(JobTemplateSerializer, self).get_summary_fields(obj) - if obj.survey_enabled and ('name' in obj.survey_spec and 'description' in obj.survey_spec): + if obj.survey_spec is not None and ('name' in obj.survey_spec and 'description' in obj.survey_spec): d['survey'] = dict(title=obj.survey_spec['name'], description=obj.survey_spec['description']) request = self.context.get('request', None) - if request is not None and request.user is not None and obj.inventory is not None and obj.project is not None: - d['can_copy'] = request.user.can_access(JobTemplate, 'add', - {'inventory': obj.inventory.pk, - 'project': obj.project.pk}) - d['can_edit'] = request.user.can_access(JobTemplate, 'change', obj, - {'inventory': obj.inventory.pk, - 'project': obj.project.pk}) - elif request is not None and request.user is not None and request.user.is_superuser: - d['can_copy'] = True - d['can_edit'] = True - else: + + # Check for conditions that would create a validation error if coppied + validation_errors, resources_needed_to_start = obj.resource_validation_data() + + if request is None or request.user is None: d['can_copy'] = False d['can_edit'] = False - d['recent_jobs'] = [{'id': x.id, 'status': x.status, 'finished': x.finished} for x in obj.jobs.filter(active=True).order_by('-created')[:10]] + elif request.user.is_superuser: + d['can_copy'] = not validation_errors + d['can_edit'] = True + else: + d['can_copy'] = (not validation_errors) and request.user.can_access(JobTemplate, 'add', {"reference_obj": obj}) + d['can_edit'] = request.user.can_access(JobTemplate, 'change', obj, {}) + + d['recent_jobs'] = self._recent_jobs(obj) return d - def validate_survey_enabled(self, attrs, source): - survey_enabled = attrs[source] if source in attrs else False - job_type = attrs['job_type'] if 'job_type' in attrs else None + def validate(self, attrs): + survey_enabled = attrs.get('survey_enabled', self.instance and self.instance.survey_enabled or False) + job_type = attrs.get('job_type', self.instance and self.instance.job_type or None) + inventory = attrs.get('inventory', self.instance and self.instance.inventory or None) + project = attrs.get('project', self.instance and self.instance.project or None) + + if job_type == "scan": + if inventory is None or attrs.get('ask_inventory_on_launch', False): + raise serializers.ValidationError({'inventory': 'Scan jobs must be assigned a fixed inventory.'}) + elif project is None: + raise serializers.ValidationError({'project': "Job types 'run' and 'check' must have assigned a project."}) + if survey_enabled and job_type == PERM_INVENTORY_SCAN: - raise serializers.ValidationError("Survey Enabled can not be used with scan jobs") - return attrs + raise serializers.ValidationError({'survey_enabled': 'Survey Enabled can not be used with scan jobs.'}) + + return super(JobTemplateSerializer, self).validate(attrs) + + def validate_extra_vars(self, value): + # extra_vars must be blank, a valid JSON or YAML dict, or ... + try: + json.loads((value or '').strip() or '{}') + return value + except ValueError: + pass + try: + yaml.safe_load(value) + return value + except yaml.YAMLError: + pass + raise serializers.ValidationError('Must be valid JSON or YAML.') + class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): - passwords_needed_to_start = serializers.Field(source='passwords_needed_to_start') - ask_variables_on_launch = serializers.Field(source='ask_variables_on_launch') + passwords_needed_to_start = serializers.ReadOnlyField() + ask_variables_on_launch = serializers.ReadOnlyField() + ask_limit_on_launch = serializers.ReadOnlyField() + ask_tags_on_launch = serializers.ReadOnlyField() + ask_job_type_on_launch = serializers.ReadOnlyField() + ask_inventory_on_launch = serializers.ReadOnlyField() + ask_credential_on_launch = serializers.ReadOnlyField() class Meta: model = Job - fields = ('*', 'job_template', 'passwords_needed_to_start', 'ask_variables_on_launch') + fields = ('*', 'job_template', 'passwords_needed_to_start', 'ask_variables_on_launch', + 'ask_limit_on_launch', 'ask_tags_on_launch', 'ask_job_type_on_launch', + 'ask_inventory_on_launch', 'ask_credential_on_launch') def get_related(self, obj): res = super(JobSerializer, self).get_related(obj) @@ -1532,8 +1926,10 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): job_tasks = reverse('api:job_job_tasks_list', args=(obj.pk,)), job_host_summaries = reverse('api:job_job_host_summaries_list', args=(obj.pk,)), activity_stream = reverse('api:job_activity_stream_list', args=(obj.pk,)), + notifications = reverse('api:job_notifications_list', args=(obj.pk,)), + labels = reverse('api:job_label_list', args=(obj.pk,)), )) - if obj.job_template and obj.job_template.active: + if obj.job_template: res['job_template'] = reverse('api:job_template_detail', args=(obj.job_template.pk,)) if obj.can_start or True: @@ -1543,15 +1939,14 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): res['relaunch'] = reverse('api:job_relaunch', args=(obj.pk,)) return res - def from_native(self, data, files): + def to_internal_value(self, data): # When creating a new job and a job template is specified, populate any # fields not provided in data from the job template. - if not self.object and isinstance(data, dict) and 'job_template' in data: + if not self.instance and isinstance(data, dict) and data.get('job_template', False): try: job_template = JobTemplate.objects.get(pk=data['job_template']) except JobTemplate.DoesNotExist: - self._errors = {'job_template': 'Invalid job template'} - return + raise serializers.ValidationError({'job_template': 'Invalid job template.'}) data.setdefault('name', job_template.name) data.setdefault('description', job_template.description) data.setdefault('job_type', job_template.job_type) @@ -1564,6 +1959,8 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): data.setdefault('credential', job_template.credential.pk) if job_template.cloud_credential: data.setdefault('cloud_credential', job_template.cloud_credential.pk) + if job_template.network_credential: + data.setdefault('network_credential', job_template.network_credential.pk) data.setdefault('forks', job_template.forks) data.setdefault('limit', job_template.limit) data.setdefault('verbosity', job_template.verbosity) @@ -1572,31 +1969,22 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): data.setdefault('force_handlers', job_template.force_handlers) data.setdefault('skip_tags', job_template.skip_tags) data.setdefault('start_at_task', job_template.start_at_task) - return super(JobSerializer, self).from_native(data, files) + return super(JobSerializer, self).to_internal_value(data) - def to_native(self, obj): - ret = super(JobSerializer, self).to_native(obj) + def to_representation(self, obj): + ret = super(JobSerializer, self).to_representation(obj) if obj is None: return ret - if 'job_template' in ret and (not obj.job_template or not obj.job_template.active): + if 'job_template' in ret and not obj.job_template: ret['job_template'] = None - - if obj.job_template and obj.job_template.survey_enabled: - if 'extra_vars' in ret: - try: - extra_vars = json.loads(ret['extra_vars']) - for key in obj.job_template.survey_password_variables(): - if key in extra_vars: - extra_vars[key] = REPLACE_STR - ret['extra_vars'] = json.dumps(extra_vars) - except ValueError: - pass + if obj.job_template and obj.job_template.survey_enabled and 'extra_vars' in ret: + ret['extra_vars'] = obj.display_extra_vars() return ret class JobCancelSerializer(JobSerializer): - can_cancel = serializers.BooleanField(source='can_cancel', read_only=True) + can_cancel = serializers.BooleanField(read_only=True) class Meta: fields = ('can_cancel',) @@ -1604,13 +1992,20 @@ class JobCancelSerializer(JobSerializer): class JobRelaunchSerializer(JobSerializer): - passwords_needed_to_start = serializers.SerializerMethodField('get_passwords_needed_to_start') + passwords_needed_to_start = serializers.SerializerMethodField() class Meta: fields = ('passwords_needed_to_start',) - def to_native(self, obj): - res = super(JobRelaunchSerializer, self).to_native(obj) + def to_internal_value(self, data): + obj = self.context.get('obj') + all_data = self.to_representation(obj) + all_data.update(data) + ret = super(JobRelaunchSerializer, self).to_internal_value(all_data) + return ret + + def to_representation(self, obj): + res = super(JobRelaunchSerializer, self).to_representation(obj) view = self.context.get('view', None) if hasattr(view, '_raw_data_form_marker'): password_keys = dict([(p, u'') for p in self.get_passwords_needed_to_start(obj)]) @@ -1622,44 +2017,66 @@ class JobRelaunchSerializer(JobSerializer): return obj.passwords_needed_to_start return '' - def validate_passwords_needed_to_start(self, attrs, source): + def validate_passwords_needed_to_start(self, value): obj = self.context.get('obj') data = self.context.get('data') - # Check for passwords needed + # Check for passwords needed needed = self.get_passwords_needed_to_start(obj) provided = dict([(field, data.get(field, '')) for field in needed]) if not all(provided.values()): raise serializers.ValidationError(needed) - return attrs + return value def validate(self, attrs): obj = self.context.get('obj') - if not obj.credential or obj.credential.active is False: + if not obj.credential: raise serializers.ValidationError(dict(credential=["Credential not found or deleted."])) - if obj.job_type != PERM_INVENTORY_SCAN and (obj.project is None or not obj.project.active): - raise serializers.ValidationError(dict(errors=["Job Template Project is missing or undefined"])) - if obj.inventory is None or not obj.inventory.active: - raise serializers.ValidationError(dict(errors=["Job Template Inventory is missing or undefined"])) + if obj.job_type != PERM_INVENTORY_SCAN and obj.project is None: + raise serializers.ValidationError(dict(errors=["Job Template Project is missing or undefined."])) + if obj.inventory is None: + raise serializers.ValidationError(dict(errors=["Job Template Inventory is missing or undefined."])) + attrs = super(JobRelaunchSerializer, self).validate(attrs) return attrs class AdHocCommandSerializer(UnifiedJobSerializer): - name = serializers.CharField(source='name', read_only=True) - module_name = ChoiceField(source='module_name', label='module name', required=bool(not AdHocCommand.MODULE_NAME_DEFAULT), choices=AdHocCommand.MODULE_NAME_CHOICES, default=AdHocCommand.MODULE_NAME_DEFAULT) - class Meta: model = AdHocCommand fields = ('*', 'job_type', 'inventory', 'limit', 'credential', - 'module_name', 'module_args', 'forks', 'verbosity', - 'become_enabled') - exclude = ('unified_job_template', 'description') + 'module_name', 'module_args', 'forks', 'verbosity', 'extra_vars', + 'become_enabled', '-unified_job_template', '-description') + extra_kwargs = { + 'name': { + 'read_only': True, + }, + } + + def get_field_names(self, declared_fields, info): + field_names = super(AdHocCommandSerializer, self).get_field_names(declared_fields, info) + # Meta multiple inheritance and -field_name options don't seem to be + # taking effect above, so remove the undesired fields here. + return tuple(x for x in field_names if x not in ('unified_job_template', 'description')) + + def build_standard_field(self, field_name, model_field): + field_class, field_kwargs = super(AdHocCommandSerializer, self).build_standard_field(field_name, model_field) + # Load module name choices dynamically from DB settings. + if field_name == 'module_name': + field_class = serializers.ChoiceField + module_name_choices = [(x, x) for x in tower_settings.AD_HOC_COMMANDS] + module_name_default = 'command' if 'command' in [x[0] for x in module_name_choices] else '' + field_kwargs['choices'] = module_name_choices + field_kwargs['required'] = bool(not module_name_default) + field_kwargs['default'] = module_name_default or serializers.empty + field_kwargs['allow_blank'] = bool(module_name_default) + field_kwargs.pop('max_length', None) + return field_class, field_kwargs def get_related(self, obj): res = super(AdHocCommandSerializer, self).get_related(obj) - if obj.inventory and obj.inventory.active: + if obj.inventory: res['inventory'] = reverse('api:inventory_detail', args=(obj.inventory.pk,)) - if obj.credential and obj.credential.active: + if obj.credential: res['credential'] = reverse('api:credential_detail', args=(obj.credential.pk,)) res.update(dict( events = reverse('api:ad_hoc_command_ad_hoc_command_events_list', args=(obj.pk,)), @@ -1669,23 +2086,11 @@ class AdHocCommandSerializer(UnifiedJobSerializer): res['relaunch'] = reverse('api:ad_hoc_command_relaunch', args=(obj.pk,)) return res - def to_native(self, obj): - # In raw data form, populate limit field from host/group name. - view = self.context.get('view', None) - parent_model = getattr(view, 'parent_model', None) - if not (obj and obj.pk) and view and hasattr(view, '_raw_data_form_marker'): - if not obj: - obj = self.opts.model() - ret = super(AdHocCommandSerializer, self).to_native(obj) - # Hide inventory and limit fields from raw data, since they will be set - # automatically by sub list create view. - if not (obj and obj.pk) and view and hasattr(view, '_raw_data_form_marker'): - if parent_model in (Host, Group): - ret.pop('inventory', None) - ret.pop('limit', None) - if 'inventory' in ret and (not obj.inventory or not obj.inventory.active): + def to_representation(self, obj): + ret = super(AdHocCommandSerializer, self).to_representation(obj) + if 'inventory' in ret and not obj.inventory: ret['inventory'] = None - if 'credential' in ret and (not obj.credential or not obj.credential.active): + if 'credential' in ret and not obj.credential: ret['credential'] = None # For the UI, only module_name is returned for name, instead of the # longer module name + module_args format. @@ -1696,7 +2101,7 @@ class AdHocCommandSerializer(UnifiedJobSerializer): class AdHocCommandCancelSerializer(AdHocCommandSerializer): - can_cancel = serializers.BooleanField(source='can_cancel', read_only=True) + can_cancel = serializers.BooleanField(read_only=True) class Meta: fields = ('can_cancel',) @@ -1707,7 +2112,7 @@ class AdHocCommandRelaunchSerializer(AdHocCommandSerializer): class Meta: fields = () - def to_native(self, obj): + def to_representation(self, obj): if obj: return dict([(p, u'') for p in obj.passwords_needed_to_start]) else: @@ -1726,6 +2131,10 @@ class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer): jobs = reverse('api:system_job_template_jobs_list', args=(obj.pk,)), schedules = reverse('api:system_job_template_schedules_list', args=(obj.pk,)), launch = reverse('api:system_job_template_launch', args=(obj.pk,)), + notification_templates_any = reverse('api:system_job_template_notification_templates_any_list', args=(obj.pk,)), + notification_templates_success = reverse('api:system_job_template_notification_templates_success_list', args=(obj.pk,)), + notification_templates_error = reverse('api:system_job_template_notification_templates_error_list', args=(obj.pk,)), + )) return res @@ -1737,16 +2146,17 @@ class SystemJobSerializer(UnifiedJobSerializer): def get_related(self, obj): res = super(SystemJobSerializer, self).get_related(obj) - if obj.system_job_template and obj.system_job_template.active: + if obj.system_job_template: res['system_job_template'] = reverse('api:system_job_template_detail', args=(obj.system_job_template.pk,)) + res['notifications'] = reverse('api:system_job_notifications_list', args=(obj.pk,)) if obj.can_cancel or True: res['cancel'] = reverse('api:system_job_cancel', args=(obj.pk,)) return res class SystemJobCancelSerializer(SystemJobSerializer): - can_cancel = serializers.BooleanField(source='can_cancel', read_only=True) + can_cancel = serializers.BooleanField(read_only=True) class Meta: fields = ('can_cancel',) @@ -1790,7 +2200,7 @@ class JobHostSummarySerializer(BaseSerializer): class JobEventSerializer(BaseSerializer): event_display = serializers.CharField(source='get_event_display2', read_only=True) - event_level = serializers.IntegerField(source='event_level', read_only=True) + event_level = serializers.IntegerField(read_only=True) class Meta: model = JobEvent @@ -1834,6 +2244,15 @@ class AdHocCommandEventSerializer(BaseSerializer): 'counter', 'event_display', 'event_data', 'failed', 'changed', 'host', 'host_name') + def to_internal_value(self, data): + ret = super(AdHocCommandEventSerializer, self).to_internal_value(data) + # AdHocCommandAdHocCommandEventsList should be the only view creating + # AdHocCommandEvent instances, so keep the ad_hoc_command it sets, even + # though ad_hoc_command is a read-only field. + if 'ad_hoc_command' in data: + ret['ad_hoc_command'] = data['ad_hoc_command'] + return ret + def get_related(self, obj): res = super(AdHocCommandEventSerializer, self).get_related(obj) res.update(dict( @@ -1843,80 +2262,101 @@ class AdHocCommandEventSerializer(BaseSerializer): res['host'] = reverse('api:host_detail', args=(obj.host.pk,)) return res + class JobLaunchSerializer(BaseSerializer): - passwords_needed_to_start = serializers.Field(source='passwords_needed_to_start') - can_start_without_user_input = serializers.BooleanField(source='can_start_without_user_input', read_only=True) - variables_needed_to_start = serializers.Field(source='variables_needed_to_start') - credential_needed_to_start = serializers.SerializerMethodField('get_credential_needed_to_start') - survey_enabled = serializers.SerializerMethodField('get_survey_enabled') + passwords_needed_to_start = serializers.ReadOnlyField() + can_start_without_user_input = serializers.BooleanField(read_only=True) + variables_needed_to_start = serializers.ReadOnlyField() + credential_needed_to_start = serializers.SerializerMethodField() + inventory_needed_to_start = serializers.SerializerMethodField() + survey_enabled = serializers.SerializerMethodField() + extra_vars = VerbatimField(required=False, write_only=True) + job_template_data = serializers.SerializerMethodField() + defaults = serializers.SerializerMethodField() class Meta: model = JobTemplate - fields = ('can_start_without_user_input', 'passwords_needed_to_start', 'extra_vars', - 'ask_variables_on_launch', 'survey_enabled', 'variables_needed_to_start', - 'credential', 'credential_needed_to_start',) - read_only_fields = ('ask_variables_on_launch',) - write_only_fields = ('credential','extra_vars',) - - def to_native(self, obj): - res = super(JobLaunchSerializer, self).to_native(obj) - view = self.context.get('view', None) - if obj and hasattr(view, '_raw_data_form_marker'): - if obj.passwords_needed_to_start: - password_keys = dict([(p, u'') for p in obj.passwords_needed_to_start]) - res.update(password_keys) - if self.get_credential_needed_to_start(obj) is True: - res.update(dict(credential='')) - return res + fields = ('can_start_without_user_input', 'passwords_needed_to_start', + 'extra_vars', 'limit', 'job_tags', 'skip_tags', 'job_type', 'inventory', + 'credential', 'ask_variables_on_launch', 'ask_tags_on_launch', + 'ask_job_type_on_launch', 'ask_limit_on_launch', + 'ask_inventory_on_launch', 'ask_credential_on_launch', + 'survey_enabled', 'variables_needed_to_start', + 'credential_needed_to_start', 'inventory_needed_to_start', + 'job_template_data', 'defaults') + read_only_fields = ('ask_variables_on_launch', 'ask_limit_on_launch', + 'ask_tags_on_launch', 'ask_job_type_on_launch', + 'ask_inventory_on_launch', 'ask_credential_on_launch') + extra_kwargs = { + 'credential': {'write_only': True,}, + 'limit': {'write_only': True,}, + 'job_tags': {'write_only': True,}, + 'skip_tags': {'write_only': True,}, + 'job_type': {'write_only': True,}, + 'inventory': {'write_only': True,} + } def get_credential_needed_to_start(self, obj): - return not (obj and obj.credential and obj.credential.active) + return not (obj and obj.credential) + + def get_inventory_needed_to_start(self, obj): + return not (obj and obj.inventory) def get_survey_enabled(self, obj): if obj: return obj.survey_enabled and 'spec' in obj.survey_spec return False - def validate_credential(self, attrs, source): - obj = self.context.get('obj') - credential = attrs.get(source, None) or (obj and obj.credential) - if not credential or not credential.active: - raise serializers.ValidationError('Credential not provided') - attrs[source] = credential - return attrs + def get_defaults(self, obj): + ask_for_vars_dict = obj._ask_for_vars_dict() + defaults_dict = {} + for field in ask_for_vars_dict: + if field in ('inventory', 'credential'): + defaults_dict[field] = dict( + name=getattrd(obj, '%s.name' % field, None), + id=getattrd(obj, '%s.pk' % field, None)) + else: + defaults_dict[field] = getattr(obj, field) + return defaults_dict - def validate_passwords_needed_to_start(self, attrs, source): + def get_job_template_data(self, obj): + return dict(name=obj.name, id=obj.id, description=obj.description) + + def validate(self, attrs): + errors = {} obj = self.context.get('obj') - passwords = self.context.get('passwords') data = self.context.get('data') - credential = attrs.get('credential', None) or obj.credential + for field in obj.resources_needed_to_start: + if not (attrs.get(field, False) and obj._ask_for_vars_dict().get(field, False)): + errors[field] = "Job Template '%s' is missing or undefined." % field + + if (not obj.ask_credential_on_launch) or (not attrs.get('credential', None)): + credential = obj.credential + else: + credential = attrs.get('credential', None) + # fill passwords dict with request data passwords if credential and credential.passwords_needed: + passwords = self.context.get('passwords') try: for p in credential.passwords_needed: passwords[p] = data[p] except KeyError: - raise serializers.ValidationError(credential.passwords_needed) - return attrs + errors['passwords_needed_to_start'] = credential.passwords_needed - def validate(self, attrs): - obj = self.context.get('obj') extra_vars = attrs.get('extra_vars', {}) - try: - extra_vars = literal_eval(extra_vars) - extra_vars = json.dumps(extra_vars) - except Exception: - pass - try: - extra_vars = json.loads(extra_vars) - except (ValueError, TypeError): + if isinstance(extra_vars, basestring): try: - extra_vars = yaml.safe_load(extra_vars) - except (yaml.YAMLError, TypeError, AttributeError): - raise serializers.ValidationError(dict(extra_vars=['Must be valid JSON or YAML'])) + extra_vars = json.loads(extra_vars) + except (ValueError, TypeError): + try: + extra_vars = yaml.safe_load(extra_vars) + assert isinstance(extra_vars, dict) + except (yaml.YAMLError, TypeError, AttributeError, AssertionError): + errors['extra_vars'] = 'Must be a valid JSON or YAML dictionary.' if not isinstance(extra_vars, dict): extra_vars = {} @@ -1924,15 +2364,150 @@ class JobLaunchSerializer(BaseSerializer): if self.get_survey_enabled(obj): validation_errors = obj.survey_variable_validation(extra_vars) if validation_errors: - raise serializers.ValidationError(dict(variables_needed_to_start=validation_errors)) + errors['variables_needed_to_start'] = validation_errors - if obj.job_type != PERM_INVENTORY_SCAN and (obj.project is None or not obj.project.active): - raise serializers.ValidationError(dict(errors=["Job Template Project is missing or undefined"])) - if obj.inventory is None or not obj.inventory.active: - raise serializers.ValidationError(dict(errors=["Job Template Inventory is missing or undefined"])) + # Special prohibited cases for scan jobs + if 'job_type' in data and obj.ask_job_type_on_launch: + if ((obj.job_type == PERM_INVENTORY_SCAN and not data['job_type'] == PERM_INVENTORY_SCAN) or + (data['job_type'] == PERM_INVENTORY_SCAN and not obj.job_type == PERM_INVENTORY_SCAN)): + errors['job_type'] = 'Can not override job_type to or from a scan job.' + if (obj.job_type == PERM_INVENTORY_SCAN and ('inventory' in data) and obj.ask_inventory_on_launch and + obj.inventory != data['inventory']): + errors['inventory'] = 'Inventory can not be changed at runtime for scan jobs.' + if errors: + raise serializers.ValidationError(errors) + + JT_extra_vars = obj.extra_vars + JT_limit = obj.limit + JT_job_type = obj.job_type + JT_job_tags = obj.job_tags + JT_skip_tags = obj.skip_tags + JT_inventory = obj.inventory + JT_credential = obj.credential + attrs = super(JobLaunchSerializer, self).validate(attrs) + obj.extra_vars = JT_extra_vars + obj.limit = JT_limit + obj.job_type = JT_job_type + obj.skip_tags = JT_skip_tags + obj.job_tags = JT_job_tags + obj.inventory = JT_inventory + obj.credential = JT_credential return attrs +class NotificationTemplateSerializer(BaseSerializer): + + class Meta: + model = NotificationTemplate + fields = ('*', 'organization', 'notification_type', 'notification_configuration') + + type_map = {"string": (str, unicode), + "int": (int,), + "bool": (bool,), + "list": (list,), + "password": (str, unicode), + "object": (dict, OrderedDict)} + + def to_representation(self, obj): + ret = super(NotificationTemplateSerializer, self).to_representation(obj) + for field in obj.notification_class.init_parameters: + if field in ret['notification_configuration'] and \ + force_text(ret['notification_configuration'][field]).startswith('$encrypted$'): + ret['notification_configuration'][field] = '$encrypted$' + return ret + + def get_related(self, obj): + res = super(NotificationTemplateSerializer, self).get_related(obj) + res.update(dict( + test = reverse('api:notification_template_test', args=(obj.pk,)), + notifications = reverse('api:notification_template_notification_list', args=(obj.pk,)), + )) + if obj.organization: + res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) + return res + + def _recent_notifications(self, obj): + return [{'id': x.id, 'status': x.status, 'created': x.created} for x in obj.notifications.all().order_by('-created')[:5]] + + def get_summary_fields(self, obj): + d = super(NotificationTemplateSerializer, self).get_summary_fields(obj) + d['recent_notifications'] = self._recent_notifications(obj) + return d + + def validate(self, attrs): + from awx.api.views import NotificationTemplateDetail + + notification_type = None + if 'notification_type' in attrs: + notification_type = attrs['notification_type'] + elif self.instance: + notification_type = self.instance.notification_type + else: + notification_type = None + if not notification_type: + raise serializers.ValidationError('Missing required fields for Notification Configuration: notification_type') + + notification_class = NotificationTemplate.CLASS_FOR_NOTIFICATION_TYPE[notification_type] + missing_fields = [] + incorrect_type_fields = [] + error_list = [] + if 'notification_configuration' not in attrs: + return attrs + if self.context['view'].kwargs and isinstance(self.context['view'], NotificationTemplateDetail): + object_actual = self.context['view'].get_object() + else: + object_actual = None + for field in notification_class.init_parameters: + if field not in attrs['notification_configuration']: + missing_fields.append(field) + continue + field_val = attrs['notification_configuration'][field] + field_type = notification_class.init_parameters[field]['type'] + expected_types = self.type_map[field_type] + if not type(field_val) in expected_types: + incorrect_type_fields.append((field, field_type)) + continue + if field_type == "list" and len(field_val) < 1: + error_list.append("No values specified for field '{}'".format(field)) + continue + if field_type == "password" and field_val == "$encrypted$" and object_actual is not None: + attrs['notification_configuration'][field] = object_actual.notification_configuration[field] + if missing_fields: + error_list.append("Missing required fields for Notification Configuration: {}.".format(missing_fields)) + if incorrect_type_fields: + for type_field_error in incorrect_type_fields: + error_list.append("Configuration field '{}' incorrect type, expected {}.".format(type_field_error[0], + type_field_error[1])) + if error_list: + raise serializers.ValidationError(error_list) + return attrs + +class NotificationSerializer(BaseSerializer): + + class Meta: + model = Notification + fields = ('*', '-name', '-description', 'notification_template', 'error', 'status', 'notifications_sent', + 'notification_type', 'recipients', 'subject') + + def get_related(self, obj): + res = super(NotificationSerializer, self).get_related(obj) + res.update(dict( + notification_template = reverse('api:notification_template_detail', args=(obj.notification_template.pk,)), + )) + return res + +class LabelSerializer(BaseSerializer): + + class Meta: + model = Label + fields = ('*', '-description', 'organization') + + def get_related(self, obj): + res = super(LabelSerializer, self).get_related(obj) + if obj.organization: + res['organization'] = reverse('api:organization_detail', args=(obj.organization.pk,)) + return res + class ScheduleSerializer(BaseSerializer): class Meta: @@ -1944,15 +2519,14 @@ class ScheduleSerializer(BaseSerializer): res.update(dict( unified_jobs = reverse('api:schedule_unified_jobs_list', args=(obj.pk,)), )) - if obj.unified_job_template and obj.unified_job_template.active: + if obj.unified_job_template: res['unified_job_template'] = obj.unified_job_template.get_absolute_url() return res - def validate_unified_job_template(self, attrs, source): - ujt = attrs[source] - if type(ujt) == InventorySource and ujt.source not in SCHEDULEABLE_PROVIDERS: - raise serializers.ValidationError('Inventory Source must be a cloud resource') - return attrs + def validate_unified_job_template(self, value): + if type(value) == InventorySource and value.source not in SCHEDULEABLE_PROVIDERS: + raise serializers.ValidationError('Inventory Source must be a cloud resource.') + return value # We reject rrules if: # - DTSTART is not include @@ -1964,8 +2538,8 @@ class ScheduleSerializer(BaseSerializer): # - BYWEEKNO # - Multiple DTSTART or RRULE elements # - COUNT > 999 - def validate_rrule(self, attrs, source): - rrule_value = attrs[source] + def validate_rrule(self, value): + rrule_value = value multi_by_month_day = ".*?BYMONTHDAY[\:\=][0-9]+,-*[0-9]+" multi_by_month = ".*?BYMONTH[\:\=][0-9]+,[0-9]+" by_day_with_numeric_prefix = ".*?BYDAY[\:\=][0-9]+[a-zA-Z]{2}" @@ -1975,42 +2549,41 @@ class ScheduleSerializer(BaseSerializer): if not len(match_multiple_dtstart): raise serializers.ValidationError('DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ') if len(match_multiple_dtstart) > 1: - raise serializers.ValidationError('Multiple DTSTART is not supported') + raise serializers.ValidationError('Multiple DTSTART is not supported.') if not len(match_multiple_rrule): - raise serializers.ValidationError('RRULE require in rrule') + raise serializers.ValidationError('RRULE require in rrule.') if len(match_multiple_rrule) > 1: - raise serializers.ValidationError('Multiple RRULE is not supported') + raise serializers.ValidationError('Multiple RRULE is not supported.') if 'interval' not in rrule_value.lower(): - raise serializers.ValidationError('INTERVAL required in rrule') + raise serializers.ValidationError('INTERVAL required in rrule.') if 'tzid' in rrule_value.lower(): - raise serializers.ValidationError('TZID is not supported') + raise serializers.ValidationError('TZID is not supported.') if 'secondly' in rrule_value.lower(): - raise serializers.ValidationError('SECONDLY is not supported') + raise serializers.ValidationError('SECONDLY is not supported.') if re.match(multi_by_month_day, rrule_value): - raise serializers.ValidationError('Multiple BYMONTHDAYs not supported') + raise serializers.ValidationError('Multiple BYMONTHDAYs not supported.') if re.match(multi_by_month, rrule_value): - raise serializers.ValidationError('Multiple BYMONTHs not supported') + raise serializers.ValidationError('Multiple BYMONTHs not supported.') if re.match(by_day_with_numeric_prefix, rrule_value): - raise serializers.ValidationError("BYDAY with numeric prefix not supported") + raise serializers.ValidationError("BYDAY with numeric prefix not supported.") if 'byyearday' in rrule_value.lower(): - raise serializers.ValidationError("BYYEARDAY not supported") + raise serializers.ValidationError("BYYEARDAY not supported.") if 'byweekno' in rrule_value.lower(): - raise serializers.ValidationError("BYWEEKNO not supported") + raise serializers.ValidationError("BYWEEKNO not supported.") if match_count: count_val = match_count.groups()[0].strip().split("=") if int(count_val[1]) > 999: - raise serializers.ValidationError("COUNT > 999 is unsupported") + raise serializers.ValidationError("COUNT > 999 is unsupported.") try: rrule.rrulestr(rrule_value) except Exception: - # TODO: Log - raise serializers.ValidationError("rrule parsing failed validation") - return attrs + raise serializers.ValidationError("rrule parsing failed validation.") + return value class ActivityStreamSerializer(BaseSerializer): - changes = serializers.SerializerMethodField('get_changes') - object_association = serializers.SerializerMethodField('get_object_association') + changes = serializers.SerializerMethodField() + object_association = serializers.SerializerMethodField() class Meta: model = ActivityStream @@ -2023,9 +2596,11 @@ class ActivityStreamSerializer(BaseSerializer): if key == 'changes': field.help_text = 'A summary of the new and changed values when an object is created, updated, or deleted' if key == 'object1': - field.help_text = 'For create, update, and delete events this is the object type that was affected. For associate and disassociate events this is the object type associated or disassociated with object2' + field.help_text = ('For create, update, and delete events this is the object type that was affected. ' + 'For associate and disassociate events this is the object type associated or disassociated with object2.') if key == 'object2': - field.help_text = 'Unpopulated for create, update, and delete events. For associate and disassociate events this is the object type that object1 is being associated with' + field.help_text = ('Unpopulated for create, update, and delete events. For associate and disassociate ' + 'events this is the object type that object1 is being associated with.') if key == 'operation': field.help_text = 'The action taken with respect to the given object(s).' return ret @@ -2036,7 +2611,6 @@ class ActivityStreamSerializer(BaseSerializer): try: return json.loads(obj.changes) except Exception: - # TODO: Log logger.warn("Error deserializing activity stream json changes") return {} @@ -2054,23 +2628,27 @@ class ActivityStreamSerializer(BaseSerializer): for fk, _ in SUMMARIZABLE_FK_FIELDS.items(): if not hasattr(obj, fk): continue - allm2m = getattr(obj, fk).all() - if allm2m.count() > 0: + allm2m = getattr(obj, fk).distinct() + if getattr(obj, fk).exists(): rel[fk] = [] for thisItem in allm2m: - rel[fk].append(reverse('api:' + fk + '_detail', args=(thisItem.id,))) + if fk == 'custom_inventory_script': + rel[fk].append(reverse('api:inventory_script_detail', args=(thisItem.id,))) + else: + rel[fk].append(reverse('api:' + fk + '_detail', args=(thisItem.id,))) + if fk == 'schedule': rel['unified_job_template'] = thisItem.unified_job_template.get_absolute_url() return rel def get_summary_fields(self, obj): - summary_fields = SortedDict() + summary_fields = OrderedDict() for fk, related_fields in SUMMARIZABLE_FK_FIELDS.items(): try: if not hasattr(obj, fk): continue - allm2m = getattr(obj, fk).all() - if allm2m.count() > 0: + allm2m = getattr(obj, fk).distinct() + if getattr(obj, fk).exists(): summary_fields[fk] = [] for thisItem in allm2m: if fk == 'job': @@ -2107,6 +2685,58 @@ class ActivityStreamSerializer(BaseSerializer): return summary_fields +class TowerSettingsSerializer(BaseSerializer): + + value = VerbatimField() + + class Meta: + model = TowerSettings + fields = ('key', 'description', 'category', 'value', 'value_type', 'user') + read_only_fields = ('description', 'category', 'value_type', 'user') + + def __init__(self, instance=None, data=serializers.empty, **kwargs): + if instance is None and data is not serializers.empty and 'key' in data: + try: + instance = TowerSettings.objects.get(key=data['key']) + except TowerSettings.DoesNotExist: + pass + super(TowerSettingsSerializer, self).__init__(instance, data, **kwargs) + + def to_representation(self, obj): + ret = super(TowerSettingsSerializer, self).to_representation(obj) + ret['value'] = getattr(obj, 'value_converted', obj.value) + return ret + + def to_internal_value(self, data): + if data['key'] not in settings.TOWER_SETTINGS_MANIFEST: + raise serializers.ValidationError({'key': ['Key {0} is not a valid settings key.'.format(data['key'])]}) + ret = super(TowerSettingsSerializer, self).to_internal_value(data) + manifest_val = settings.TOWER_SETTINGS_MANIFEST[data['key']] + ret['description'] = manifest_val['description'] + ret['category'] = manifest_val['category'] + ret['value_type'] = manifest_val['type'] + return ret + + def validate(self, attrs): + manifest = settings.TOWER_SETTINGS_MANIFEST + if attrs['key'] not in manifest: + raise serializers.ValidationError(dict(key=["Key {0} is not a valid settings key.".format(attrs['key'])])) + + if attrs['value_type'] == 'json': + attrs['value'] = json.dumps(attrs['value']) + elif attrs['value_type'] == 'list': + try: + attrs['value'] = ','.join(map(force_text, attrs['value'])) + except TypeError: + attrs['value'] = force_text(attrs['value']) + elif attrs['value_type'] == 'bool': + attrs['value'] = force_text(bool(attrs['value'])) + else: + attrs['value'] = force_text(attrs['value']) + + return super(TowerSettingsSerializer, self).validate(attrs) + + class AuthTokenSerializer(serializers.Serializer): username = serializers.CharField() @@ -2119,39 +2749,39 @@ class AuthTokenSerializer(serializers.Serializer): if username and password: user = authenticate(username=username, password=password) if user: - if not user.is_active: - raise serializers.ValidationError('User account is disabled.') attrs['user'] = user return attrs else: raise serializers.ValidationError('Unable to login with provided credentials.') else: - raise serializers.ValidationError('Must include "username" and "password"') + raise serializers.ValidationError('Must include "username" and "password".') class FactVersionSerializer(BaseFactSerializer): - related = serializers.SerializerMethodField('get_related') - + class Meta: - model = FactVersion - fields = ('related', 'module', 'timestamp',) + model = Fact + fields = ('related', 'module', 'timestamp') + read_only_fields = ('*',) def get_related(self, obj): - host_obj = self.context.get('host_obj') - res = {} + res = super(FactVersionSerializer, self).get_related(obj) params = { 'datetime': timestamp_apiformat(obj.timestamp), 'module': obj.module, } - res.update(dict( - fact_view = build_url('api:host_fact_compare_view', args=(host_obj.pk,), get=params), - )) + res['fact_view'] = build_url('api:host_fact_compare_view', args=(obj.host.pk,), get=params) return res - class FactSerializer(BaseFactSerializer): class Meta: model = Fact - depth = 2 - fields = ('timestamp', 'host', 'module', 'fact') + # TODO: Consider adding in host to the fields list ? + fields = ('related', 'timestamp', 'module', 'facts', 'id', 'summary_fields', 'host') + read_only_fields = ('*',) + + def get_related(self, obj): + res = super(FactSerializer, self).get_related(obj) + res['host'] = obj.host.get_absolute_url() + return res diff --git a/awx/api/templates/api/_new_in_awx.md b/awx/api/templates/api/_new_in_awx.md index f953afcc14..4df45be686 100644 --- a/awx/api/templates/api/_new_in_awx.md +++ b/awx/api/templates/api/_new_in_awx.md @@ -5,4 +5,5 @@ {% if new_in_200 %}> _New in Ansible Tower 2.0.0_{% endif %} {% if new_in_220 %}> _New in Ansible Tower 2.2.0_{% endif %} {% if new_in_230 %}> _New in Ansible Tower 2.3.0_{% endif %} -{% if new_in_240 %}> _New in Ansible Tower 2.4.0_{% endif %} \ No newline at end of file +{% if new_in_240 %}> _New in Ansible Tower 2.4.0_{% endif %} +{% if new_in_300 %}> _New in Ansible Tower 3.0.0_{% endif %} diff --git a/awx/api/templates/api/_result_fields_common.md b/awx/api/templates/api/_result_fields_common.md index 35fc3b55d1..b45c2dfc1f 100644 --- a/awx/api/templates/api/_result_fields_common.md +++ b/awx/api/templates/api/_result_fields_common.md @@ -1,6 +1,7 @@ {% for fn, fm in serializer_fields.items %}{% spaceless %} -{% if not write_only or not fm.read_only %} -* `{{ fn }}`: {{ fm.help_text|capfirst }} ({{ fm.type }}{% if write_only and fm.required %}, required{% endif %}{% if write_only and fm.read_only %}, read-only{% endif %}{% if write_only and not fm.choices and not fm.required %}, default=`{% if fm.type == "string" or fm.type == "email" %}"{% firstof fm.default "" %}"{% else %}{{ fm.default }}{% endif %}`{% endif %}){% if fm.choices %}{% for c in fm.choices %} +{% if write_only and fm.read_only or not write_only and fm.write_only or write_only and fn == parent_key %} +{% else %} +* `{{ fn }}`: {{ fm.help_text|capfirst }} ({{ fm.type }}{% if write_only and fm.required %}, required{% endif %}{% if write_only and fm.read_only %}, read-only{% endif %}{% if write_only and not fm.choices and not fm.required %}, default=`{% if fm.type == "string" or fm.type == "email" %}"{% firstof fm.default "" %}"{% else %}{% if fm.type == "field" and not fm.default %}None{% else %}{{ fm.default }}{% endif %}{% endif %}`{% endif %}){% if fm.choices %}{% for c in fm.choices %} - `{% if c.0 == "" %}""{% else %}{{ c.0 }}{% endif %}`{% if c.1 != c.0 %}: {{ c.1 }}{% endif %}{% if write_only and c.0 == fm.default %} (default){% endif %}{% endfor %}{% endif %}{% endif %} {% endspaceless %} {% endfor %} diff --git a/awx/api/templates/api/_schedule_detail.md b/awx/api/templates/api/_schedule_detail.md new file mode 100644 index 0000000000..4acd6a5288 --- /dev/null +++ b/awx/api/templates/api/_schedule_detail.md @@ -0,0 +1,28 @@ +The following lists the expected format and details of our rrules: + +* DTSTART is required and must follow the following format: DTSTART:YYYYMMDDTHHMMSSZ +* DTSTART is expected to be in UTC +* INTERVAL is required +* SECONDLY is not supported +* TZID is not supported +* RRULE must preceed the rule statements +* BYDAY is supported but not BYDAY with a numerical prefix +* BYYEARDAY and BYWEEKNO are not supported +* Only one rrule statement per schedule is supported +* COUNT must be < 1000 + +Here are some example rrules: + + "DTSTART:20500331T055000Z RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5" + "DTSTART:20240331T075000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1" + "DTSTART:20140331T075000Z RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=20230401T075000Z" + "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR" + "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO" + "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=6" + "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=4;BYDAY=SU" + "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR" + "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR,SA,SU" + "DTSTART:20140331T075000Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=4;BYMONTHDAY=1" + "DTSTART:20140331T075000Z RRULE:FREQ=YEARLY;INTERVAL=1;BYSETPOS=-1;BYMONTH=8;BYDAY=SU" + "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=1;UNTIL=20230401T075000Z;BYDAY=MO,WE,FR" + "DTSTART:20140331T075000Z RRULE:FREQ=HOURLY;INTERVAL=1;UNTIL=20230610T075000Z" diff --git a/awx/api/templates/api/_schedule_list_common.md b/awx/api/templates/api/_schedule_list_common.md index c7f9347e16..15632221a5 100644 --- a/awx/api/templates/api/_schedule_list_common.md +++ b/awx/api/templates/api/_schedule_list_common.md @@ -1,30 +1,5 @@ POST requests to this resource must include a proper `rrule` value following -a particular format and conforming to the following rules: +a particular format and conforming to subset of allowed rules. -* DTSTART is required and must follow the following format: DTSTART:YYYYMMDDTHHMMSSZ -* DTSTART is expected to be in UTC -* INTERVAL is required -* SECONDLY is not supported -* TZID is not supported -* RRULE must preceed the rule statements -* BYDAY is supported but not BYDAY with a numerical prefix -* BYYEARDAY and BYWEEKNO are not supported -* Only one rrule statement per schedule is supported -* COUNT must be < 1000 - -Here are some example rrules: - - "DTSTART:20500331T055000Z RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5" - "DTSTART:20240331T075000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1" - "DTSTART:20140331T075000Z RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=20230401T075000Z" - "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR" - "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO" - "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=6" - "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=4;BYDAY=SU" - "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR" - "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR,SA,SU" - "DTSTART:20140331T075000Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=4;BYMONTHDAY=1" - "DTSTART:20140331T075000Z RRULE:FREQ=YEARLY;INTERVAL=1;BYSETPOS=-1;BYMONTH=8;BYDAY=SU" - "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=1;UNTIL=20230401T075000Z;BYDAY=MO,WE,FR" - "DTSTART:20140331T075000Z RRULE:FREQ=HOURLY;INTERVAL=1;UNTIL=20230610T075000Z" +{% include "api/_schedule_detail.md" %} diff --git a/awx/api/templates/api/job_template_label_list.md b/awx/api/templates/api/job_template_label_list.md new file mode 100644 index 0000000000..76c520eab5 --- /dev/null +++ b/awx/api/templates/api/job_template_label_list.md @@ -0,0 +1,9 @@ +{% include "api/sub_list_create_api_view.md" %} + +Labels not associated with any other resources are deleted. A label can become disassociated with a resource as a result of 3 events. + +1. A label is explicitly diassociated with a related job template +2. A job is deleted with labels +3. A cleanup job deletes a job with labels + +{% include "api/_new_in_awx.md" %} diff --git a/awx/api/templates/api/job_template_launch.md b/awx/api/templates/api/job_template_launch.md index 1dddde4210..0c17c3d842 100644 --- a/awx/api/templates/api/job_template_launch.md +++ b/awx/api/templates/api/job_template_launch.md @@ -6,24 +6,40 @@ The response will include the following fields: * `ask_variables_on_launch`: Flag indicating whether the job_template is configured to prompt for variables upon launch (boolean, read-only) +* `ask_tags_on_launch`: Flag indicating whether the job_template is + configured to prompt for tags upon launch (boolean, read-only) +* `ask_job_type_on_launch`: Flag indicating whether the job_template is + configured to prompt for job_type upon launch (boolean, read-only) +* `ask_limit_on_launch`: Flag indicating whether the job_template is + configured to prompt for limit upon launch (boolean, read-only) +* `ask_inventory_on_launch`: Flag indicating whether the job_template is + configured to prompt for inventory upon launch (boolean, read-only) +* `ask_credential_on_launch`: Flag indicating whether the job_template is + configured to prompt for credential upon launch (boolean, read-only) * `can_start_without_user_input`: Flag indicating if the job_template can be launched without user-input (boolean, read-only) * `passwords_needed_to_start`: Password names required to launch the job_template (array, read-only) * `variables_needed_to_start`: Required variable names required to launch the job_template (array, read-only) -* `survey_enabled`: Flag indicating if whether the job_template has an enabled +* `survey_enabled`: Flag indicating whether the job_template has an enabled survey (boolean, read-only) * `credential_needed_to_start`: Flag indicating the presence of a credential associated with the job template. If not then one should be supplied when launching the job (boolean, read-only) +* `inventory_needed_to_start`: Flag indicating the presence of an inventory + associated with the job template. If not then one should be supplied when + launching the job (boolean, read-only) Make a POST request to this resource to launch the job_template. If any -passwords or extra variables (extra_vars) are required, they must be passed -via POST data, with extra_vars given as a YAML or JSON string and escaped -parentheses. If `credential_needed_to_start` is `True` then the `credential` -field is required as well. +passwords, inventory, or extra variables (extra_vars) are required, they must +be passed via POST data, with extra_vars given as a YAML or JSON string and +escaped parentheses. If `credential_needed_to_start` is `True` then the +`credential` field is required and if the `inventory_needed_to_start` is +`True` then the `inventory` is required as well. -If successful, the response status code will be 202. If any required passwords +If successful, the response status code will be 201. If any required passwords are not provided, a 400 status code will be returned. If the job cannot be -launched, a 405 status code will be returned. +launched, a 405 status code will be returned. If the provided credential or +inventory are not allowed to be used by the user, then a 403 status code will +be returned. diff --git a/awx/api/templates/api/job_template_survey_spec.md b/awx/api/templates/api/job_template_survey_spec.md index be73c0b1f4..d1a222b31f 100644 --- a/awx/api/templates/api/job_template_survey_spec.md +++ b/awx/api/templates/api/job_template_survey_spec.md @@ -3,7 +3,7 @@ POST requests to this resource should include the full specification for a Job T Here is an example survey specification: { - "name": "Simple Surveny", + "name": "Simple Survey", "description": "Description of the simple survey", "spec": [ { @@ -23,6 +23,7 @@ list of survey items. Within each survey item `type` must be one of: * text: For survey questions expecting a textual answer +* password: For survey questions expecting a password or other sensitive information * integer: For survey questions expecting a whole number answer * float: For survey questions expecting a decimal number * multiplechoice: For survey questions where one option from a list is required @@ -116,4 +117,4 @@ Here is a more comprehensive example showing the various question types and thei "default": "" } ] - } \ No newline at end of file + } diff --git a/awx/api/templates/api/schedule_list.md b/awx/api/templates/api/schedule_list.md new file mode 100644 index 0000000000..196169ff10 --- /dev/null +++ b/awx/api/templates/api/schedule_list.md @@ -0,0 +1,7 @@ +{% include "api/list_api_view.md" %} + +Schedule Details +================ +{% include "api/_schedule_detail.md" %} + + diff --git a/awx/api/templates/api/stdout.html b/awx/api/templates/api/stdout.html index e7b9559812..3e323f0ed3 100644 --- a/awx/api/templates/api/stdout.html +++ b/awx/api/templates/api/stdout.html @@ -13,22 +13,22 @@ .ansi3 { font-weight: italic; } .ansi4 { text-decoration: underline; } .ansi9 { text-decoration: line-through; } -.ansi30 { color: #000316; } -.ansi31 { color: #ff5850; } -.ansi32 { color: #60D66F; } -.ansi33 { color: #AA5500; } -.ansi34 { color: #0000AA; } -.ansi35 { color: #E850A8; } -.ansi36 { color: #00AAAA; } -.ansi37 { color: #F5F1DE; } -.ansi40 { background-color: #000000; } -.ansi41 { background-color: #ff5850; } -.ansi42 { background-color: #60D66F; } -.ansi43 { background-color: #AA5500; } -.ansi44 { background-color: #0000AA; } -.ansi45 { background-color: #E850A8; } -.ansi46 { background-color: #00AAAA; } -.ansi47 { background-color: #F5F1DE; } +.ansi30 { color: #161b1f; } +.ansi31 { color: #d9534f; } +.ansi32 { color: #5cb85c; } +.ansi33 { color: #f0ad4e; } +.ansi34 { color: #337ab7; } +.ansi35 { color: #e1539e; } +.ansi36 { color: #2dbaba; } +.ansi37 { color: #ffffff; } +.ansi40 { background-color: #161b1f; } +.ansi41 { background-color: #d9534f; } +.ansi42 { background-color: #5cb85c; } +.ansi43 { background-color: #f0ad4e; } +.ansi44 { background-color: #337ab7; } +.ansi45 { background-color: #e1539e; } +.ansi46 { background-color: #2dbaba; } +.ansi47 { background-color: #ffffff; } body.ansi_back pre { font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; @@ -47,4 +47,4 @@ div.ansi_back.ansi_dark {
{{ body }}
-{% endif %} \ No newline at end of file +{% endif %} diff --git a/awx/api/templates/api/sub_list_create_api_view.md b/awx/api/templates/api/sub_list_create_api_view.md index 23677f649b..74b91b5084 100644 --- a/awx/api/templates/api/sub_list_create_api_view.md +++ b/awx/api/templates/api/sub_list_create_api_view.md @@ -12,7 +12,7 @@ fields to create a new {{ model_verbose_name }} associated with this {% block post_create %}{% endblock %} -{% if view.attach %} +{% if has_attach|default:False %} {% if parent_key %} # Remove {{ parent_model_verbose_name|title }} {{ model_verbose_name_plural|title }}: @@ -34,7 +34,7 @@ existing {{ model_verbose_name }} with this {{ parent_model_verbose_name }}. Make a POST request to this resource with `id` and `disassociate` fields to remove the {{ model_verbose_name }} from this {{ parent_model_verbose_name }} -without deleting the {{ model_verbose_name }}. +{% if model_verbose_name != "label" %} without deleting the {{ model_verbose_name }}{% endif %}. {% endif %} {% endif %} diff --git a/awx/api/templates/api/system_job_template_launch.md b/awx/api/templates/api/system_job_template_launch.md index f918840d24..4543014005 100644 --- a/awx/api/templates/api/system_job_template_launch.md +++ b/awx/api/templates/api/system_job_template_launch.md @@ -5,7 +5,7 @@ Make a POST request to this resource to launch the system job template. An extra parameter `extra_vars` is suggested in order to pass extra parameters to the system job task. -For example on `cleanup_jobs`, `cleanup_deleted`, and `cleanup_activitystream`: +For example on `cleanup_jobs` and `cleanup_activitystream`: `{"days": 30}` diff --git a/awx/api/templates/api/team_roles_list.md b/awx/api/templates/api/team_roles_list.md new file mode 100644 index 0000000000..bf5bc24917 --- /dev/null +++ b/awx/api/templates/api/team_roles_list.md @@ -0,0 +1,12 @@ +# List Roles for this Team: + +Make a GET request to this resource to retrieve a list of roles associated with the selected team. + +{% include "api/_list_common.md" %} + +# Associate Roles with this Team: + +Make a POST request to this resource to add or remove a role from this team. The following fields may be modified: + + * `id`: The Role ID to add to the team. (int, required) + * `disassociate`: Provide if you want to remove the role. (any value, optional) diff --git a/awx/api/templates/api/user_roles_list.md b/awx/api/templates/api/user_roles_list.md new file mode 100644 index 0000000000..06c06cf1b3 --- /dev/null +++ b/awx/api/templates/api/user_roles_list.md @@ -0,0 +1,12 @@ +# List Roles for this User: + +Make a GET request to this resource to retrieve a list of roles associated with the selected user. + +{% include "api/_list_common.md" %} + +# Associate Roles with this User: + +Make a POST request to this resource to add or remove a role from this user. The following fields may be modified: + + * `id`: The Role ID to add to the user. (int, required) + * `disassociate`: Provide if you want to remove the role. (any value, optional) diff --git a/awx/api/templates/eula.md b/awx/api/templates/eula.md index 02a884eef2..83fb3ccb6e 100644 --- a/awx/api/templates/eula.md +++ b/awx/api/templates/eula.md @@ -1,20 +1,19 @@ -TOWER SOFTWARE END USER LICENSE AGREEMENT +ANSIBLE TOWER BY RED HAT END USER LICENSE AGREEMENT -Unless otherwise agreed to, and executed in a definitive agreement, between -Ansible, Inc. (“Ansible”) and the individual or entity (“Customer”) signing or -electronically accepting these terms of use for the Tower Software (“EULA”), -all Tower Software, including any and all versions released or made available -by Ansible, shall be subject to the Ansible Software Subscription and Services -Agreement found at www.ansible.com/subscription-agreement (“Agreement”). -Ansible is not responsible for any additional obligations, conditions or -warranties agreed to between Customer and an authorized distributor, or -reseller, of the Tower Software. BY DOWNLOADING AND USING THE TOWER SOFTWARE, -OR BY CLICKING ON THE “YES” BUTTON OR OTHER BUTTON OR MECHANISM DESIGNED TO -ACKNOWLEDGE CONSENT TO THE TERMS OF AN ELECTRONIC COPY OF THIS EULA, THE -CUSTOMER HEREBY ACKNOWLEDGES THAT CUSTOMER HAS READ, UNDERSTOOD, AND AGREES TO -BE BOUND BY THE TERMS OF THIS EULA AND AGREEMENT, INCLUDING ALL TERMS -INCORPORATED HEREIN BY REFERENCE, AND THAT THIS EULA AND AGREEMENT IS -EQUIVALENT TO ANY WRITTEN NEGOTIATED AGREEMENT BETWEEN CUSTOMER AND ANSIBLE. -THIS EULA AND AGREEMENT IS ENFORCEABLE AGAINST ANY PERSON OR ENTITY THAT USES -OR AVAILS ITSELF OF THE TOWER SOFTWARE OR ANY PERSON OR ENTITY THAT USES THE OR -AVAILS ITSELF OF THE TOWER SOFTWARE ON ANOTHER PERSON’S OR ENTITY’S BEHALF. +This end user license agreement (“EULA”) governs the use of the Ansible Tower software and any related updates, upgrades, versions, appearance, structure and organization (the “Ansible Tower Software”), regardless of the delivery mechanism. + +1. License Grant. Subject to the terms of this EULA, Red Hat, Inc. and its affiliates (“Red Hat”) grant to you (“You”) a non-transferable, non-exclusive, worldwide, non-sublicensable, limited, revocable license to use the Ansible Tower Software for the term of the associated Red Hat Software Subscription(s) and in a quantity equal to the number of Red Hat Software Subscriptions purchased from Red Hat for the Ansible Tower Software (“License”), each as set forth on the applicable Red Hat ordering document. You acquire only the right to use the Ansible Tower Software and do not acquire any rights of ownership. Red Hat reserves all rights to the Ansible Tower Software not expressly granted to You. This License grant pertains solely to Your use of the Ansible Tower Software and is not intended to limit Your rights under, or grant You rights that supersede, the license terms of any software packages which may be made available with the Ansible Tower Software that are subject to an open source software license. + +2. Intellectual Property Rights. Title to the Ansible Tower Software and each component, copy and modification, including all derivative works whether made by Red Hat, You or on Red Hat's behalf, including those made at Your suggestion and all associated intellectual property rights, are and shall remain the sole and exclusive property of Red Hat and/or it licensors. The License does not authorize You (nor may You allow any third party, specifically non-employees of Yours) to: (a) copy, distribute, reproduce, use or allow third party access to the Ansible Tower Software except as expressly authorized hereunder; (b) decompile, disassemble, reverse engineer, translate, modify, convert or apply any procedure or process to the Ansible Tower Software in order to ascertain, derive, and/or appropriate for any reason or purpose, including the Ansible Tower Software source code or source listings or any trade secret information or process contained in the Ansible Tower Software (except as permitted under applicable law); (c) execute or incorporate other software (except for approved software as appears in the Ansible Tower Software documentation or specifically approved by Red Hat in writing) into Ansible Tower Software, or create a derivative work of any part of the Ansible Tower Software; (d) remove any trademarks, trade names or titles, copyrights legends or any other proprietary marking on the Ansible Tower Software; (e) disclose the results of any benchmarking of the Ansible Tower Software (whether or not obtained with Red Hat’s assistance) to any third party; (f) attempt to circumvent any user limits or other license, timing or use restrictions that are built into, defined or agreed upon, regarding the Ansible Tower Software. You are hereby notified that the Ansible Tower Software may contain time-out devices, counter devices, and/or other devices intended to ensure the limits of the License will not be exceeded (“Limiting Devices”). If the Ansible Tower Software contains Limiting Devices, Red Hat will provide You materials necessary to use the Ansible Tower Software to the extent permitted. You may not tamper with or otherwise take any action to defeat or circumvent a Limiting Device or other control measure, including but not limited to, resetting the unit amount or using false host identification number for the purpose of extending any term of the License. + +3. Evaluation Licenses. Unless You have purchased Ansible Tower Software Subscriptions from Red Hat or an authorized reseller under the terms of a commercial agreement with Red Hat, all use of the Ansible Tower Software shall be limited to testing purposes and not for production use (“Evaluation”). Unless otherwise agreed by Red Hat, Evaluation of the Ansible Tower Software shall be limited to an evaluation environment and the Ansible Tower Software shall not be used to manage any systems or virtual machines on networks being used in the operation of Your business or any other non-evaluation purpose. Unless otherwise agreed by Red Hat, You shall limit all Evaluation use to a single 30 day evaluation period and shall not download or otherwise obtain additional copies of the Ansible Tower Software or license keys for Evaluation. + +4. Limited Warranty. Except as specifically stated in this Section 4, to the maximum extent permitted under applicable law, the Ansible Tower Software and the components are provided and licensed “as is” without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat warrants solely to You that the media on which the Ansible Tower Software may be furnished will be free from defects in materials and manufacture under normal use for a period of thirty (30) days from the date of delivery to You. Red Hat does not warrant that the functions contained in the Ansible Tower Software will meet Your requirements or that the operation of the Ansible Tower Software will be entirely error free, appear precisely as described in the accompanying documentation, or comply with regulatory requirements. + +5. Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Your exclusive remedy under this EULA is to return any defective media within thirty (30) days of delivery along with a copy of Your payment receipt and Red Hat, at its option, will replace it or refund the money paid by You for the media. To the maximum extent permitted under applicable law, neither Red Hat nor any Red Hat authorized distributor will be liable to You for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Ansible Tower Software or any component, even if Red Hat or the authorized distributor has been advised of the possibility of such damages. In no event shall Red Hat's liability or an authorized distributor’s liability exceed the amount that You paid to Red Hat for the Ansible Tower Software during the twelve months preceding the first event giving rise to liability. + +6. Export Control. In accordance with the laws of the United States and other countries, You represent and warrant that You: (a) understand that the Ansible Tower Software and its components may be subject to export controls under the U.S. Commerce Department’s Export Administration Regulations (“EAR”); (b) are not located in any country listed in Country Group E:1 in Supplement No. 1 to part 740 of the EAR; (c) will not export, re-export, or transfer the Ansible Tower Software to any prohibited destination or to any end user who has been prohibited from participating in US export transactions by any federal agency of the US government; (d) will not use or transfer the Ansible Tower Software for use in connection with the design, development or production of nuclear, chemical or biological weapons, or rocket systems, space launch vehicles, or sounding rockets or unmanned air vehicle systems; (e) understand and agree that if you are in the United States and you export or transfer the Ansible Tower Software to eligible end users, you will, to the extent required by EAR Section 740.17 obtain a license for such export or transfer and will submit semi-annual reports to the Commerce Department’s Bureau of Industry and Security, which include the name and address (including country) of each transferee; and (f) understand that countries including the United States may restrict the import, use, or export of encryption products (which may include the Ansible Tower Software) and agree that you shall be solely responsible for compliance with any such import, use, or export restrictions. + +7. General. If any provision of this EULA is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of New York and of the United States, without regard to any conflict of laws provisions. The rights and obligations of the parties to this EULA shall not be governed by the United Nations Convention on the International Sale of Goods. + +Copyright © 2015 Red Hat, Inc. All rights reserved. "Red Hat" and “Ansible Tower” are registered trademarks of Red Hat, Inc. All other trademarks are the property of their respective owners. diff --git a/awx/api/tests/__init__.py b/awx/api/tests/__init__.py deleted file mode 100644 index 3ed2a22d7d..0000000000 --- a/awx/api/tests/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -from __future__ import absolute_import - -from .decorator_paginated import PaginatedDecoratorTests # noqa -from .job_tasks import JobTasksTests # noqa diff --git a/awx/api/urls.py b/awx/api/urls.py index d177d6b9ba..19ecdd3e1b 100644 --- a/awx/api/urls.py +++ b/awx/api/urls.py @@ -19,7 +19,14 @@ organization_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/inventories/$', 'organization_inventories_list'), url(r'^(?P[0-9]+)/projects/$', 'organization_projects_list'), url(r'^(?P[0-9]+)/teams/$', 'organization_teams_list'), + url(r'^(?P[0-9]+)/credentials/$', 'organization_credential_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'organization_activity_stream_list'), + url(r'^(?P[0-9]+)/notification_templates/$', 'organization_notification_templates_list'), + url(r'^(?P[0-9]+)/notification_templates_any/$', 'organization_notification_templates_any_list'), + url(r'^(?P[0-9]+)/notification_templates_error/$', 'organization_notification_templates_error_list'), + url(r'^(?P[0-9]+)/notification_templates_success/$', 'organization_notification_templates_success_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'organization_object_roles_list'), + url(r'^(?P[0-9]+)/access_list/$', 'organization_access_list'), ) user_urls = patterns('awx.api.views', @@ -30,26 +37,33 @@ user_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/admin_of_organizations/$', 'user_admin_of_organizations_list'), url(r'^(?P[0-9]+)/projects/$', 'user_projects_list'), url(r'^(?P[0-9]+)/credentials/$', 'user_credentials_list'), - url(r'^(?P[0-9]+)/permissions/$', 'user_permissions_list'), + url(r'^(?P[0-9]+)/roles/$', 'user_roles_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'user_activity_stream_list'), + url(r'^(?P[0-9]+)/access_list/$', 'user_access_list'), + ) project_urls = patterns('awx.api.views', url(r'^$', 'project_list'), url(r'^(?P[0-9]+)/$', 'project_detail'), url(r'^(?P[0-9]+)/playbooks/$', 'project_playbooks'), - url(r'^(?P[0-9]+)/organizations/$', 'project_organizations_list'), url(r'^(?P[0-9]+)/teams/$', 'project_teams_list'), url(r'^(?P[0-9]+)/update/$', 'project_update_view'), url(r'^(?P[0-9]+)/project_updates/$', 'project_updates_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'project_activity_stream_list'), url(r'^(?P[0-9]+)/schedules/$', 'project_schedules_list'), + url(r'^(?P[0-9]+)/notification_templates_any/$', 'project_notification_templates_any_list'), + url(r'^(?P[0-9]+)/notification_templates_error/$', 'project_notification_templates_error_list'), + url(r'^(?P[0-9]+)/notification_templates_success/$', 'project_notification_templates_success_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'project_object_roles_list'), + url(r'^(?P[0-9]+)/access_list/$', 'project_access_list'), ) project_update_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/$', 'project_update_detail'), url(r'^(?P[0-9]+)/cancel/$', 'project_update_cancel'), url(r'^(?P[0-9]+)/stdout/$', 'project_update_stdout'), + url(r'^(?P[0-9]+)/notifications/$', 'project_update_notifications_list'), ) team_urls = patterns('awx.api.views', @@ -58,8 +72,10 @@ team_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/projects/$', 'team_projects_list'), url(r'^(?P[0-9]+)/users/$', 'team_users_list'), url(r'^(?P[0-9]+)/credentials/$', 'team_credentials_list'), - url(r'^(?P[0-9]+)/permissions/$', 'team_permissions_list'), + url(r'^(?P[0-9]+)/roles/$', 'team_roles_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'team_object_roles_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'team_activity_stream_list'), + url(r'^(?P[0-9]+)/access_list/$', 'team_access_list'), ) inventory_urls = patterns('awx.api.views', @@ -73,8 +89,11 @@ inventory_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/tree/$', 'inventory_tree_view'), url(r'^(?P[0-9]+)/inventory_sources/$', 'inventory_inventory_sources_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'inventory_activity_stream_list'), + url(r'^(?P[0-9]+)/job_templates/$', 'inventory_job_template_list'), url(r'^(?P[0-9]+)/scan_job_templates/$', 'inventory_scan_job_template_list'), url(r'^(?P[0-9]+)/ad_hoc_commands/$', 'inventory_ad_hoc_commands_list'), + url(r'^(?P[0-9]+)/access_list/$', 'inventory_access_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'inventory_object_roles_list'), #url(r'^(?P[0-9]+)/single_fact/$', 'inventory_single_fact_view'), ) @@ -91,8 +110,8 @@ host_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/ad_hoc_commands/$', 'host_ad_hoc_commands_list'), url(r'^(?P[0-9]+)/ad_hoc_command_events/$', 'host_ad_hoc_command_events_list'), #url(r'^(?P[0-9]+)/single_fact/$', 'host_single_fact_view'), - url(r'^(?P[0-9]+)/fact_versions/$', 'host_fact_versions_list'), - url(r'^(?P[0-9]+)/fact_view/$', 'host_fact_compare_view'), + url(r'^(?P[0-9]+)/fact_versions/$', 'host_fact_versions_list'), + url(r'^(?P[0-9]+)/fact_view/$', 'host_fact_compare_view'), ) group_urls = patterns('awx.api.views', @@ -120,39 +139,59 @@ inventory_source_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/schedules/$', 'inventory_source_schedules_list'), url(r'^(?P[0-9]+)/groups/$', 'inventory_source_groups_list'), url(r'^(?P[0-9]+)/hosts/$', 'inventory_source_hosts_list'), + url(r'^(?P[0-9]+)/notification_templates_any/$', 'inventory_source_notification_templates_any_list'), + url(r'^(?P[0-9]+)/notification_templates_error/$', 'inventory_source_notification_templates_error_list'), + url(r'^(?P[0-9]+)/notification_templates_success/$', 'inventory_source_notification_templates_success_list'), ) inventory_update_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/$', 'inventory_update_detail'), url(r'^(?P[0-9]+)/cancel/$', 'inventory_update_cancel'), url(r'^(?P[0-9]+)/stdout/$', 'inventory_update_stdout'), + url(r'^(?P[0-9]+)/notifications/$', 'inventory_update_notifications_list'), ) inventory_script_urls = patterns('awx.api.views', url(r'^$', 'inventory_script_list'), url(r'^(?P[0-9]+)/$', 'inventory_script_detail'), + url(r'^(?P[0-9]+)/object_roles/$', 'inventory_script_object_roles_list'), ) credential_urls = patterns('awx.api.views', url(r'^$', 'credential_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'credential_activity_stream_list'), url(r'^(?P[0-9]+)/$', 'credential_detail'), + url(r'^(?P[0-9]+)/access_list/$', 'credential_access_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'credential_object_roles_list'), + url(r'^(?P[0-9]+)/owner_users/$', 'credential_owner_users_list'), + url(r'^(?P[0-9]+)/owner_teams/$', 'credential_owner_teams_list'), # See also credentials resources on users/teams. ) -permission_urls = patterns('awx.api.views', - url(r'^(?P[0-9]+)/$', 'permission_detail'), +role_urls = patterns('awx.api.views', + url(r'^$', 'role_list'), + url(r'^(?P[0-9]+)/$', 'role_detail'), + url(r'^(?P[0-9]+)/users/$', 'role_users_list'), + url(r'^(?P[0-9]+)/teams/$', 'role_teams_list'), + url(r'^(?P[0-9]+)/parents/$', 'role_parents_list'), + url(r'^(?P[0-9]+)/children/$', 'role_children_list'), ) job_template_urls = patterns('awx.api.views', url(r'^$', 'job_template_list'), url(r'^(?P[0-9]+)/$', 'job_template_detail'), - url(r'^(?P[0-9]+)/launch/$', 'job_template_launch'), + url(r'^(?P[0-9]+)/launch/$', 'job_template_launch'), url(r'^(?P[0-9]+)/jobs/$', 'job_template_jobs_list'), url(r'^(?P[0-9]+)/callback/$', 'job_template_callback'), url(r'^(?P[0-9]+)/schedules/$', 'job_template_schedules_list'), url(r'^(?P[0-9]+)/survey_spec/$', 'job_template_survey_spec'), url(r'^(?P[0-9]+)/activity_stream/$', 'job_template_activity_stream_list'), + url(r'^(?P[0-9]+)/notification_templates_any/$', 'job_template_notification_templates_any_list'), + url(r'^(?P[0-9]+)/notification_templates_error/$', 'job_template_notification_templates_error_list'), + url(r'^(?P[0-9]+)/notification_templates_success/$', 'job_template_notification_templates_success_list'), + url(r'^(?P[0-9]+)/access_list/$', 'job_template_access_list'), + url(r'^(?P[0-9]+)/object_roles/$', 'job_template_object_roles_list'), + url(r'^(?P[0-9]+)/labels/$', 'job_template_label_list'), ) job_urls = patterns('awx.api.views', @@ -167,6 +206,8 @@ job_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/job_tasks/$', 'job_job_tasks_list'), url(r'^(?P[0-9]+)/activity_stream/$', 'job_activity_stream_list'), url(r'^(?P[0-9]+)/stdout/$', 'job_stdout'), + url(r'^(?P[0-9]+)/notifications/$', 'job_notifications_list'), + url(r'^(?P[0-9]+)/labels/$', 'job_label_list'), ) job_host_summary_urls = patterns('awx.api.views', @@ -201,12 +242,33 @@ system_job_template_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/launch/$', 'system_job_template_launch'), url(r'^(?P[0-9]+)/jobs/$', 'system_job_template_jobs_list'), url(r'^(?P[0-9]+)/schedules/$', 'system_job_template_schedules_list'), + url(r'^(?P[0-9]+)/notification_templates_any/$', 'system_job_template_notification_templates_any_list'), + url(r'^(?P[0-9]+)/notification_templates_error/$', 'system_job_template_notification_templates_error_list'), + url(r'^(?P[0-9]+)/notification_templates_success/$', 'system_job_template_notification_templates_success_list'), ) system_job_urls = patterns('awx.api.views', url(r'^$', 'system_job_list'), url(r'^(?P[0-9]+)/$', 'system_job_detail'), url(r'^(?P[0-9]+)/cancel/$', 'system_job_cancel'), + url(r'^(?P[0-9]+)/notifications/$', 'system_job_notifications_list'), +) + +notification_template_urls = patterns('awx.api.views', + url(r'^$', 'notification_template_list'), + url(r'^(?P[0-9]+)/$', 'notification_template_detail'), + url(r'^(?P[0-9]+)/test/$', 'notification_template_test'), + url(r'^(?P[0-9]+)/notifications/$', 'notification_template_notification_list'), +) + +notification_urls = patterns('awx.api.views', + url(r'^$', 'notification_list'), + url(r'^(?P[0-9]+)/$', 'notification_detail'), +) + +label_urls = patterns('awx.api.views', + url(r'^$', 'label_list'), + url(r'^(?P[0-9]+)/$', 'label_detail'), ) schedule_urls = patterns('awx.api.views', @@ -220,6 +282,10 @@ activity_stream_urls = patterns('awx.api.views', url(r'^(?P[0-9]+)/$', 'activity_stream_detail'), ) +settings_urls = patterns('awx.api.views', + url(r'^$', 'settings_list'), + url(r'^reset/$', 'settings_reset')) + v1_urls = patterns('awx.api.views', url(r'^$', 'api_v1_root_view'), url(r'^ping/$', 'api_v1_ping_view'), @@ -228,9 +294,10 @@ v1_urls = patterns('awx.api.views', url(r'^authtoken/$', 'auth_token_view'), url(r'^me/$', 'user_me_list'), url(r'^dashboard/$', 'dashboard_view'), - url(r'^dashboard/graphs/jobs/$', 'dashboard_jobs_graph_view'), - url(r'^dashboard/graphs/inventory/$', 'dashboard_inventory_graph_view'), - url(r'^schedules/', include(schedule_urls)), + url(r'^dashboard/graphs/jobs/$','dashboard_jobs_graph_view'), + # TODO: Uncomment aftger 3.0 when we bring database settings endpoints back + # url(r'^settings/', include(settings_urls)), + url(r'^schedules/', include(schedule_urls)), url(r'^organizations/', include(organization_urls)), url(r'^users/', include(user_urls)), url(r'^projects/', include(project_urls)), @@ -243,7 +310,7 @@ v1_urls = patterns('awx.api.views', url(r'^inventory_updates/', include(inventory_update_urls)), url(r'^inventory_scripts/', include(inventory_script_urls)), url(r'^credentials/', include(credential_urls)), - url(r'^permissions/', include(permission_urls)), + url(r'^roles/', include(role_urls)), url(r'^job_templates/', include(job_template_urls)), url(r'^jobs/', include(job_urls)), url(r'^job_host_summaries/', include(job_host_summary_urls)), @@ -252,7 +319,10 @@ v1_urls = patterns('awx.api.views', url(r'^ad_hoc_command_events/', include(ad_hoc_command_event_urls)), url(r'^system_job_templates/', include(system_job_template_urls)), url(r'^system_jobs/', include(system_job_urls)), - url(r'^unified_job_templates/$', 'unified_job_template_list'), + url(r'^notification_templates/', include(notification_template_urls)), + url(r'^notifications/', include(notification_urls)), + url(r'^labels/', include(label_urls)), + url(r'^unified_job_templates/$','unified_job_template_list'), url(r'^unified_jobs/$', 'unified_job_list'), url(r'^activity_stream/', include(activity_stream_urls)), ) diff --git a/awx/api/utils/decorators.py b/awx/api/utils/decorators.py index 8b25c25baf..223125597c 100644 --- a/awx/api/utils/decorators.py +++ b/awx/api/utils/decorators.py @@ -1,7 +1,7 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. -from ordereddict import OrderedDict +from collections import OrderedDict import copy import functools @@ -23,21 +23,22 @@ def paginated(method): def func(self, request, *args, **kwargs): # Manually spin up pagination. # How many results do we show? - limit = api_settings.PAGINATE_BY - if request.QUERY_PARAMS.get(api_settings.PAGINATE_BY_PARAM, False): - limit = request.QUERY_PARAMS[api_settings.PAGINATE_BY_PARAM] - if api_settings.MAX_PAGINATE_BY: - limit = min(api_settings.MAX_PAGINATE_BY, limit) + paginator_class = api_settings.DEFAULT_PAGINATION_CLASS + limit = paginator_class.page_size + if request.query_params.get(paginator_class.page_size_query_param, False): + limit = request.query_params[paginator_class.page_size_query_param] + if paginator_class.max_page_size: + limit = min(paginator_class.max_page_size, limit) limit = int(limit) # Get the order parameter if it's given - if request.QUERY_PARAMS.get("ordering", False): - ordering = request.QUERY_PARAMS["ordering"] + if request.query_params.get("ordering", False): + ordering = request.query_params["ordering"] else: ordering = None # What page are we on? - page = int(request.QUERY_PARAMS.get('page', 1)) + page = int(request.query_params.get('page', 1)) offset = (page - 1) * limit # Add the limit, offset, page, and order variables to the keyword arguments diff --git a/awx/api/views.py b/awx/api/views.py index c6f89bd116..11ae8f6766 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -11,7 +11,9 @@ import time import socket import sys import errno +import logging from base64 import b64encode +from collections import OrderedDict # Django from django.conf import settings @@ -21,26 +23,28 @@ from django.core.exceptions import FieldError from django.db.models import Q, Count from django.db import IntegrityError, transaction from django.shortcuts import get_object_or_404 -from django.utils.datastructures import SortedDict +from django.utils.encoding import smart_text, force_text from django.utils.safestring import mark_safe from django.utils.timezone import now from django.views.decorators.csrf import csrf_exempt from django.template.loader import render_to_string from django.core.servers.basehttp import FileWrapper from django.http import HttpResponse +from django.contrib.contenttypes.models import ContentType + # Django REST Framework from rest_framework.exceptions import PermissionDenied, ParseError -from rest_framework.parsers import YAMLParser +from rest_framework.parsers import FormParser from rest_framework.permissions import AllowAny, IsAuthenticated -from rest_framework.renderers import YAMLRenderer from rest_framework.response import Response from rest_framework.settings import api_settings from rest_framework.views import exception_handler from rest_framework import status -# MongoEngine -import mongoengine +# Django REST Framework YAML +from rest_framework_yaml.parsers import YAMLParser +from rest_framework_yaml.renderers import YAMLRenderer # QSStats import qsstats @@ -53,12 +57,11 @@ from social.backends.utils import load_backends # AWX from awx.main.task_engine import TaskSerializer, TASK_FILE, TEMPORARY_TASK_FILE -from awx.main.tasks import mongodb_control +from awx.main.tasks import send_notifications from awx.main.access import get_user_queryset from awx.main.ha import is_ha_environment from awx.api.authentication import TaskAuthentication, TokenGetAuthentication from awx.api.utils.decorators import paginated -from awx.api.filters import MongoFilterBackend from awx.api.generics import get_view_name from awx.api.generics import * # noqa from awx.api.license import feature_enabled, feature_exists, LicenseForbids @@ -67,10 +70,13 @@ from awx.main.utils import * # noqa from awx.api.permissions import * # noqa from awx.api.renderers import * # noqa from awx.api.serializers import * # noqa -from awx.fact.models import * # noqa +from awx.api.metadata import RoleMetadata from awx.main.utils import emit_websocket_notification +from awx.main.conf import tower_settings -def api_exception_handler(exc): +logger = logging.getLogger('awx.api.views') + +def api_exception_handler(exc, context): ''' Override default API exception handler to catch IntegrityError exceptions. ''' @@ -78,8 +84,7 @@ def api_exception_handler(exc): exc = ParseError(exc.args[0]) if isinstance(exc, FieldError): exc = ParseError(exc.args[0]) - return exception_handler(exc) - + return exception_handler(exc, context) class ApiRootView(APIView): @@ -109,10 +114,12 @@ class ApiV1RootView(APIView): def get(self, request, format=None): ''' list top level resources ''' - data = SortedDict() + data = OrderedDict() data['authtoken'] = reverse('api:auth_token_view') data['ping'] = reverse('api:api_v1_ping_view') data['config'] = reverse('api:api_v1_config_view') + # TODO: Uncomment after 3.0 when we bring database settings endpoints back + # data['settings'] = reverse('api:settings_list') data['me'] = reverse('api:user_me_list') data['dashboard'] = reverse('api:dashboard_view') data['organizations'] = reverse('api:organization_list') @@ -127,10 +134,15 @@ class ApiV1RootView(APIView): data['hosts'] = reverse('api:host_list') data['job_templates'] = reverse('api:job_template_list') data['jobs'] = reverse('api:job_list') + data['job_events'] = reverse('api:job_event_list') data['ad_hoc_commands'] = reverse('api:ad_hoc_command_list') data['system_job_templates'] = reverse('api:system_job_template_list') data['system_jobs'] = reverse('api:system_job_list') data['schedules'] = reverse('api:schedule_list') + data['roles'] = reverse('api:role_list') + data['notification_templates'] = reverse('api:notification_template_list') + data['notifications'] = reverse('api:notification_list') + data['labels'] = reverse('api:label_list') data['unified_job_templates'] = reverse('api:unified_job_template_list') data['unified_jobs'] = reverse('api:unified_job_list') data['activity_stream'] = reverse('api:activity_stream_list') @@ -189,9 +201,11 @@ class ApiV1ConfigView(APIView): '''Return various sitewide configuration settings.''' license_reader = TaskSerializer() - license_data = license_reader.from_file(show_key=request.user.is_superuser) + license_data = license_reader.from_database(show_key=request.user.is_superuser) + if license_data and 'features' in license_data and 'activity_streams' in license_data['features']: + license_data['features']['activity_streams'] &= tower_settings.ACTIVITY_STREAM_ENABLED - pendo_state = settings.PENDO_TRACKING_STATE if settings.PENDO_TRACKING_STATE in ('off', 'anonymous', 'detailed') else 'off' + pendo_state = tower_settings.PENDO_TRACKING_STATE if tower_settings.PENDO_TRACKING_STATE in ('off', 'anonymous', 'detailed') else 'off' data = dict( time_zone=settings.TIME_ZONE, @@ -211,7 +225,7 @@ class ApiV1ConfigView(APIView): user_ldap_fields.extend(getattr(settings, 'AUTH_LDAP_USER_FLAGS_BY_GROUP', {}).keys()) data['user_ldap_fields'] = user_ldap_fields - if request.user.is_superuser or request.user.admin_of_organizations.filter(active=True).count(): + if request.user.is_superuser or Organization.accessible_objects(request.user, 'admin_role').exists(): data.update(dict( project_base_dir = settings.PROJECTS_ROOT, project_local_paths = Project.get_local_path_choices(), @@ -222,20 +236,20 @@ class ApiV1ConfigView(APIView): def post(self, request): if not request.user.is_superuser: return Response(None, status=status.HTTP_404_NOT_FOUND) - if not type(request.DATA) == dict: + if not isinstance(request.data, dict): return Response({"error": "Invalid license data"}, status=status.HTTP_400_BAD_REQUEST) - if "eula_accepted" not in request.DATA: + if "eula_accepted" not in request.data: return Response({"error": "Missing 'eula_accepted' property"}, status=status.HTTP_400_BAD_REQUEST) try: - eula_accepted = to_python_boolean(request.DATA["eula_accepted"]) + eula_accepted = to_python_boolean(request.data["eula_accepted"]) except ValueError: return Response({"error": "'eula_accepted' value is invalid"}, status=status.HTTP_400_BAD_REQUEST) if not eula_accepted: return Response({"error": "'eula_accepted' must be True"}, status=status.HTTP_400_BAD_REQUEST) - request.DATA.pop("eula_accepted") + request.data.pop("eula_accepted") try: - data_actual = json.dumps(request.DATA) + data_actual = json.dumps(request.data) except Exception: # FIX: Log return Response({"error": "Invalid JSON"}, status=status.HTTP_400_BAD_REQUEST) @@ -246,34 +260,12 @@ class ApiV1ConfigView(APIView): # FIX: Log return Response({"error": "Invalid License"}, status=status.HTTP_400_BAD_REQUEST) - # Sanity check: If this license includes system tracking, make - # sure that we have a valid MongoDB to point to, and complain if - # we do not. - if ('features' in license_data and 'system_tracking' in license_data['features'] and - license_data['features']['system_tracking'] and settings.MONGO_HOST == NotImplemented): - return Response({ - 'error': 'This license supports system tracking, which ' - 'requires MongoDB to be installed. Since you are ' - 'running in an HA environment, you will need to ' - 'provide a MongoDB instance. Please re-run the ' - 'installer prior to installing this license.' - }, status=status.HTTP_400_BAD_REQUEST) - # If the license is valid, write it to disk. if license_data['valid_key']: - fh = open(TASK_FILE, "w") - fh.write(data_actual) - fh.close() - - # Spawn a task to ensure that MongoDB is started (or stopped) - # as appropriate, based on whether the license uses it. - if license_data['features']['system_tracking']: - mongodb_control.delay('start') - else: - mongodb_control.delay('stop') - - # Done; return the response. + tower_settings.LICENSE = data_actual + tower_settings.TOWER_URL_BASE = "{}://{}".format(request.scheme, request.get_host()) return Response(license_data) + return Response({"error": "Invalid license"}, status=status.HTTP_400_BAD_REQUEST) def delete(self, request): @@ -285,14 +277,15 @@ class ApiV1ConfigView(APIView): for fname in (TEMPORARY_TASK_FILE, TASK_FILE): try: os.remove(fname) - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: has_error = e.errno break + TowerSettings.objects.filter(key="LICENSE").delete() + # Only stop mongod if license removal succeeded if has_error is None: - mongodb_control.delay('stop') return Response(status=status.HTTP_204_NO_CONTENT) else: return Response({"error": "Failed to remove license (%s)" % has_error}, status=status.HTTP_400_BAD_REQUEST) @@ -304,9 +297,8 @@ class DashboardView(APIView): def get(self, request, format=None): ''' Show Dashboard Details ''' - data = SortedDict() - data['related'] = {'jobs_graph': reverse('api:dashboard_jobs_graph_view'), - 'inventory_graph': reverse('api:dashboard_inventory_graph_view')} + data = OrderedDict() + data['related'] = {'jobs_graph': reverse('api:dashboard_jobs_graph_view')} user_inventory = get_user_queryset(request.user, Inventory) inventory_with_failed_hosts = user_inventory.filter(hosts_with_active_failures__gt=0) user_inventory_external = user_inventory.filter(has_inventory_sources=True) @@ -409,8 +401,8 @@ class DashboardJobsGraphView(APIView): new_in_200 = True def get(self, request, format=None): - period = request.QUERY_PARAMS.get('period', 'month') - job_type = request.QUERY_PARAMS.get('job_type', 'all') + period = request.query_params.get('period', 'month') + job_type = request.query_params.get('job_type', 'all') user_unified_jobs = get_user_queryset(request.user, UnifiedJob) @@ -452,49 +444,6 @@ class DashboardJobsGraphView(APIView): element[1]]) return Response(dashboard_data) -class DashboardInventoryGraphView(APIView): - - view_name = "Dashboard Inventory Graphs" - new_in_200 = True - - def get(self, request, format=None): - period = request.QUERY_PARAMS.get('period', 'month') - - end_date = now() - if period == 'month': - start_date = end_date - dateutil.relativedelta.relativedelta(months=1) - start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0) - delta = dateutil.relativedelta.relativedelta(days=1) - elif period == 'week': - start_date = end_date - dateutil.relativedelta.relativedelta(weeks=1) - start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0) - delta = dateutil.relativedelta.relativedelta(days=1) - elif period == 'day': - start_date = end_date - dateutil.relativedelta.relativedelta(days=1) - start_date = start_date.replace(minute=0, second=0, microsecond=0) - delta = dateutil.relativedelta.relativedelta(hours=1) - else: - raise ParseError(u'Unknown period "%s"' % unicode(period)) - - host_stats = [] - date = start_date - while date < end_date: - next_date = date + delta - # Find all hosts that existed at end of intevral that are still - # active or were deleted after the end of interval. Slow but - # accurate; haven't yet found a better way to do it. - hosts_qs = Host.objects.filter(created__lt=next_date) - hosts_qs = hosts_qs.filter(Q(active=True) | Q(active=False, modified__gte=next_date)) - hostnames = set() - for name, active in hosts_qs.values_list('name', 'active').iterator(): - if not active: - name = re.sub(r'^_deleted_.*?_', '', name) - hostnames.add(name) - host_stats.append((time.mktime(date.timetuple()), len(hostnames))) - date = next_date - - return Response({'hosts': host_stats}) - class ScheduleList(ListAPIView): @@ -525,7 +474,7 @@ class AuthView(APIView): new_in_240 = True def get(self, request): - data = SortedDict() + data = OrderedDict() err_backend, err_message = request.session.get('social_auth_error', (None, None)) auth_backends = load_backends(settings.AUTHENTICATION_BACKENDS).items() # Return auth backends in consistent order: Google, GitHub, SAML. @@ -564,44 +513,149 @@ class AuthTokenView(APIView): serializer_class = AuthTokenSerializer model = AuthToken + def get_serializer(self, *args, **kwargs): + serializer = self.serializer_class(*args, **kwargs) + # Override when called from browsable API to generate raw data form; + # update serializer "validated" data to be displayed by the raw data + # form. + if hasattr(self, '_raw_data_form_marker'): + # Always remove read only fields from serializer. + for name, field in serializer.fields.items(): + if getattr(field, 'read_only', None): + del serializer.fields[name] + serializer._data = self.update_raw_data(serializer.data) + return serializer + def post(self, request): - serializer = self.serializer_class(data=request.DATA) + serializer = self.get_serializer(data=request.data) if serializer.is_valid(): request_hash = AuthToken.get_request_hash(self.request) try: - token = AuthToken.objects.filter(user=serializer.object['user'], + token = AuthToken.objects.filter(user=serializer.validated_data['user'], request_hash=request_hash, expires__gt=now(), reason='')[0] token.refresh() + if 'username' in request.data: + logger.info(smart_text(u"User {} logged in".format(request.data['username']))) except IndexError: - token = AuthToken.objects.create(user=serializer.object['user'], + token = AuthToken.objects.create(user=serializer.validated_data['user'], request_hash=request_hash) - # Get user un-expired tokens that are not invalidated that are + if 'username' in request.data: + logger.info(smart_text(u"User {} logged in".format(request.data['username']))) + # Get user un-expired tokens that are not invalidated that are # over the configured limit. # Mark them as invalid and inform the user - invalid_tokens = AuthToken.get_tokens_over_limit(serializer.object['user']) + invalid_tokens = AuthToken.get_tokens_over_limit(serializer.validated_data['user']) for t in invalid_tokens: # TODO: send socket notification emit_websocket_notification('/socket.io/control', 'limit_reached', - dict(reason=unicode(AuthToken.reason_long('limit_reached'))), + dict(reason=force_text(AuthToken.reason_long('limit_reached'))), token_key=t.key) t.invalidate(reason='limit_reached') # Note: This header is normally added in the middleware whenever an # auth token is included in the request header. headers = { - 'Auth-Token-Timeout': int(settings.AUTH_TOKEN_EXPIRATION) + 'Auth-Token-Timeout': int(tower_settings.AUTH_TOKEN_EXPIRATION) } return Response({'token': token.key, 'expires': token.expires}, headers=headers) + if 'username' in request.data: + logger.warning(smart_text(u"Login failed for user {}".format(request.data['username']))) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) -class OrganizationList(ListCreateAPIView): +class OrganizationCountsMixin(object): + + def get_serializer_context(self, *args, **kwargs): + full_context = super(OrganizationCountsMixin, self).get_serializer_context(*args, **kwargs) + + if self.request is None: + return full_context + + db_results = {} + org_qs = self.model.accessible_objects(self.request.user, 'read_role') + org_id_list = org_qs.values('id') + if len(org_id_list) == 0: + if self.request.method == 'POST': + full_context['related_field_counts'] = {} + return full_context + + inv_qs = Inventory.accessible_objects(self.request.user, 'read_role') + project_qs = Project.accessible_objects(self.request.user, 'read_role') + + # Produce counts of Foreign Key relationships + db_results['inventories'] = inv_qs\ + .values('organization').annotate(Count('organization')).order_by('organization') + + db_results['teams'] = Team.accessible_objects( + self.request.user, 'read_role').values('organization').annotate( + Count('organization')).order_by('organization') + + JT_reference = 'project__organization' + db_results['job_templates'] = JobTemplate.accessible_objects( + self.request.user, 'read_role').exclude(job_type='scan').values(JT_reference).annotate( + Count(JT_reference)).order_by(JT_reference) + + JT_scan_reference = 'inventory__organization' + db_results['job_templates_scan'] = JobTemplate.accessible_objects( + self.request.user, 'read_role').filter(job_type='scan').values(JT_scan_reference).annotate( + Count(JT_scan_reference)).order_by(JT_scan_reference) + + db_results['projects'] = project_qs\ + .values('organization').annotate(Count('organization')).order_by('organization') + + # Other members and admins of organization are always viewable + db_results['users'] = org_qs.annotate( + users=Count('member_role__members', distinct=True), + admins=Count('admin_role__members', distinct=True) + ).values('id', 'users', 'admins') + + count_context = {} + for org in org_id_list: + org_id = org['id'] + count_context[org_id] = { + 'inventories': 0, 'teams': 0, 'users': 0, 'job_templates': 0, + 'admins': 0, 'projects': 0} + + for res in db_results: + if res == 'job_templates': + org_reference = JT_reference + elif res == 'job_templates_scan': + org_reference = JT_scan_reference + elif res == 'users': + org_reference = 'id' + else: + org_reference = 'organization' + for entry in db_results[res]: + org_id = entry[org_reference] + if org_id in count_context: + if res == 'users': + count_context[org_id]['admins'] = entry['admins'] + count_context[org_id]['users'] = entry['users'] + continue + count_context[org_id][res] = entry['%s__count' % org_reference] + + # Combine the counts for job templates with scan job templates + for org in org_id_list: + org_id = org['id'] + if 'job_templates_scan' in count_context[org_id]: + count_context[org_id]['job_templates'] += count_context[org_id].pop('job_templates_scan') + + full_context['related_field_counts'] = count_context + + return full_context + +class OrganizationList(OrganizationCountsMixin, ListCreateAPIView): model = Organization serializer_class = OrganizationSerializer + def get_queryset(self): + qs = Organization.accessible_objects(self.request.user, 'read_role') + qs = qs.select_related('admin_role', 'auditor_role', 'member_role', 'read_role') + return qs + def create(self, request, *args, **kwargs): """Create a new organzation. @@ -613,7 +667,7 @@ class OrganizationList(ListCreateAPIView): # by the license, then we are only willing to create this organization # if no organizations exist in the system. if (not feature_enabled('multiple_organizations') and - self.model.objects.filter(active=True).count() > 0): + self.model.objects.exists()): raise LicenseForbids('Your Tower license only permits a single ' 'organization to exist.') @@ -625,6 +679,40 @@ class OrganizationDetail(RetrieveUpdateDestroyAPIView): model = Organization serializer_class = OrganizationSerializer + def get_serializer_context(self, *args, **kwargs): + full_context = super(OrganizationDetail, self).get_serializer_context(*args, **kwargs) + + if not hasattr(self, 'kwargs'): + return full_context + org_id = int(self.kwargs['pk']) + + org_counts = {} + access_kwargs = {'accessor': self.request.user, 'role_field': 'read_role'} + direct_counts = Organization.objects.filter(id=org_id).annotate( + users=Count('member_role__members', distinct=True), + admins=Count('admin_role__members', distinct=True) + ).values('users', 'admins') + + if not direct_counts: + return full_context + + org_counts = direct_counts[0] + org_counts['inventories'] = Inventory.accessible_objects(**access_kwargs).filter( + organization__id=org_id).count() + org_counts['teams'] = Team.accessible_objects(**access_kwargs).filter( + organization__id=org_id).count() + org_counts['projects'] = Project.accessible_objects(**access_kwargs).filter( + organization__id=org_id).count() + org_counts['job_templates'] = JobTemplate.accessible_objects(**access_kwargs).exclude( + job_type='scan').filter(project__organization__id=org_id).count() + org_counts['job_templates'] += JobTemplate.accessible_objects(**access_kwargs).filter( + job_type='scan').filter(inventory__organization__id=org_id).count() + + full_context['related_field_counts'] = {} + full_context['related_field_counts'][org_id] = org_counts + + return full_context + class OrganizationInventoriesList(SubListAPIView): model = Inventory @@ -632,19 +720,36 @@ class OrganizationInventoriesList(SubListAPIView): parent_model = Organization relationship = 'inventories' -class OrganizationUsersList(SubListCreateAttachDetachAPIView): + +class BaseUsersList(SubListCreateAttachDetachAPIView): + def post(self, request, *args, **kwargs): + ret = super(BaseUsersList, self).post( request, *args, **kwargs) + try: + if request.data.get('is_system_auditor', False): + # This is a faux-field that just maps to checking the system + # auditor role member list.. unfortunately this means we can't + # set it on creation, and thus needs to be set here. + user = User.objects.get(id=ret.data['id']) + user.is_system_auditor = request.data['is_system_auditor'] + ret.data['is_system_auditor'] = request.data['is_system_auditor'] + except AttributeError as exc: + print(exc) + pass + return ret + +class OrganizationUsersList(BaseUsersList): model = User serializer_class = UserSerializer parent_model = Organization - relationship = 'users' + relationship = 'member_role.members' -class OrganizationAdminsList(SubListCreateAttachDetachAPIView): +class OrganizationAdminsList(BaseUsersList): model = User serializer_class = UserSerializer parent_model = Organization - relationship = 'admins' + relationship = 'admin_role.members' class OrganizationProjectsList(SubListCreateAttachDetachAPIView): @@ -652,6 +757,7 @@ class OrganizationProjectsList(SubListCreateAttachDetachAPIView): serializer_class = ProjectSerializer parent_model = Organization relationship = 'projects' + parent_key = 'organization' class OrganizationTeamsList(SubListCreateAttachDetachAPIView): @@ -677,58 +783,135 @@ class OrganizationActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(OrganizationActivityStreamList, self).get(request, *args, **kwargs) + +class OrganizationNotificationTemplatesList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Organization + relationship = 'notification_templates' + parent_key = 'organization' + +class OrganizationNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Organization + relationship = 'notification_templates_any' + +class OrganizationNotificationTemplatesErrorList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Organization + relationship = 'notification_templates_error' + +class OrganizationNotificationTemplatesSuccessList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Organization + relationship = 'notification_templates_success' + +class OrganizationAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = Organization + new_in_300 = True + +class OrganizationObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Organization + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) class TeamList(ListCreateAPIView): model = Team serializer_class = TeamSerializer + def get_queryset(self): + qs = Team.accessible_objects(self.request.user, 'read_role').order_by() + qs = qs.select_related('admin_role', 'read_role', 'member_role', 'organization') + return qs + class TeamDetail(RetrieveUpdateDestroyAPIView): model = Team serializer_class = TeamSerializer -class TeamUsersList(SubListCreateAttachDetachAPIView): +class TeamUsersList(BaseUsersList): model = User serializer_class = UserSerializer parent_model = Team - relationship = 'users' + relationship = 'member_role.members' -class TeamPermissionsList(SubListCreateAttachDetachAPIView): - model = Permission - serializer_class = PermissionSerializer +class TeamRolesList(SubListCreateAttachDetachAPIView): + + model = Role + serializer_class = RoleSerializer + metadata_class = RoleMetadata parent_model = Team - relationship = 'permissions' - parent_key = 'team' + relationship='member_role.children' def get_queryset(self): - # FIXME: Default get_queryset should handle this. - team = Team.objects.get(pk=self.kwargs['pk']) - base = Permission.objects.filter(team = team) - #if Team.can_user_administrate(self.request.user, team, None): - if self.request.user.can_access(Team, 'change', team, None): - return base - elif team.users.filter(pk=self.request.user.pk).count() > 0: - return base - raise PermissionDenied() + team = get_object_or_404(Team, pk=self.kwargs['pk']) + if not self.request.user.can_access(Team, 'read', team): + raise PermissionDenied() + return Role.filter_visible_roles(self.request.user, team.member_role.children.all().exclude(pk=team.read_role.pk)) -class TeamProjectsList(SubListCreateAttachDetachAPIView): + def post(self, request, *args, **kwargs): + # Forbid implicit role creation here + sub_id = request.data.get('id', None) + if not sub_id: + data = dict(msg="Role 'id' field is missing.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + role = Role.objects.get(pk=sub_id) + content_type = ContentType.objects.get_for_model(Organization) + if role.content_type == content_type: + data = dict(msg="You cannot assign an Organization role as a child role for a Team.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + return super(TeamRolesList, self).post(request, *args, **kwargs) + +class TeamObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Team + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) + +class TeamProjectsList(SubListAPIView): model = Project serializer_class = ProjectSerializer parent_model = Team - relationship = 'projects' -class TeamCredentialsList(SubListCreateAttachDetachAPIView): - - model = Credential - serializer_class = CredentialSerializer - parent_model = Team - relationship = 'credentials' - parent_key = 'team' + def get_queryset(self): + team = self.get_parent_object() + self.check_parent_access(team) + model_ct = ContentType.objects.get_for_model(self.model) + parent_ct = ContentType.objects.get_for_model(self.parent_model) + proj_roles = Role.objects.filter( + Q(ancestors__content_type=parent_ct) & Q(ancestors__object_id=team.pk), + content_type=model_ct + ) + return self.model.accessible_objects(self.request.user, 'read_role').filter(pk__in=[t.content_object.pk for t in proj_roles]) class TeamActivityStreamList(SubListAPIView): @@ -746,28 +929,44 @@ class TeamActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(TeamActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) + qs = self.request.user.get_queryset(self.model) return qs.filter(Q(team=parent) | - Q(project__in=parent.projects.all()) | - Q(credential__in=parent.credentials.all()) | - Q(permission__in=parent.permissions.all())) + Q(project__in=Project.accessible_objects(parent, 'read_role')) | + Q(credential__in=Credential.accessible_objects(parent, 'read_role'))) +class TeamAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = Team + new_in_300 = True class ProjectList(ListCreateAPIView): model = Project serializer_class = ProjectSerializer + def get_queryset(self): + projects_qs = Project.accessible_objects(self.request.user, 'read_role') + projects_qs = projects_qs.select_related( + 'organization', + 'admin_role', + 'use_role', + 'update_role', + 'read_role', + ) + return projects_qs + def get(self, request, *args, **kwargs): # Not optimal, but make sure the project status and last_updated fields # are up to date here... - projects_qs = Project.objects.filter(active=True) - projects_qs = projects_qs.select_related('current_update', 'last_updated') + projects_qs = Project.objects + projects_qs = projects_qs.select_related('current_job', 'last_job') for project in projects_qs: project._set_status_and_last_job_run() return super(ProjectList, self).get(request, *args, **kwargs) @@ -781,7 +980,7 @@ class ProjectDetail(RetrieveUpdateDestroyAPIView): obj = self.get_object() can_delete = request.user.can_access(Project, 'delete', obj) if not can_delete: - raise PermissionDenied("Cannot delete project") + raise PermissionDenied("Cannot delete project.") for pu in obj.project_updates.filter(status__in=['new', 'pending', 'waiting', 'running']): pu.cancel() return super(ProjectDetail, self).destroy(request, *args, **kwargs) @@ -791,19 +990,19 @@ class ProjectPlaybooks(RetrieveAPIView): model = Project serializer_class = ProjectPlaybooksSerializer -class ProjectOrganizationsList(SubListCreateAttachDetachAPIView): - - model = Organization - serializer_class = OrganizationSerializer - parent_model = Project - relationship = 'organizations' - -class ProjectTeamsList(SubListCreateAttachDetachAPIView): +class ProjectTeamsList(ListAPIView): model = Team serializer_class = TeamSerializer - parent_model = Project - relationship = 'teams' + + def get_queryset(self): + p = get_object_or_404(Project, pk=self.kwargs['pk']) + if not self.request.user.can_access(Project, 'read', p): + raise PermissionDenied() + project_ct = ContentType.objects.get_for_model(Project) + team_ct = ContentType.objects.get_for_model(self.model) + all_roles = Role.objects.filter(Q(descendents__content_type=project_ct) & Q(descendents__object_id=p.pk), content_type=team_ct) + return self.model.accessible_objects(self.request.user, 'read_role').filter(pk__in=[t.content_object.pk for t in all_roles]) class ProjectSchedulesList(SubListCreateAttachDetachAPIView): @@ -832,7 +1031,7 @@ class ProjectActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(ProjectActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() @@ -842,8 +1041,28 @@ class ProjectActivityStreamList(SubListAPIView): return qs elif parent.credential is None: return qs.filter(project=parent) - return qs.filter(Q(project=parent) | Q(credential__in=parent.credential)) + return qs.filter(Q(project=parent) | Q(credential=parent.credential)) +class ProjectNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Project + relationship = 'notification_templates_any' + +class ProjectNotificationTemplatesErrorList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Project + relationship = 'notification_templates_error' + +class ProjectNotificationTemplatesSuccessList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = Project + relationship = 'notification_templates_success' class ProjectUpdatesList(SubListAPIView): @@ -857,6 +1076,7 @@ class ProjectUpdateView(RetrieveAPIView): model = Project serializer_class = ProjectUpdateViewSerializer + permission_classes = (ProjectUpdatePermission,) new_in_13 = True def post(self, request, *args, **kwargs): @@ -894,12 +1114,51 @@ class ProjectUpdateCancel(RetrieveAPIView): else: return self.http_method_not_allowed(request, *args, **kwargs) +class ProjectUpdateNotificationsList(SubListAPIView): + + model = Notification + serializer_class = NotificationSerializer + parent_model = ProjectUpdate + relationship = 'notifications' + +class ProjectAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = Project + new_in_300 = True + +class ProjectObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Project + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) class UserList(ListCreateAPIView): model = User serializer_class = UserSerializer + def post(self, request, *args, **kwargs): + ret = super(UserList, self).post( request, *args, **kwargs) + try: + if request.data.get('is_system_auditor', False): + # This is a faux-field that just maps to checking the system + # auditor role member list.. unfortunately this means we can't + # set it on creation, and thus needs to be set here. + user = User.objects.get(id=ret.data['id']) + user.is_system_auditor = request.data['is_system_auditor'] + ret.data['is_system_auditor'] = request.data['is_system_auditor'] + except AttributeError as exc: + print(exc) + pass + return ret + class UserMeList(ListAPIView): model = User @@ -909,56 +1168,92 @@ class UserMeList(ListAPIView): def get_queryset(self): return self.model.objects.filter(pk=self.request.user.pk) -class UserTeamsList(SubListAPIView): +class UserTeamsList(ListAPIView): - model = Team + model = User serializer_class = TeamSerializer - parent_model = User - relationship = 'teams' -class UserPermissionsList(SubListCreateAttachDetachAPIView): + def get_queryset(self): + u = get_object_or_404(User, pk=self.kwargs['pk']) + if not self.request.user.can_access(User, 'read', u): + raise PermissionDenied() + return Team.accessible_objects(self.request.user, 'read_role').filter(member_role__members=u) - model = Permission - serializer_class = PermissionSerializer +class UserRolesList(SubListCreateAttachDetachAPIView): + + model = Role + serializer_class = RoleSerializer + metadata_class = RoleMetadata parent_model = User - relationship = 'permissions' - parent_key = 'user' + relationship='roles' + permission_classes = (IsAuthenticated,) + + def get_queryset(self): + u = get_object_or_404(User, pk=self.kwargs['pk']) + if not self.request.user.can_access(User, 'read', u): + raise PermissionDenied() + content_type = ContentType.objects.get_for_model(User) + + return Role.filter_visible_roles(self.request.user, u.roles.all()) \ + .exclude(content_type=content_type, object_id=u.id) + + def post(self, request, *args, **kwargs): + # Forbid implicit role creation here + sub_id = request.data.get('id', None) + if not sub_id: + data = dict(msg="Role 'id' field is missing.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + if sub_id == self.request.user.admin_role.pk: + raise PermissionDenied('You may not remove your own admin_role.') + + return super(UserRolesList, self).post(request, *args, **kwargs) + + def check_parent_access(self, parent=None): + # We hide roles that shouldn't be seen in our queryset + return True class UserProjectsList(SubListAPIView): model = Project serializer_class = ProjectSerializer parent_model = User - relationship = 'projects' def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) - qs = self.request.user.get_queryset(self.model) - return qs.filter(teams__in=parent.teams.distinct()) + my_qs = Project.accessible_objects(self.request.user, 'read_role') + user_qs = Project.accessible_objects(parent, 'read_role') + return my_qs & user_qs -class UserCredentialsList(SubListCreateAttachDetachAPIView): - - model = Credential - serializer_class = CredentialSerializer - parent_model = User - relationship = 'credentials' - parent_key = 'user' - -class UserOrganizationsList(SubListAPIView): +class UserOrganizationsList(OrganizationCountsMixin, SubListAPIView): model = Organization serializer_class = OrganizationSerializer parent_model = User relationship = 'organizations' -class UserAdminOfOrganizationsList(SubListAPIView): + def get_queryset(self): + parent = self.get_parent_object() + self.check_parent_access(parent) + my_qs = Organization.accessible_objects(self.request.user, 'read_role') + user_qs = Organization.objects.filter(member_role__members=parent) + return my_qs & user_qs + +class UserAdminOfOrganizationsList(OrganizationCountsMixin, SubListAPIView): model = Organization serializer_class = OrganizationSerializer parent_model = User relationship = 'admin_of_organizations' + def get_queryset(self): + parent = self.get_parent_object() + self.check_parent_access(parent) + my_qs = Organization.accessible_objects(self.request.user, 'read_role') + user_qs = Organization.objects.filter(admin_role__members=parent) + return my_qs & user_qs + class UserActivityStreamList(SubListAPIView): model = ActivityStream @@ -975,7 +1270,7 @@ class UserActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(UserActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() @@ -992,33 +1287,126 @@ class UserDetail(RetrieveUpdateDestroyAPIView): def update_filter(self, request, *args, **kwargs): ''' make sure non-read-only fields that can only be edited by admins, are only edited by admins ''' obj = self.get_object() - can_change = request.user.can_access(User, 'change', obj, request.DATA) - can_admin = request.user.can_access(User, 'admin', obj, request.DATA) + can_change = request.user.can_access(User, 'change', obj, request.data) + can_admin = request.user.can_access(User, 'admin', obj, request.data) + + su_only_edit_fields = ('is_superuser', 'is_system_auditor') + admin_only_edit_fields = ('last_name', 'first_name', 'username', 'is_active') + + fields_to_check = () + if not request.user.is_superuser: + fields_to_check += su_only_edit_fields + if can_change and not can_admin: - admin_only_edit_fields = ('last_name', 'first_name', 'username', - 'is_active', 'is_superuser') - changed = {} - for field in admin_only_edit_fields: - left = getattr(obj, field, None) - right = request.DATA.get(field, None) - if left is not None and right is not None and left != right: - changed[field] = (left, right) - if changed: - raise PermissionDenied('Cannot change %s' % ', '.join(changed.keys())) + fields_to_check += admin_only_edit_fields + + bad_changes = {} + for field in fields_to_check: + left = getattr(obj, field, None) + right = request.data.get(field, None) + if left is not None and right is not None and left != right: + bad_changes[field] = (left, right) + if bad_changes: + raise PermissionDenied('Cannot change %s.' % ', '.join(bad_changes.keys())) def destroy(self, request, *args, **kwargs): obj = self.get_object() can_delete = request.user.can_access(User, 'delete', obj) if not can_delete: - raise PermissionDenied('Cannot delete user') - for own_credential in Credential.objects.filter(user=obj): - own_credential.mark_inactive() + raise PermissionDenied('Cannot delete user.') return super(UserDetail, self).destroy(request, *args, **kwargs) +class UserAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = User + new_in_300 = True + + class CredentialList(ListCreateAPIView): model = Credential - serializer_class = CredentialSerializer + serializer_class = CredentialSerializerCreate + + +class CredentialOwnerUsersList(SubListAPIView): + + model = User + serializer_class = UserSerializer + parent_model = Credential + relationship = 'admin_role.members' + new_in_300 = True + + +class CredentialOwnerTeamsList(SubListAPIView): + + model = Team + serializer_class = TeamSerializer + parent_model = Credential + new_in_300 = True + + def get_queryset(self): + credential = get_object_or_404(self.parent_model, pk=self.kwargs['pk']) + if not self.request.user.can_access(Credential, 'read', credential): + raise PermissionDenied() + + content_type = ContentType.objects.get_for_model(self.model) + teams = [c.content_object.pk for c in credential.admin_role.parents.filter(content_type=content_type)] + + return self.model.objects.filter(pk__in=teams) + + +class UserCredentialsList(SubListCreateAPIView): + + model = Credential + serializer_class = UserCredentialSerializerCreate + parent_model = User + parent_key = 'user' + + def get_queryset(self): + user = self.get_parent_object() + self.check_parent_access(user) + + visible_creds = Credential.accessible_objects(self.request.user, 'read_role') + user_creds = Credential.accessible_objects(user, 'read_role') + return user_creds & visible_creds + + +class TeamCredentialsList(SubListCreateAPIView): + + model = Credential + serializer_class = TeamCredentialSerializerCreate + parent_model = Team + parent_key = 'team' + + def get_queryset(self): + team = self.get_parent_object() + self.check_parent_access(team) + + visible_creds = Credential.accessible_objects(self.request.user, 'read_role') + team_creds = Credential.objects.filter(admin_role__parents=team.member_role) + return team_creds & visible_creds + + +class OrganizationCredentialList(SubListCreateAPIView): + + model = Credential + serializer_class = OrganizationCredentialSerializerCreate + parent_model = Organization + parent_key = 'organization' + + def get_queryset(self): + organization = self.get_parent_object() + self.check_parent_access(organization) + + user_visible = Credential.accessible_objects(self.request.user, 'read_role').all() + org_set = Credential.accessible_objects(organization.admin_role, 'read_role').all() + + if self.request.user.is_superuser or self.request.user.is_system_auditor: + return org_set + + return org_set & user_visible + class CredentialDetail(RetrieveUpdateDestroyAPIView): @@ -1041,12 +1429,25 @@ class CredentialActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(CredentialActivityStreamList, self).get(request, *args, **kwargs) -class PermissionDetail(RetrieveUpdateDestroyAPIView): +class CredentialAccessList(ResourceAccessList): - model = Permission - serializer_class = PermissionSerializer + model = User # needs to be User for AccessLists's + resource_model = Credential + new_in_300 = True + +class CredentialObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Credential + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) class InventoryScriptList(ListCreateAPIView): @@ -1059,20 +1460,37 @@ class InventoryScriptDetail(RetrieveUpdateDestroyAPIView): serializer_class = CustomInventoryScriptSerializer def destroy(self, request, *args, **kwargs): - obj = self.get_object() - can_delete = request.user.can_access(self.model, 'delete', obj) + instance = self.get_object() + can_delete = request.user.can_access(self.model, 'delete', instance) if not can_delete: - raise PermissionDenied("Cannot delete inventory script") - for inv_src in InventorySource.objects.filter(source_script=obj): + raise PermissionDenied("Cannot delete inventory script.") + for inv_src in InventorySource.objects.filter(source_script=instance): inv_src.source_script = None inv_src.save() return super(InventoryScriptDetail, self).destroy(request, *args, **kwargs) +class InventoryScriptObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = CustomInventoryScript + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) + class InventoryList(ListCreateAPIView): model = Inventory serializer_class = InventorySerializer + def get_queryset(self): + qs = Inventory.accessible_objects(self.request.user, 'read_role') + qs = qs.select_related('admin_role', 'read_role', 'update_role', 'use_role', 'adhoc_role') + return qs + class InventoryDetail(RetrieveUpdateDestroyAPIView): model = Inventory @@ -1099,7 +1517,7 @@ class InventoryActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(InventoryActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() @@ -1107,6 +1525,38 @@ class InventoryActivityStreamList(SubListAPIView): qs = self.request.user.get_queryset(self.model) return qs.filter(Q(inventory=parent) | Q(host__in=parent.hosts.all()) | Q(group__in=parent.groups.all())) +class InventoryAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = Inventory + new_in_300 = True + +class InventoryObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Inventory + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) + +class InventoryJobTemplateList(SubListAPIView): + + model = JobTemplate + serializer_class = JobTemplateSerializer + parent_model = Inventory + relationship = 'jobtemplates' + new_in_300 = True + + def get_queryset(self): + parent = self.get_parent_object() + self.check_parent_access(parent) + qs = self.request.user.get_queryset(self.model) + return qs.filter(inventory=parent) + class InventoryScanJobTemplateList(SubListAPIView): model = JobTemplate @@ -1121,33 +1571,6 @@ class InventoryScanJobTemplateList(SubListAPIView): qs = self.request.user.get_queryset(self.model) return qs.filter(job_type=PERM_INVENTORY_SCAN, inventory=parent) -class InventorySingleFactView(MongoAPIView): - - model = Fact - parent_model = Inventory - new_in_220 = True - serializer_class = FactSerializer - filter_backends = (MongoFilterBackend,) - - def get(self, request, *args, **kwargs): - # Sanity check: Does the license allow system tracking? - if not feature_enabled('system_tracking'): - raise LicenseForbids('Your license does not permit use ' - 'of system tracking.') - - fact_key = request.QUERY_PARAMS.get("fact_key", None) - fact_value = request.QUERY_PARAMS.get("fact_value", None) - datetime_spec = request.QUERY_PARAMS.get("timestamp", None) - module_spec = request.QUERY_PARAMS.get("module", None) - - if fact_key is None or fact_value is None or module_spec is None: - return Response({"error": "Missing fields"}, status=status.HTTP_400_BAD_REQUEST) - datetime_actual = dateutil.parser.parse(datetime_spec) if datetime_spec is not None else now() - inventory_obj = self.get_parent_object() - fact_data = Fact.get_single_facts([h.name for h in inventory_obj.hosts.all()], fact_key, fact_value, datetime_actual, module_spec) - return Response(dict(results=FactSerializer(fact_data).data if fact_data is not None else [])) - - class HostList(ListCreateAPIView): model = Host @@ -1174,6 +1597,19 @@ class HostGroupsList(SubListCreateAttachDetachAPIView): parent_model = Host relationship = 'groups' + def update_raw_data(self, data): + data.pop('inventory', None) + return super(HostGroupsList, self).update_raw_data(data) + + def create(self, request, *args, **kwargs): + # Inject parent host inventory ID into new group data. + data = request.data + # HACK: Make request data mutable. + if getattr(data, '_mutable', None) is False: + data._mutable = True + data['inventory'] = self.get_parent_object().inventory_id + return super(HostGroupsList, self).create(request, *args, **kwargs) + class HostAllGroupsList(SubListAPIView): ''' the list of all groups of which the host is directly or indirectly a member ''' @@ -1185,7 +1621,7 @@ class HostAllGroupsList(SubListAPIView): def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) - qs = self.request.user.get_queryset(self.model) + qs = self.request.user.get_queryset(self.model).distinct() sublist_qs = parent.all_groups.distinct() return qs & sublist_qs @@ -1213,7 +1649,7 @@ class HostActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(HostActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() @@ -1221,102 +1657,59 @@ class HostActivityStreamList(SubListAPIView): qs = self.request.user.get_queryset(self.model) return qs.filter(Q(host=parent) | Q(inventory=parent.inventory)) -class HostFactVersionsList(MongoListAPIView): - - serializer_class = FactVersionSerializer - parent_model = Host - new_in_220 = True - filter_backends = (MongoFilterBackend,) - - def get_queryset(self): - from_spec = self.request.QUERY_PARAMS.get('from', None) - to_spec = self.request.QUERY_PARAMS.get('to', None) - module_spec = self.request.QUERY_PARAMS.get('module', None) - +class SystemTrackingEnforcementMixin(APIView): + ''' + Use check_permissions instead of initial() because it's in the OPTION's path as well + ''' + def check_permissions(self, request): if not feature_enabled("system_tracking"): raise LicenseForbids("Your license does not permit use " "of system tracking.") + return super(SystemTrackingEnforcementMixin, self).check_permissions(request) - host = self.get_parent_object() - self.check_parent_access(host) +class HostFactVersionsList(ListAPIView, ParentMixin, SystemTrackingEnforcementMixin): - try: - fact_host = FactHost.objects.get(hostname=host.name, inventory_id=host.inventory.pk) - except FactHost.DoesNotExist: - return None - except mongoengine.ConnectionError: - return Response(dict(error="System Tracking Database is disabled"), status=status.HTTP_400_BAD_REQUEST) + model = Fact + serializer_class = FactVersionSerializer + parent_model = Host + new_in_220 = True - kv = { - 'host': fact_host.id, - } - if module_spec is not None: - kv['module'] = module_spec - if from_spec is not None: - from_actual = dateutil.parser.parse(from_spec) - kv['timestamp__gt'] = from_actual - if to_spec is not None: - to_actual = dateutil.parser.parse(to_spec) - kv['timestamp__lte'] = to_actual + def get_queryset(self): + from_spec = self.request.query_params.get('from', None) + to_spec = self.request.query_params.get('to', None) + module_spec = self.request.query_params.get('module', None) - return FactVersion.objects.filter(**kv).order_by("-timestamp") + if from_spec: + from_spec = dateutil.parser.parse(from_spec) + if to_spec: + to_spec = dateutil.parser.parse(to_spec) + + host_obj = self.get_parent_object() + + return Fact.get_timeline(host_obj.id, module=module_spec, ts_from=from_spec, ts_to=to_spec) def list(self, *args, **kwargs): queryset = self.get_queryset() or [] - try: - serializer = FactVersionSerializer(queryset, many=True, context=dict(host_obj=self.get_parent_object())) - except mongoengine.ConnectionError: - return Response(dict(error="System Tracking Database is disabled"), status=status.HTTP_400_BAD_REQUEST) - return Response(dict(results=serializer.data)) + return Response(dict(results=self.serializer_class(queryset, many=True).data)) -class HostSingleFactView(MongoAPIView): +class HostFactCompareView(SubDetailAPIView, SystemTrackingEnforcementMixin): model = Fact - parent_model = Host - new_in_220 = True - serializer_class = FactSerializer - filter_backends = (MongoFilterBackend,) - - def get(self, request, *args, **kwargs): - # Sanity check: Does the license allow system tracking? - if not feature_enabled('system_tracking'): - raise LicenseForbids('Your license does not permit use ' - 'of system tracking.') - - fact_key = request.QUERY_PARAMS.get("fact_key", None) - fact_value = request.QUERY_PARAMS.get("fact_value", None) - datetime_spec = request.QUERY_PARAMS.get("timestamp", None) - module_spec = request.QUERY_PARAMS.get("module", None) - - if fact_key is None or fact_value is None or module_spec is None: - return Response({"error": "Missing fields"}, status=status.HTTP_400_BAD_REQUEST) - datetime_actual = dateutil.parser.parse(datetime_spec) if datetime_spec is not None else now() - host_obj = self.get_parent_object() - fact_data = Fact.get_single_facts([host_obj.name], fact_key, fact_value, datetime_actual, module_spec) - return Response(dict(results=FactSerializer(fact_data).data if fact_data is not None else [])) - -class HostFactCompareView(MongoAPIView): - new_in_220 = True parent_model = Host serializer_class = FactSerializer - filter_backends = (MongoFilterBackend,) - def get(self, request, *args, **kwargs): - # Sanity check: Does the license allow system tracking? - if not feature_enabled('system_tracking'): - raise LicenseForbids('Your license does not permit use ' - 'of system tracking.') - - datetime_spec = request.QUERY_PARAMS.get('datetime', None) - module_spec = request.QUERY_PARAMS.get('module', "ansible") + def retrieve(self, request, *args, **kwargs): + datetime_spec = request.query_params.get('datetime', None) + module_spec = request.query_params.get('module', "ansible") datetime_actual = dateutil.parser.parse(datetime_spec) if datetime_spec is not None else now() host_obj = self.get_parent_object() - fact_entry = Fact.get_host_version(host_obj.name, host_obj.inventory.pk, datetime_actual, module_spec) - host_data = FactSerializer(fact_entry).data if fact_entry is not None else {} - return Response(host_data) + fact_entry = Fact.get_host_fact(host_obj.id, module_spec, datetime_actual) + if not fact_entry: + return Response({'detail': 'Fact not found.'}, status=status.HTTP_404_NOT_FOUND) + return Response(self.serializer_class(instance=fact_entry).data) class GroupList(ListCreateAPIView): @@ -1330,39 +1723,25 @@ class GroupChildrenList(SubListCreateAttachDetachAPIView): parent_model = Group relationship = 'children' + def update_raw_data(self, data): + data.pop('inventory', None) + return super(GroupChildrenList, self).update_raw_data(data) + + def create(self, request, *args, **kwargs): + # Inject parent group inventory ID into new group data. + data = request.data + # HACK: Make request data mutable. + if getattr(data, '_mutable', None) is False: + data._mutable = True + data['inventory'] = self.get_parent_object().inventory_id + return super(GroupChildrenList, self).create(request, *args, **kwargs) + def unattach(self, request, *args, **kwargs): - sub_id = request.DATA.get('id', None) + sub_id = request.data.get('id', None) if sub_id is not None: return super(GroupChildrenList, self).unattach(request, *args, **kwargs) parent = self.get_parent_object() - parent.mark_inactive() - return Response(status=status.HTTP_204_NO_CONTENT) - - def _unattach(self, request, *args, **kwargs): # FIXME: Disabled for now for UI support. - ''' - Special case for disassociating a child group from the parent. If the - child group has no more parents, then automatically mark it inactive. - ''' - sub_id = request.DATA.get('id', None) - if not sub_id: - data = dict(msg='"id" is required to disassociate') - return Response(data, status=status.HTTP_400_BAD_REQUEST) - - parent = self.get_parent_object() - # TODO: flake8 warns, pending removal if unneeded - # parent_key = getattr(self, 'parent_key', None) - relationship = getattr(parent, self.relationship) - sub = get_object_or_400(self.model, pk=sub_id) - - if not request.user.can_access(self.parent_model, 'unattach', parent, - sub, self.relationship): - raise PermissionDenied() - - if sub.parents.filter(active=True).exclude(pk=parent.pk).count() == 0: - sub.mark_inactive() - else: - relationship.remove(sub) - + parent.delete() return Response(status=status.HTTP_204_NO_CONTENT) class GroupPotentialChildrenList(SubListAPIView): @@ -1390,14 +1769,20 @@ class GroupHostsList(SubListCreateAttachDetachAPIView): parent_model = Group relationship = 'hosts' + def update_raw_data(self, data): + data.pop('inventory', None) + return super(GroupHostsList, self).update_raw_data(data) + def create(self, request, *args, **kwargs): parent_group = Group.objects.get(id=self.kwargs['pk']) - existing_hosts = Host.objects.filter(inventory=parent_group.inventory, name=request.DATA['name']) - if existing_hosts.count() > 0 and ('variables' not in request.DATA or - request.DATA['variables'] == '' or - request.DATA['variables'] == '{}' or - request.DATA['variables'] == '---'): - request.DATA['id'] = existing_hosts[0].id + # Inject parent group inventory ID into new host data. + request.data['inventory'] = parent_group.inventory_id + existing_hosts = Host.objects.filter(inventory=parent_group.inventory, name=request.data['name']) + if existing_hosts.count() > 0 and ('variables' not in request.data or + request.data['variables'] == '' or + request.data['variables'] == '{}' or + request.data['variables'] == '---'): + request.data['id'] = existing_hosts[0].id return self.attach(request, *args, **kwargs) return super(GroupHostsList, self).create(request, *args, **kwargs) @@ -1412,7 +1797,7 @@ class GroupAllHostsList(SubListAPIView): def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) - qs = self.request.user.get_queryset(self.model) + qs = self.request.user.get_queryset(self.model).distinct() # need distinct for '&' operator sublist_qs = parent.all_hosts.distinct() return qs & sublist_qs @@ -1440,7 +1825,7 @@ class GroupActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(GroupActivityStreamList, self).get(request, *args, **kwargs) def get_queryset(self): parent = self.get_parent_object() @@ -1455,44 +1840,11 @@ class GroupDetail(RetrieveUpdateDestroyAPIView): def destroy(self, request, *args, **kwargs): obj = self.get_object() - # FIXME: Why isn't the active check being caught earlier by RBAC? - if not getattr(obj, 'active', True): - raise Http404() - if not getattr(obj, 'is_active', True): - raise Http404() if not request.user.can_access(self.model, 'delete', obj): raise PermissionDenied() - if hasattr(obj, 'mark_inactive'): - obj.mark_inactive_recursive() + obj.delete_recursive() return Response(status=status.HTTP_204_NO_CONTENT) - -class GroupSingleFactView(MongoAPIView): - - model = Fact - parent_model = Group - new_in_220 = True - serializer_class = FactSerializer - filter_backends = (MongoFilterBackend,) - - def get(self, request, *args, **kwargs): - # Sanity check: Does the license allow system tracking? - if not feature_enabled('system_tracking'): - raise LicenseForbids('Your license does not permit use ' - 'of system tracking.') - - fact_key = request.QUERY_PARAMS.get("fact_key", None) - fact_value = request.QUERY_PARAMS.get("fact_value", None) - datetime_spec = request.QUERY_PARAMS.get("timestamp", None) - module_spec = request.QUERY_PARAMS.get("module", None) - - if fact_key is None or fact_value is None or module_spec is None: - return Response({"error": "Missing fields"}, status=status.HTTP_400_BAD_REQUEST) - datetime_actual = dateutil.parser.parse(datetime_spec) if datetime_spec is not None else now() - group_obj = self.get_parent_object() - fact_data = Fact.get_single_facts([h.name for h in group_obj.hosts.all()], fact_key, fact_value, datetime_actual, module_spec) - return Response(dict(results=FactSerializer(fact_data).data if fact_data is not None else [])) - class InventoryGroupsList(SubListCreateAttachDetachAPIView): model = Group @@ -1512,7 +1864,7 @@ class InventoryRootGroupsList(SubListCreateAttachDetachAPIView): def get_queryset(self): parent = self.get_parent_object() self.check_parent_access(parent) - qs = self.request.user.get_queryset(self.model) + qs = self.request.user.get_queryset(self.model).distinct() # need distinct for '&' operator return qs & parent.root_groups class BaseVariableData(RetrieveUpdateAPIView): @@ -1545,33 +1897,32 @@ class InventoryScriptView(RetrieveAPIView): filter_backends = () def retrieve(self, request, *args, **kwargs): - self.object = self.get_object() - hostname = request.QUERY_PARAMS.get('host', '') - hostvars = bool(request.QUERY_PARAMS.get('hostvars', '')) - show_all = bool(request.QUERY_PARAMS.get('all', '')) + obj = self.get_object() + hostname = request.query_params.get('host', '') + hostvars = bool(request.query_params.get('hostvars', '')) + show_all = bool(request.query_params.get('all', '')) if show_all: - hosts_q = dict(active=True) + hosts_q = dict() else: - hosts_q = dict(active=True, enabled=True) + hosts_q = dict(enabled=True) if hostname: - host = get_object_or_404(self.object.hosts, name=hostname, **hosts_q) + host = get_object_or_404(obj.hosts, name=hostname, **hosts_q) data = host.variables_dict else: - data = SortedDict() - if self.object.variables_dict: - all_group = data.setdefault('all', SortedDict()) - all_group['vars'] = self.object.variables_dict + data = OrderedDict() + if obj.variables_dict: + all_group = data.setdefault('all', OrderedDict()) + all_group['vars'] = obj.variables_dict # Add hosts without a group to the all group. - groupless_hosts_qs = self.object.hosts.filter(groups__isnull=True, **hosts_q).order_by('name') + groupless_hosts_qs = obj.hosts.filter(groups__isnull=True, **hosts_q).order_by('name') groupless_hosts = list(groupless_hosts_qs.values_list('name', flat=True)) if groupless_hosts: - all_group = data.setdefault('all', SortedDict()) + all_group = data.setdefault('all', OrderedDict()) all_group['hosts'] = groupless_hosts # Build in-memory mapping of groups and their hosts. - group_hosts_kw = dict(group__inventory_id=self.object.id, group__active=True, - host__inventory_id=self.object.id, host__active=True) + group_hosts_kw = dict(group__inventory_id=obj.id, host__inventory_id=obj.id) if 'enabled' in hosts_q: group_hosts_kw['host__enabled'] = hosts_q['enabled'] group_hosts_qs = Group.hosts.through.objects.filter(**group_hosts_kw) @@ -1584,8 +1935,8 @@ class InventoryScriptView(RetrieveAPIView): # Build in-memory mapping of groups and their children. group_parents_qs = Group.parents.through.objects.filter( - from_group__inventory_id=self.object.id, from_group__active=True, - to_group__inventory_id=self.object.id, to_group__active=True, + from_group__inventory_id=obj.id, + to_group__inventory_id=obj.id, ) group_parents_qs = group_parents_qs.order_by('from_group__name') group_parents_qs = group_parents_qs.values_list('from_group_id', 'from_group__name', 'to_group_id') @@ -1595,28 +1946,27 @@ class InventoryScriptView(RetrieveAPIView): group_children.append(from_group_name) # Now use in-memory maps to build up group info. - for group in self.object.groups.filter(active=True): - group_info = SortedDict() + for group in obj.groups.all(): + group_info = OrderedDict() group_info['hosts'] = group_hosts_map.get(group.id, []) group_info['children'] = group_children_map.get(group.id, []) group_info['vars'] = group.variables_dict data[group.name] = group_info if hostvars: - data.setdefault('_meta', SortedDict()) - data['_meta'].setdefault('hostvars', SortedDict()) - for host in self.object.hosts.filter(**hosts_q): + data.setdefault('_meta', OrderedDict()) + data['_meta'].setdefault('hostvars', OrderedDict()) + for host in obj.hosts.filter(**hosts_q): data['_meta']['hostvars'][host.name] = host.variables_dict # workaround for Ansible inventory bug (github #3687), localhost # must be explicitly listed in the all group for dynamic inventory # scripts to pick it up. localhost_names = ('localhost', '127.0.0.1', '::1') - localhosts_qs = self.object.hosts.filter(name__in=localhost_names, - **hosts_q) + localhosts_qs = obj.hosts.filter(name__in=localhost_names, **hosts_q) localhosts = list(localhosts_qs.values_list('name', flat=True)) if localhosts: - all_group = data.setdefault('all', SortedDict()) + all_group = data.setdefault('all', OrderedDict()) all_group_hosts = all_group.get('hosts', []) all_group_hosts.extend(localhosts) all_group['hosts'] = sorted(set(all_group_hosts)) @@ -1642,9 +1992,9 @@ class InventoryTreeView(RetrieveAPIView): def retrieve(self, request, *args, **kwargs): inventory = self.get_object() - group_children_map = inventory.get_group_children_map(active=True) - root_group_pks = inventory.root_groups.filter(active=True).order_by('name').values_list('pk', flat=True) - groups_qs = inventory.groups.filter(active=True) + group_children_map = inventory.get_group_children_map() + root_group_pks = inventory.root_groups.order_by('name').values_list('pk', flat=True) + groups_qs = inventory.groups groups_qs = groups_qs.select_related('inventory') groups_qs = groups_qs.prefetch_related('inventory_source') all_group_data = GroupSerializer(groups_qs, many=True).data @@ -1655,13 +2005,6 @@ class InventoryTreeView(RetrieveAPIView): group_children_map) return Response(tree_data) - def get_description_context(self): - d = super(InventoryTreeView, self).get_description_context() - d.update({ - 'serializer_fields': GroupTreeSerializer().metadata(), - }) - return d - class InventoryInventorySourcesList(SubListAPIView): model = InventorySource @@ -1694,7 +2037,7 @@ class InventorySourceDetail(RetrieveUpdateAPIView): obj = self.get_object() can_delete = request.user.can_access(InventorySource, 'delete', obj) if not can_delete: - raise PermissionDenied("Cannot delete inventory source") + raise PermissionDenied("Cannot delete inventory source.") for pu in obj.inventory_updates.filter(status__in=['new', 'pending', 'waiting', 'running']): pu.cancel() return super(InventorySourceDetail, self).destroy(request, *args, **kwargs) @@ -1726,7 +2069,30 @@ class InventorySourceActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(InventorySourceActivityStreamList, self).get(request, *args, **kwargs) + +class InventorySourceNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = InventorySource + relationship = 'notification_templates_any' + + def post(self, request, *args, **kwargs): + parent = self.get_parent_object() + if parent.source not in CLOUD_INVENTORY_SOURCES: + return Response(dict(msg="Notification Templates can only be assigned when source is one of {}." + .format(CLOUD_INVENTORY_SOURCES, parent.source)), + status=status.HTTP_400_BAD_REQUEST) + return super(InventorySourceNotificationTemplatesAnyList, self).post(request, *args, **kwargs) + +class InventorySourceNotificationTemplatesErrorList(InventorySourceNotificationTemplatesAnyList): + + relationship = 'notification_templates_error' + +class InventorySourceNotificationTemplatesSuccessList(InventorySourceNotificationTemplatesAnyList): + + relationship = 'notification_templates_success' class InventorySourceHostsList(SubListAPIView): @@ -1792,28 +2158,32 @@ class InventoryUpdateCancel(RetrieveAPIView): else: return self.http_method_not_allowed(request, *args, **kwargs) +class InventoryUpdateNotificationsList(SubListAPIView): + + model = Notification + serializer_class = NotificationSerializer + parent_model = InventoryUpdate + relationship = 'notifications' + class JobTemplateList(ListCreateAPIView): model = JobTemplate serializer_class = JobTemplateSerializer always_allow_superuser = False + def post(self, request, *args, **kwargs): + ret = super(JobTemplateList, self).post(request, *args, **kwargs) + if ret.status_code == 201: + job_template = JobTemplate.objects.get(id=ret.data['id']) + job_template.admin_role.members.add(request.user) + return ret + class JobTemplateDetail(RetrieveUpdateDestroyAPIView): model = JobTemplate serializer_class = JobTemplateSerializer always_allow_superuser = False - def destroy(self, request, *args, **kwargs): - obj = self.get_object() - can_delete = request.user.can_access(JobTemplate, 'delete', obj) - if not can_delete: - raise PermissionDenied("Cannot delete job template") - for pu in obj.jobs.filter(status__in=['new', 'pending', 'waiting', 'running']): - pu.cancel() - return super(JobTemplateDetail, self).destroy(request, *args, **kwargs) - - class JobTemplateLaunch(RetrieveAPIView, GenericAPIView): model = JobTemplate @@ -1821,28 +2191,55 @@ class JobTemplateLaunch(RetrieveAPIView, GenericAPIView): is_job_start = True always_allow_superuser = False + def update_raw_data(self, data): + obj = self.get_object() + extra_vars = data.pop('extra_vars', None) or {} + if obj: + for p in obj.passwords_needed_to_start: + data[p] = u'' + for v in obj.variables_needed_to_start: + extra_vars.setdefault(v, u'') + if extra_vars: + data['extra_vars'] = extra_vars + ask_for_vars_dict = obj._ask_for_vars_dict() + ask_for_vars_dict.pop('extra_vars') + for field in ask_for_vars_dict: + if not ask_for_vars_dict[field]: + data.pop(field, None) + elif field == 'inventory' or field == 'credential': + data[field] = getattrd(obj, "%s.%s" % (field, 'id'), None) + else: + data[field] = getattr(obj, field) + return data + def post(self, request, *args, **kwargs): obj = self.get_object() if not request.user.can_access(self.model, 'start', obj): raise PermissionDenied() - if 'credential' not in request.DATA and 'credential_id' in request.DATA: - request.DATA['credential'] = request.DATA['credential_id'] + if 'credential' not in request.data and 'credential_id' in request.data: + request.data['credential'] = request.data['credential_id'] + if 'inventory' not in request.data and 'inventory_id' in request.data: + request.data['inventory'] = request.data['inventory_id'] passwords = {} - serializer = self.serializer_class(data=request.DATA, context={'obj': obj, 'data': request.DATA, 'passwords': passwords}) + serializer = self.serializer_class(instance=obj, data=request.data, context={'obj': obj, 'data': request.data, 'passwords': passwords}) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - # At this point, a credential is gauranteed to exist at serializer.object.credential - if not request.user.can_access(Credential, 'read', serializer.object.credential): - raise PermissionDenied() + prompted_fields, ignored_fields = obj._accept_or_ignore_job_kwargs(**request.data) - kv = { - 'credential': serializer.object.credential.pk, - } - if 'extra_vars' in request.DATA: - kv['extra_vars'] = request.DATA['extra_vars'] + if 'credential' in prompted_fields and prompted_fields['credential'] != getattrd(obj, 'credential.pk', None): + new_credential = get_object_or_400(Credential, pk=get_pk_from_dict(prompted_fields, 'credential')) + if request.user not in new_credential.use_role: + raise PermissionDenied() + + if 'inventory' in prompted_fields and prompted_fields['inventory'] != getattrd(obj, 'inventory.pk', None): + new_inventory = get_object_or_400(Inventory, pk=get_pk_from_dict(prompted_fields, 'inventory')) + if request.user not in new_inventory.use_role: + raise PermissionDenied() + + kv = prompted_fields kv.update(passwords) new_job = obj.create_unified_job(**kv) @@ -1852,8 +2249,11 @@ class JobTemplateLaunch(RetrieveAPIView, GenericAPIView): new_job.delete() return Response(data, status=status.HTTP_400_BAD_REQUEST) else: - data = dict(job=new_job.id) - return Response(data, status=status.HTTP_202_ACCEPTED) + data = OrderedDict() + data['ignored_fields'] = ignored_fields + data.update(JobSerializer(new_job).to_representation(new_job)) + data['job'] = new_job.id + return Response(data, status=status.HTTP_201_CREATED) class JobTemplateSchedulesList(SubListCreateAttachDetachAPIView): @@ -1870,12 +2270,13 @@ class JobTemplateSurveySpec(GenericAPIView): model = JobTemplate parent_model = JobTemplate - # FIXME: Add serializer class to define fields in OPTIONS request! + serializer_class = EmptySerializer def get(self, request, *args, **kwargs): obj = self.get_object() - if not obj.survey_enabled: - return Response(status=status.HTTP_404_NOT_FOUND) + if not feature_enabled('surveys'): + raise LicenseForbids('Your license does not allow ' + 'adding surveys.') return Response(obj.survey_spec) def post(self, request, *args, **kwargs): @@ -1890,32 +2291,36 @@ class JobTemplateSurveySpec(GenericAPIView): if not request.user.can_access(self.model, 'change', obj, None): raise PermissionDenied() try: - obj.survey_spec = json.dumps(request.DATA) + obj.survey_spec = json.dumps(request.data) except ValueError: - # TODO: Log - return Response(dict(error="Invalid JSON when parsing survey spec"), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="Invalid JSON when parsing survey spec."), status=status.HTTP_400_BAD_REQUEST) if "name" not in obj.survey_spec: - return Response(dict(error="'name' missing from survey spec"), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'name' missing from survey spec."), status=status.HTTP_400_BAD_REQUEST) if "description" not in obj.survey_spec: - return Response(dict(error="'description' missing from survey spec"), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'description' missing from survey spec."), status=status.HTTP_400_BAD_REQUEST) if "spec" not in obj.survey_spec: - return Response(dict(error="'spec' missing from survey spec"), status=status.HTTP_400_BAD_REQUEST) - if type(obj.survey_spec["spec"]) != list: - return Response(dict(error="'spec' must be a list of items"), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'spec' missing from survey spec."), status=status.HTTP_400_BAD_REQUEST) + if not isinstance(obj.survey_spec["spec"], list): + return Response(dict(error="'spec' must be a list of items."), status=status.HTTP_400_BAD_REQUEST) if len(obj.survey_spec["spec"]) < 1: - return Response(dict(error="'spec' doesn't contain any items"), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'spec' doesn't contain any items."), status=status.HTTP_400_BAD_REQUEST) idx = 0 + variable_set = set() for survey_item in obj.survey_spec["spec"]: - if type(survey_item) != dict: - return Response(dict(error="survey element %s is not a json object" % str(idx)), status=status.HTTP_400_BAD_REQUEST) + if not isinstance(survey_item, dict): + return Response(dict(error="Survey question %s is not a json object." % str(idx)), status=status.HTTP_400_BAD_REQUEST) if "type" not in survey_item: - return Response(dict(error="'type' missing from survey element %s" % str(idx)), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'type' missing from survey question %s." % str(idx)), status=status.HTTP_400_BAD_REQUEST) if "question_name" not in survey_item: - return Response(dict(error="'question_name' missing from survey element %s" % str(idx)), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'question_name' missing from survey question %s." % str(idx)), status=status.HTTP_400_BAD_REQUEST) if "variable" not in survey_item: - return Response(dict(error="'variable' missing from survey element %s" % str(idx)), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'variable' missing from survey question %s." % str(idx)), status=status.HTTP_400_BAD_REQUEST) + if survey_item['variable'] in variable_set: + return Response(dict(error="'variable' '%s' duplicated in survey question %s." % (survey_item['variable'], str(idx))), status=status.HTTP_400_BAD_REQUEST) + else: + variable_set.add(survey_item['variable']) if "required" not in survey_item: - return Response(dict(error="'required' missing from survey element %s" % str(idx)), status=status.HTTP_400_BAD_REQUEST) + return Response(dict(error="'required' missing from survey question %s." % str(idx)), status=status.HTTP_400_BAD_REQUEST) idx += 1 obj.save() return Response() @@ -1944,13 +2349,54 @@ class JobTemplateActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(JobTemplateActivityStreamList, self).get(request, *args, **kwargs) + +class JobTemplateNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = JobTemplate + relationship = 'notification_templates_any' + +class JobTemplateNotificationTemplatesErrorList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = JobTemplate + relationship = 'notification_templates_error' + +class JobTemplateNotificationTemplatesSuccessList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = JobTemplate + relationship = 'notification_templates_success' + +class JobTemplateLabelList(DeleteLastUnattachLabelMixin, SubListCreateAttachDetachAPIView): + + model = Label + serializer_class = LabelSerializer + parent_model = JobTemplate + relationship = 'labels' + + def post(self, request, *args, **kwargs): + # If a label already exists in the database, attach it instead of erroring out + # that it already exists + if 'id' not in request.data and 'name' in request.data and 'organization' in request.data: + existing = Label.objects.filter(name=request.data['name'], organization_id=request.data['organization']) + if existing.exists(): + existing = existing[0] + request.data['id'] = existing.id + del request.data['name'] + del request.data['organization'] + return super(JobTemplateLabelList, self).post(request, *args, **kwargs) class JobTemplateCallback(GenericAPIView): model = JobTemplate - # FIXME: Add serializer class to define fields in OPTIONS request! permission_classes = (JobTemplateCallbackPermission,) + serializer_class = EmptySerializer + parser_classes = api_settings.DEFAULT_PARSER_CLASSES + [FormParser] @csrf_exempt @transaction.non_atomic_requests @@ -1987,25 +2433,25 @@ class JobTemplateCallback(GenericAPIView): return set() # Find the host objects to search for a match. obj = self.get_object() - qs = obj.inventory.hosts.filter(active=True) + hosts = obj.inventory.hosts.all() # First try for an exact match on the name. try: - return set([qs.get(name__in=remote_hosts)]) + return set([hosts.get(name__in=remote_hosts)]) except (Host.DoesNotExist, Host.MultipleObjectsReturned): pass # Next, try matching based on name or ansible_ssh_host variable. matches = set() - for host in qs: + for host in hosts: ansible_ssh_host = host.variables_dict.get('ansible_ssh_host', '') if ansible_ssh_host in remote_hosts: matches.add(host) - # FIXME: Not entirely sure if this statement will ever be needed? if host.name != ansible_ssh_host and host.name in remote_hosts: matches.add(host) if len(matches) == 1: return matches + # Try to resolve forward addresses for each host to find matches. - for host in qs: + for host in hosts: hostnames = set([host.name]) ansible_ssh_host = host.variables_dict.get('ansible_ssh_host', '') if ansible_ssh_host: @@ -2038,7 +2484,7 @@ class JobTemplateCallback(GenericAPIView): def post(self, request, *args, **kwargs): extra_vars = None if request.content_type == "application/json": - extra_vars = request.DATA.get("extra_vars", None) + extra_vars = request.data.get("extra_vars", None) # Permission class should have already validated host_config_key. job_template = self.get_object() # Attempt to find matching hosts based on remote address. @@ -2047,7 +2493,7 @@ class JobTemplateCallback(GenericAPIView): # match again. inventory_sources_already_updated = [] if len(matching_hosts) != 1: - inventory_sources = job_template.inventory.inventory_sources.filter(active=True, update_on_launch=True) + inventory_sources = job_template.inventory.inventory_sources.filter( update_on_launch=True) inventory_update_pks = set() for inventory_source in inventory_sources: if inventory_source.needs_update_on_launch: @@ -2068,24 +2514,21 @@ class JobTemplateCallback(GenericAPIView): # Check matching hosts. if not matching_hosts: data = dict(msg='No matching host could be found!') - # FIXME: Log! return Response(data, status=status.HTTP_400_BAD_REQUEST) elif len(matching_hosts) > 1: data = dict(msg='Multiple hosts matched the request!') - # FIXME: Log! return Response(data, status=status.HTTP_400_BAD_REQUEST) else: host = list(matching_hosts)[0] if not job_template.can_start_without_user_input(): data = dict(msg='Cannot start automatically, user input required!') - # FIXME: Log! return Response(data, status=status.HTTP_400_BAD_REQUEST) - limit = ':&'.join(filter(None, [job_template.limit, host.name])) + limit = host.name - # NOTE: We limit this to one job waiting due to this: https://trello.com/c/yK36dGWp + # NOTE: We limit this to one job waiting per host per callblack to keep them from stacking crazily if Job.objects.filter(status__in=['pending', 'waiting', 'running'], job_template=job_template, limit=limit).count() > 0: - data = dict(msg='Host callback job already pending') + data = dict(msg='Host callback job already pending.') return Response(data, status=status.HTTP_400_BAD_REQUEST) # Everything is fine; actually create the job. @@ -2103,7 +2546,7 @@ class JobTemplateCallback(GenericAPIView): # Return the location of the new job. headers = {'Location': job.get_absolute_url()} - return Response(status=status.HTTP_202_ACCEPTED, headers=headers) + return Response(status=status.HTTP_201_CREATED, headers=headers) class JobTemplateJobsList(SubListCreateAPIView): @@ -2114,14 +2557,32 @@ class JobTemplateJobsList(SubListCreateAPIView): relationship = 'jobs' parent_key = 'job_template' +class JobTemplateAccessList(ResourceAccessList): + + model = User # needs to be User for AccessLists's + resource_model = JobTemplate + new_in_300 = True + +class JobTemplateObjectRolesList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = JobTemplate + new_in_300 = True + + def get_queryset(self): + po = self.get_parent_object() + content_type = ContentType.objects.get_for_model(self.parent_model) + return Role.objects.filter(content_type=content_type, object_id=po.pk) + class SystemJobTemplateList(ListAPIView): model = SystemJobTemplate serializer_class = SystemJobTemplateSerializer def get(self, request, *args, **kwargs): - if not request.user.is_superuser: - return Response(status=status.HTTP_404_NOT_FOUND) + if not request.user.is_superuser and not request.user.is_system_auditor: + raise PermissionDenied("Superuser privileges needed.") return super(SystemJobTemplateList, self).get(request, *args, **kwargs) class SystemJobTemplateDetail(RetrieveAPIView): @@ -2132,7 +2593,7 @@ class SystemJobTemplateDetail(RetrieveAPIView): class SystemJobTemplateLaunch(GenericAPIView): model = SystemJobTemplate - # FIXME: Add serializer class to define fields in OPTIONS request! + serializer_class = EmptySerializer def get(self, request, *args, **kwargs): return Response({}) @@ -2142,10 +2603,10 @@ class SystemJobTemplateLaunch(GenericAPIView): if not request.user.can_access(self.model, 'start', obj): raise PermissionDenied() - new_job = obj.create_unified_job(**request.DATA) - new_job.signal_start(**request.DATA) + new_job = obj.create_unified_job(**request.data) + new_job.signal_start(**request.data) data = dict(system_job=new_job.id) - return Response(data, status=status.HTTP_202_ACCEPTED) + return Response(data, status=status.HTTP_201_CREATED) class SystemJobTemplateSchedulesList(SubListCreateAttachDetachAPIView): @@ -2165,6 +2626,27 @@ class SystemJobTemplateJobsList(SubListAPIView): relationship = 'jobs' parent_key = 'system_job_template' +class SystemJobTemplateNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = SystemJobTemplate + relationship = 'notification_templates_any' + +class SystemJobTemplateNotificationTemplatesErrorList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = SystemJobTemplate + relationship = 'notification_templates_error' + +class SystemJobTemplateNotificationTemplatesSuccessList(SubListCreateAttachDetachAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + parent_model = SystemJobTemplate + relationship = 'notification_templates_success' + class JobList(ListCreateAPIView): model = Job @@ -2182,6 +2664,14 @@ class JobDetail(RetrieveUpdateDestroyAPIView): return self.http_method_not_allowed(request, *args, **kwargs) return super(JobDetail, self).update(request, *args, **kwargs) +class JobLabelList(SubListAPIView): + + model = Label + serializer_class = LabelSerializer + parent_model = Job + relationship = 'labels' + parent_key = 'job' + class JobActivityStreamList(SubListAPIView): model = ActivityStream @@ -2198,12 +2688,12 @@ class JobActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(JobActivityStreamList, self).get(request, *args, **kwargs) class JobStart(GenericAPIView): model = Job - # FIXME: Add serializer class to define fields in OPTIONS request! + serializer_class = EmptySerializer is_job_start = True def get(self, request, *args, **kwargs): @@ -2221,7 +2711,7 @@ class JobStart(GenericAPIView): if not request.user.can_access(self.model, 'start', obj): raise PermissionDenied() if obj.can_start: - result = obj.signal_start(**request.DATA) + result = obj.signal_start(**request.data) if not result: data = dict(passwords_needed_to_start=obj.passwords_needed_to_start) return Response(data, status=status.HTTP_400_BAD_REQUEST) @@ -2260,15 +2750,15 @@ class JobRelaunch(RetrieveAPIView, GenericAPIView): if not request.user.can_access(self.model, 'start', obj): raise PermissionDenied() - # Note: is_valid() may modify request.DATA + # Note: is_valid() may modify request.data # It will remove any key/value pair who's key is not in the 'passwords_needed_to_start' list - serializer = self.serializer_class(data=request.DATA, context={'obj': obj, 'data': request.DATA}) + serializer = self.serializer_class(data=request.data, context={'obj': obj, 'data': request.data}) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) obj.launch_type = 'relaunch' new_job = obj.copy() - result = new_job.signal_start(**request.DATA) + result = new_job.signal_start(**request.data) if not result: data = dict(passwords_needed_to_start=new_job.passwords_needed_to_start) return Response(data, status=status.HTTP_400_BAD_REQUEST) @@ -2279,6 +2769,13 @@ class JobRelaunch(RetrieveAPIView, GenericAPIView): headers = {'Location': new_job.get_absolute_url()} return Response(data, status=status.HTTP_201_CREATED, headers=headers) +class JobNotificationsList(SubListAPIView): + + model = Notification + serializer_class = NotificationSerializer + parent_model = Job + relationship = 'notifications' + class BaseJobHostSummariesList(SubListAPIView): model = JobHostSummary @@ -2355,13 +2852,11 @@ class JobJobEventsList(BaseJobEventsList): # Post allowed for job event callback only. def post(self, request, *args, **kwargs): parent_obj = get_object_or_404(self.parent_model, pk=self.kwargs['pk']) - data = request.DATA.copy() + data = request.data.copy() data['job'] = parent_obj.pk serializer = self.get_serializer(data=data) if serializer.is_valid(): - self.pre_save(serializer.object) - self.object = serializer.save(force_insert=True) - self.post_save(self.object, created=True) + self.instance = serializer.save() headers = {'Location': serializer.data['url']} return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) @@ -2378,7 +2873,7 @@ class JobJobPlaysList(BaseJobEventsList): all_plays = [] job = Job.objects.filter(pk=self.kwargs['pk']) if not job.exists(): - return ({'detail': 'job not found'}, -1, status.HTTP_404_NOT_FOUND) + return ({'detail': 'Job not found.'}, -1, status.HTTP_404_NOT_FOUND) job = job[0] # Put together a queryset for relevant job events. @@ -2390,16 +2885,16 @@ class JobJobPlaysList(BaseJobEventsList): # doing this here for the moment until/unless we need to implement more # complex filtering (since we aren't under a serializer) - if "id__in" in request.QUERY_PARAMS: - qs = qs.filter(id__in=[int(filter_id) for filter_id in request.QUERY_PARAMS["id__in"].split(",")]) - elif "id__gt" in request.QUERY_PARAMS: - qs = qs.filter(id__gt=request.QUERY_PARAMS['id__gt']) - elif "id__lt" in request.QUERY_PARAMS: - qs = qs.filter(id__lt=request.QUERY_PARAMS['id__lt']) - if "failed" in request.QUERY_PARAMS: - qs = qs.filter(failed=(request.QUERY_PARAMS['failed'].lower() == 'true')) - if "play__icontains" in request.QUERY_PARAMS: - qs = qs.filter(play__icontains=request.QUERY_PARAMS['play__icontains']) + if "id__in" in request.query_params: + qs = qs.filter(id__in=[int(filter_id) for filter_id in request.query_params["id__in"].split(",")]) + elif "id__gt" in request.query_params: + qs = qs.filter(id__gt=request.query_params['id__gt']) + elif "id__lt" in request.query_params: + qs = qs.filter(id__lt=request.query_params['id__lt']) + if "failed" in request.query_params: + qs = qs.filter(failed=(request.query_params['failed'].lower() == 'true')) + if "play__icontains" in request.query_params: + qs = qs.filter(play__icontains=request.query_params['play__icontains']) count = qs.count() @@ -2460,15 +2955,15 @@ class JobJobTasksList(BaseJobEventsList): # If there's no event ID specified, this will return a 404. job = Job.objects.filter(pk=self.kwargs['pk']) if not job.exists(): - return ({'detail': 'job not found'}, -1, status.HTTP_404_NOT_FOUND) + return ({'detail': 'Job not found.'}, -1, status.HTTP_404_NOT_FOUND) job = job[0] - if 'event_id' not in request.QUERY_PARAMS: - return ({'detail': '"event_id" not provided'}, -1, status.HTTP_400_BAD_REQUEST) + if 'event_id' not in request.query_params: + return ({"detail": "'event_id' not provided."}, -1, status.HTTP_400_BAD_REQUEST) - parent_task = job.job_events.filter(pk=int(request.QUERY_PARAMS.get('event_id', -1))) + parent_task = job.job_events.filter(pk=int(request.query_params.get('event_id', -1))) if not parent_task.exists(): - return ({'detail': 'parent event not found'}, -1, status.HTTP_404_NOT_FOUND) + return ({'detail': 'Parent event not found.'}, -1, status.HTTP_404_NOT_FOUND) parent_task = parent_task[0] # Some events correspond to a playbook or task starting up, @@ -2505,16 +3000,16 @@ class JobJobTasksList(BaseJobEventsList): # doing this here for the moment until/unless we need to implement more # complex filtering (since we aren't under a serializer) - if "id__in" in request.QUERY_PARAMS: - qs = qs.filter(id__in=[int(filter_id) for filter_id in request.QUERY_PARAMS["id__in"].split(",")]) - elif "id__gt" in request.QUERY_PARAMS: - qs = qs.filter(id__gt=request.QUERY_PARAMS['id__gt']) - elif "id__lt" in request.QUERY_PARAMS: - qs = qs.filter(id__lt=request.QUERY_PARAMS['id__lt']) - if "failed" in request.QUERY_PARAMS: - qs = qs.filter(failed=(request.QUERY_PARAMS['failed'].lower() == 'true')) - if "task__icontains" in request.QUERY_PARAMS: - qs = qs.filter(task__icontains=request.QUERY_PARAMS['task__icontains']) + if "id__in" in request.query_params: + qs = qs.filter(id__in=[int(filter_id) for filter_id in request.query_params["id__in"].split(",")]) + elif "id__gt" in request.query_params: + qs = qs.filter(id__gt=request.query_params['id__gt']) + elif "id__lt" in request.query_params: + qs = qs.filter(id__lt=request.query_params['id__lt']) + if "failed" in request.query_params: + qs = qs.filter(failed=(request.query_params['failed'].lower() == 'true')) + if "task__icontains" in request.query_params: + qs = qs.filter(task__icontains=request.query_params['task__icontains']) if ordering is not None: qs = qs.order_by(ordering) @@ -2589,10 +3084,19 @@ class AdHocCommandList(ListCreateAPIView): def dispatch(self, *args, **kwargs): return super(AdHocCommandList, self).dispatch(*args, **kwargs) + def update_raw_data(self, data): + # Hide inventory and limit fields from raw data, since they will be set + # automatically by sub list create view. + parent_model = getattr(self, 'parent_model', None) + if parent_model in (Host, Group): + data.pop('inventory', None) + data.pop('limit', None) + return super(AdHocCommandList, self).update_raw_data(data) + def create(self, request, *args, **kwargs): # Inject inventory ID and limit if parent objects is a host/group. if hasattr(self, 'get_parent_object') and not getattr(self, 'parent_key', None): - data = request.DATA + data = request.data # HACK: Make request data mutable. if getattr(data, '_mutable', None) is False: data._mutable = True @@ -2602,11 +3106,11 @@ class AdHocCommandList(ListCreateAPIView): data['limit'] = parent_obj.name # Check for passwords needed before creating ad hoc command. - credential_pk = get_pk_from_dict(request.DATA, 'credential') + credential_pk = get_pk_from_dict(request.data, 'credential') if credential_pk: credential = get_object_or_400(Credential, pk=credential_pk) needed = credential.passwords_needed - provided = dict([(field, request.DATA.get(field, '')) for field in needed]) + provided = dict([(field, request.data.get(field, '')) for field in needed]) if not all(provided.values()): data = dict(passwords_needed_to_start=needed) return Response(data, status=status.HTTP_400_BAD_REQUEST) @@ -2617,7 +3121,7 @@ class AdHocCommandList(ListCreateAPIView): # Start ad hoc command running when created. ad_hoc_command = get_object_or_400(self.model, pk=response.data['id']) - result = ad_hoc_command.signal_start(**request.DATA) + result = ad_hoc_command.signal_start(**request.data) if not result: data = dict(passwords_needed_to_start=ad_hoc_command.passwords_needed_to_start) return Response(data, status=status.HTTP_400_BAD_REQUEST) @@ -2700,21 +3204,21 @@ class AdHocCommandRelaunch(GenericAPIView): data[field[:-3]] = getattr(obj, field) else: data[field] = getattr(obj, field) - serializer = self.get_serializer(data=data) + serializer = AdHocCommandSerializer(data=data, context=self.get_serializer_context()) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # Check for passwords needed before copying ad hoc command. needed = obj.passwords_needed_to_start - provided = dict([(field, request.DATA.get(field, '')) for field in needed]) + provided = dict([(field, request.data.get(field, '')) for field in needed]) if not all(provided.values()): data = dict(passwords_needed_to_start=needed) return Response(data, status=status.HTTP_400_BAD_REQUEST) # Copy and start the new ad hoc command. new_ad_hoc_command = obj.copy() - result = new_ad_hoc_command.signal_start(**request.DATA) + result = new_ad_hoc_command.signal_start(**request.data) if not result: data = dict(passwords_needed_to_start=new_ad_hoc_command.passwords_needed_to_start) return Response(data, status=status.HTTP_400_BAD_REQUEST) @@ -2771,13 +3275,11 @@ class AdHocCommandAdHocCommandEventsList(BaseAdHocCommandEventsList): if request.user: raise PermissionDenied() parent_obj = get_object_or_404(self.parent_model, pk=self.kwargs['pk']) - data = request.DATA.copy() - data['ad_hoc_command'] = parent_obj.pk + data = request.data.copy() + data['ad_hoc_command'] = parent_obj serializer = self.get_serializer(data=data) if serializer.is_valid(): - self.pre_save(serializer.object) - self.object = serializer.save(force_insert=True) - self.post_save(self.object, created=True) + self.instance = serializer.save() headers = {'Location': serializer.data['url']} return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) @@ -2800,7 +3302,7 @@ class AdHocCommandActivityStreamList(SubListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(AdHocCommandActivityStreamList, self).get(request, *args, **kwargs) class SystemJobList(ListCreateAPIView): @@ -2809,8 +3311,8 @@ class SystemJobList(ListCreateAPIView): serializer_class = SystemJobListSerializer def get(self, request, *args, **kwargs): - if not request.user.is_superuser: - return Response(status=status.HTTP_404_NOT_FOUND) + if not request.user.is_superuser and not request.user.is_system_auditor: + raise PermissionDenied("Superuser privileges needed.") return super(SystemJobList, self).get(request, *args, **kwargs) @@ -2833,6 +3335,12 @@ class SystemJobCancel(RetrieveAPIView): else: return self.http_method_not_allowed(request, *args, **kwargs) +class SystemJobNotificationsList(SubListAPIView): + + model = Notification + serializer_class = NotificationSerializer + parent_model = SystemJob + relationship = 'notifications' class UnifiedJobTemplateList(ListAPIView): @@ -2859,19 +3367,20 @@ class UnifiedJobStdout(RetrieveAPIView): def retrieve(self, request, *args, **kwargs): unified_job = self.get_object() obj_size = unified_job.result_stdout_size - if request.accepted_renderer.format != 'txt_download' and obj_size > settings.STDOUT_MAX_BYTES_DISPLAY: - response_message = "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY) + if request.accepted_renderer.format != 'txt_download' and obj_size > tower_settings.STDOUT_MAX_BYTES_DISPLAY: + response_message = "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, + tower_settings.STDOUT_MAX_BYTES_DISPLAY) if request.accepted_renderer.format == 'json': return Response({'range': {'start': 0, 'end': 1, 'absolute_end': 1}, 'content': response_message}) else: return Response(response_message) - + if request.accepted_renderer.format in ('html', 'api', 'json'): - content_format = request.QUERY_PARAMS.get('content_format', 'html') - content_encoding = request.QUERY_PARAMS.get('content_encoding', None) - start_line = request.QUERY_PARAMS.get('start_line', 0) - end_line = request.QUERY_PARAMS.get('end_line', None) - dark_val = request.QUERY_PARAMS.get('dark', '') + content_format = request.query_params.get('content_format', 'html') + content_encoding = request.query_params.get('content_encoding', None) + start_line = request.query_params.get('start_line', 0) + end_line = request.query_params.get('end_line', None) + dark_val = request.query_params.get('dark', '') dark = bool(dark_val and dark_val[0].lower() in ('1', 't', 'y')) content_only = bool(request.accepted_renderer.format in ('api', 'json')) dark_bg = (content_only and dark) or (not content_only and (dark or not dark_val)) @@ -2902,7 +3411,7 @@ class UnifiedJobStdout(RetrieveAPIView): response = HttpResponse(FileWrapper(content_fd), content_type='text/plain') response["Content-Disposition"] = 'attachment; filename="job_%s.txt"' % str(unified_job.id) return response - except Exception, e: + except Exception as e: return Response({"error": "Error generating stdout download file: %s" % str(e)}, status=status.HTTP_400_BAD_REQUEST) elif request.accepted_renderer.format == 'txt': return Response(unified_job.result_stdout) @@ -2926,6 +3435,79 @@ class AdHocCommandStdout(UnifiedJobStdout): model = AdHocCommand new_in_220 = True +class NotificationTemplateList(ListCreateAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + new_in_300 = True + +class NotificationTemplateDetail(RetrieveUpdateDestroyAPIView): + + model = NotificationTemplate + serializer_class = NotificationTemplateSerializer + new_in_300 = True + + def delete(self, request, *args, **kwargs): + obj = self.get_object() + if not request.user.can_access(self.model, 'delete', obj): + return Response(status=status.HTTP_404_NOT_FOUND) + if obj.notifications.filter(status='pending').exists(): + return Response({"error": "Delete not allowed while there are pending notifications"}, + status=status.HTTP_405_METHOD_NOT_ALLOWED) + return super(NotificationTemplateDetail, self).delete(request, *args, **kwargs) + +class NotificationTemplateTest(GenericAPIView): + + view_name = 'NotificationTemplate Test' + model = NotificationTemplate + serializer_class = EmptySerializer + new_in_300 = True + + def post(self, request, *args, **kwargs): + obj = self.get_object() + notification = obj.generate_notification("Tower Notification Test {} {}".format(obj.id, tower_settings.TOWER_URL_BASE), + {"body": "Ansible Tower Test Notification {} {}".format(obj.id, tower_settings.TOWER_URL_BASE)}) + if not notification: + return Response({}, status=status.HTTP_400_BAD_REQUEST) + else: + send_notifications.delay([notification.id]) + headers = {'Location': notification.get_absolute_url()} + return Response({"notification": notification.id}, + headers=headers, + status=status.HTTP_202_ACCEPTED) + +class NotificationTemplateNotificationList(SubListAPIView): + + model = Notification + serializer_class = NotificationSerializer + parent_model = NotificationTemplate + relationship = 'notifications' + parent_key = 'notification_template' + +class NotificationList(ListAPIView): + + model = Notification + serializer_class = NotificationSerializer + new_in_300 = True + +class NotificationDetail(RetrieveAPIView): + + model = Notification + serializer_class = NotificationSerializer + new_in_300 = True + +class LabelList(ListCreateAPIView): + + model = Label + serializer_class = LabelSerializer + new_in_300 = True + +class LabelDetail(RetrieveUpdateAPIView): + + model = Label + serializer_class = LabelSerializer + new_in_300 = True + class ActivityStreamList(SimpleListAPIView): model = ActivityStream @@ -2940,7 +3522,7 @@ class ActivityStreamList(SimpleListAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(ActivityStreamList, self).get(request, *args, **kwargs) class ActivityStreamDetail(RetrieveAPIView): @@ -2957,7 +3539,184 @@ class ActivityStreamDetail(RetrieveAPIView): 'the activity stream.') # Okay, let it through. - return super(type(self), self).get(request, *args, **kwargs) + return super(ActivityStreamDetail, self).get(request, *args, **kwargs) + +class SettingsList(ListCreateAPIView): + + model = TowerSettings + serializer_class = TowerSettingsSerializer + authentication_classes = [TokenGetAuthentication] + api_settings.DEFAULT_AUTHENTICATION_CLASSES + new_in_300 = True + filter_backends = () + + def get_queryset(self): + class SettingsIntermediary(object): + def __init__(self, key, description, category, value, + value_type, user=None): + self.key = key + self.description = description + self.category = category + self.value = value + self.value_type = value_type + self.user = user + + if not self.request.user.is_superuser: + # NOTE: Shortcutting the rbac class due to the merging of the settings manifest and the database + # we'll need to extend this more in the future when we have user settings + return [] + all_defined_settings = {} + for s in TowerSettings.objects.all(): + all_defined_settings[s.key] = SettingsIntermediary(s.key, + s.description, + s.category, + s.value_converted, + s.value_type, + s.user) + manifest_settings = settings.TOWER_SETTINGS_MANIFEST + settings_actual = [] + for settings_key in manifest_settings: + if settings_key in all_defined_settings: + settings_actual.append(all_defined_settings[settings_key]) + else: + m_entry = manifest_settings[settings_key] + settings_actual.append(SettingsIntermediary(settings_key, + m_entry['description'], + m_entry['category'], + m_entry['default'], + m_entry['type'])) + return settings_actual + + def delete(self, request, *args, **kwargs): + if not request.user.can_access(self.model, 'delete', None): + raise PermissionDenied() + TowerSettings.objects.all().delete() + return Response() + +class SettingsReset(APIView): + + view_name = "Reset a settings value" + new_in_300 = True + + def post(self, request): + # NOTE: Extend more with user settings + if not request.user.can_access(TowerSettings, 'delete', None): + raise PermissionDenied() + settings_key = request.data.get('key', None) + if settings_key is not None: + TowerSettings.objects.filter(key=settings_key).delete() + return Response(status=status.HTTP_204_NO_CONTENT) + + +class RoleList(ListAPIView): + + model = Role + serializer_class = RoleSerializer + permission_classes = (IsAuthenticated,) + new_in_300 = True + + def get_queryset(self): + return Role.visible_roles(self.request.user) + + +class RoleDetail(RetrieveAPIView): + + model = Role + serializer_class = RoleSerializer + permission_classes = (IsAuthenticated,) + new_in_300 = True + + +class RoleUsersList(SubListCreateAttachDetachAPIView): + + model = User + serializer_class = UserSerializer + parent_model = Role + relationship = 'members' + new_in_300 = True + + def get_queryset(self): + role = self.get_parent_object() + self.check_parent_access(role) + return role.members.all() + + def post(self, request, *args, **kwargs): + # Forbid implicit user creation here + sub_id = request.data.get('id', None) + if not sub_id: + data = dict(msg="User 'id' field is missing.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + return super(RoleUsersList, self).post(request, *args, **kwargs) + + +class RoleTeamsList(SubListAPIView): + + model = Team + serializer_class = TeamSerializer + parent_model = Role + relationship = 'member_role.parents' + permission_classes = (IsAuthenticated,) + new_in_300 = True + + def get_queryset(self): + role = self.get_parent_object() + self.check_parent_access(role) + return Team.objects.filter(member_role__children=role) + + def post(self, request, pk, *args, **kwargs): + # Forbid implicit team creation here + sub_id = request.data.get('id', None) + if not sub_id: + data = dict(msg="Team 'id' field is missing.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + role = Role.objects.get(pk=self.kwargs['pk']) + content_type = ContentType.objects.get_for_model(Organization) + if role.content_type == content_type: + data = dict(msg="You cannot assign an Organization role as a child role for a Team.") + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + team = Team.objects.get(pk=sub_id) + action = 'attach' + if request.data.get('disassociate', None): + action = 'unattach' + if not request.user.can_access(self.parent_model, action, role, team, + self.relationship, request.data, + skip_sub_obj_read_check=False): + raise PermissionDenied() + if request.data.get('disassociate', None): + team.member_role.children.remove(role) + else: + team.member_role.children.add(role) + return Response(status=status.HTTP_204_NO_CONTENT) + + +class RoleParentsList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Role + relationship = 'parents' + permission_classes = (IsAuthenticated,) + new_in_300 = True + + def get_queryset(self): + role = Role.objects.get(pk=self.kwargs['pk']) + return Role.filter_visible_roles(self.request.user, role.parents.all()) + + +class RoleChildrenList(SubListAPIView): + + model = Role + serializer_class = RoleSerializer + parent_model = Role + relationship = 'children' + permission_classes = (IsAuthenticated,) + new_in_300 = True + + def get_queryset(self): + role = Role.objects.get(pk=self.kwargs['pk']) + return Role.filter_visible_roles(self.request.user, role.children.all()) + # Create view functions for all of the class-based views to simplify inclusion diff --git a/awx/fact/models/fact.py b/awx/fact/models/fact.py index 87cc3e1671..f52abe1106 100644 --- a/awx/fact/models/fact.py +++ b/awx/fact/models/fact.py @@ -35,7 +35,7 @@ def _get_db_monkeypatched(cls): password=settings.MONGO_PASSWORD, tz_aware=settings.USE_TZ) register_key_transform(get_db()) - except ConnectionError: + except (ConnectionError, AttributeError): logger.info('Failed to establish connect to MongoDB') return get_db(cls._meta.get("db_alias", "default")) diff --git a/awx/fact/tests/__init__.py b/awx/fact/tests/__init__.py deleted file mode 100644 index d276b01707..0000000000 --- a/awx/fact/tests/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .models import * # noqa -from .utils import * # noqa -from .base import * # noqa diff --git a/awx/fact/tests/base.py b/awx/fact/tests/base.py deleted file mode 100644 index bc48698fec..0000000000 --- a/awx/fact/tests/base.py +++ /dev/null @@ -1,223 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from __future__ import absolute_import -from django.utils.timezone import now - -# Django -from django.conf import settings -import django - -# MongoEngine -from mongoengine.connection import get_db, ConnectionError - -# AWX -from awx.fact.models.fact import * # noqa - -TEST_FACT_ANSIBLE = { - "ansible_swapfree_mb" : 4092, - "ansible_default_ipv6" : { - - }, - "ansible_distribution_release" : "trusty", - "ansible_system_vendor" : "innotek GmbH", - "ansible_os_family" : "Debian", - "ansible_all_ipv4_addresses" : [ - "192.168.1.145" - ], - "ansible_lsb" : { - "release" : "14.04", - "major_release" : "14", - "codename" : "trusty", - "id" : "Ubuntu", - "description" : "Ubuntu 14.04.2 LTS" - }, -} - -TEST_FACT_PACKAGES = [ - { - "name": "accountsservice", - "architecture": "amd64", - "source": "apt", - "version": "0.6.35-0ubuntu7.1" - }, - { - "name": "acpid", - "architecture": "amd64", - "source": "apt", - "version": "1:2.0.21-1ubuntu2" - }, - { - "name": "adduser", - "architecture": "all", - "source": "apt", - "version": "3.113+nmu3ubuntu3" - }, -] - -TEST_FACT_SERVICES = [ - { - "source" : "upstart", - "state" : "waiting", - "name" : "ureadahead-other", - "goal" : "stop" - }, - { - "source" : "upstart", - "state" : "running", - "name" : "apport", - "goal" : "start" - }, - { - "source" : "upstart", - "state" : "waiting", - "name" : "console-setup", - "goal" : "stop" - }, -] - - -class MongoDBRequired(django.test.TestCase): - def setUp(self): - # Drop mongo database - try: - self.db = get_db() - self.db.connection.drop_database(settings.MONGO_DB) - except ConnectionError: - self.skipTest('MongoDB connection failed') - -class BaseFactTestMixin(MongoDBRequired): - pass - -class BaseFactTest(BaseFactTestMixin, MongoDBRequired): - pass - -# TODO: for now, we relate all hosts to a single inventory -class FactScanBuilder(object): - - def __init__(self): - self.facts_data = {} - self.hostname_data = [] - self.inventory_id = 1 - - self.host_objs = [] - self.fact_objs = [] - self.version_objs = [] - self.timestamps = [] - - self.epoch = now().replace(year=2015, microsecond=0) - - def set_epoch(self, epoch): - self.epoch = epoch - - def add_fact(self, module, facts): - self.facts_data[module] = facts - - def add_hostname(self, hostname): - self.hostname_data.append(hostname) - - def build(self, scan_count, host_count): - if len(self.facts_data) == 0: - raise RuntimeError("No fact data to build populate scans. call add_fact()") - if (len(self.hostname_data) > 0 and len(self.hostname_data) != host_count): - raise RuntimeError("Registered number of hostnames %d does not match host_count %d" % (len(self.hostname_data), host_count)) - - if len(self.hostname_data) == 0: - self.hostname_data = ['hostname_%s' % i for i in range(0, host_count)] - - self.host_objs = [FactHost(hostname=hostname, inventory_id=self.inventory_id).save() for hostname in self.hostname_data] - - for i in range(0, scan_count): - scan = {} - scan_version = {} - timestamp = self.epoch.replace(year=self.epoch.year - i, microsecond=0) - for module in self.facts_data: - fact_objs = [] - version_objs = [] - for host in self.host_objs: - (fact_obj, version_obj) = Fact.add_fact(timestamp=timestamp, - host=host, - module=module, - fact=self.facts_data[module]) - fact_objs.append(fact_obj) - version_objs.append(version_obj) - scan[module] = fact_objs - scan_version[module] = version_objs - self.fact_objs.append(scan) - self.version_objs.append(scan_version) - self.timestamps.append(timestamp) - - - def get_scan(self, index, module=None): - res = None - res = self.fact_objs[index] - if module: - res = res[module] - return res - - def get_scans(self, index_start=None, index_end=None): - if index_start is None: - index_start = 0 - if index_end is None: - index_end = len(self.fact_objs) - return self.fact_objs[index_start:index_end] - - def get_scan_version(self, index, module=None): - res = None - res = self.version_objs[index] - if module: - res = res[module] - return res - - def get_scan_versions(self, index_start=None, index_end=None): - if index_start is None: - index_start = 0 - if index_end is None: - index_end = len(self.version_objs) - return self.version_objs[index_start:index_end] - - def get_hostname(self, index): - return self.host_objs[index].hostname - - def get_hostnames(self, index_start=None, index_end=None): - if index_start is None: - index_start = 0 - if index_end is None: - index_end = len(self.host_objs) - - return [self.host_objs[i].hostname for i in range(index_start, index_end)] - - def get_inventory_id(self): - return self.inventory_id - - def set_inventory_id(self, inventory_id): - self.inventory_id = inventory_id - - def get_host(self, index): - return self.host_objs[index] - - def get_hosts(self, index_start=None, index_end=None): - if index_start is None: - index_start = 0 - if index_end is None: - index_end = len(self.host_objs) - - return self.host_objs[index_start:index_end] - - def get_scan_count(self): - return len(self.fact_objs) - - def get_host_count(self): - return len(self.host_objs) - - def get_timestamp(self, index): - return self.timestamps[index] - - def get_timestamps(self, index_start=None, index_end=None): - if not index_start: - index_start = 0 - if not index_end: - len(self.timestamps) - return self.timestamps[index_start:index_end] - diff --git a/awx/fact/tests/data/file_scan.json b/awx/fact/tests/data/file_scan.json deleted file mode 100644 index 2ff33091e9..0000000000 --- a/awx/fact/tests/data/file_scan.json +++ /dev/null @@ -1,155011 +0,0 @@ -{ - "timestamp": "2015-07-13T18:02:56Z", - "host": { - "inventory_id": 1, - "hostname": "host-00", - "id": "55a3fd52e1382311767d6b9d" - }, - "module": "files", - "fact": [ - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5895822, - "inode": 525214, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1948", - "xusr": false, - "atime": 1436810539.5895822, - "isdir": false, - "ctime": 1436810539.5895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4955823, - "inode": 526295, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3029", - "xusr": false, - "atime": 1436810540.4955823, - "isdir": false, - "ctime": 1436810540.4955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5825822, - "inode": 526401, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3135", - "xusr": false, - "atime": 1436810540.5825822, - "isdir": false, - "ctime": 1436810540.5825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8835824, - "inode": 526822, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3556", - "xusr": false, - "atime": 1436810540.8835824, - "isdir": false, - "ctime": 1436810540.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8835824, - "inode": 525569, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2303", - "xusr": false, - "atime": 1436810539.8835824, - "isdir": false, - "ctime": 1436810539.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3015823, - "inode": 526054, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2788", - "xusr": false, - "atime": 1436810540.3015823, - "isdir": false, - "ctime": 1436810540.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9465823, - "inode": 528245, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4979", - "xusr": false, - "atime": 1436810541.9465823, - "isdir": false, - "ctime": 1436810541.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0575824, - "inode": 525801, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2535", - "xusr": false, - "atime": 1436810540.0575824, - "isdir": false, - "ctime": 1436810540.0575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5885823, - "inode": 525213, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1947", - "xusr": false, - "atime": 1436810539.5885823, - "isdir": false, - "ctime": 1436810539.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5295823, - "inode": 523867, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/601", - "xusr": false, - "atime": 1436810538.5295823, - "isdir": false, - "ctime": 1436810538.5295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0595822, - "inode": 527067, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3801", - "xusr": false, - "atime": 1436810541.0595822, - "isdir": false, - "ctime": 1436810541.0595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0245824, - "inode": 525760, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2494", - "xusr": false, - "atime": 1436810540.0245824, - "isdir": false, - "ctime": 1436810540.0245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5295823, - "inode": 525150, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1884", - "xusr": false, - "atime": 1436810539.5295823, - "isdir": false, - "ctime": 1436810539.5295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7625823, - "inode": 524180, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/914", - "xusr": false, - "atime": 1436810538.7625823, - "isdir": false, - "ctime": 1436810538.7625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9495823, - "inode": 524429, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1163", - "xusr": false, - "atime": 1436810538.9495823, - "isdir": false, - "ctime": 1436810538.9495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9195824, - "inode": 528206, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4940", - "xusr": false, - "atime": 1436810541.9195824, - "isdir": false, - "ctime": 1436810541.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6605823, - "inode": 524046, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/780", - "xusr": false, - "atime": 1436810538.6605823, - "isdir": false, - "ctime": 1436810538.6605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5925822, - "inode": 523954, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/688", - "xusr": false, - "atime": 1436810538.5925822, - "isdir": false, - "ctime": 1436810538.5925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1435823, - "inode": 523376, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/110", - "xusr": false, - "atime": 1436810538.1435823, - "isdir": false, - "ctime": 1436810538.1435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5595822, - "inode": 527711, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4445", - "xusr": false, - "atime": 1436810541.5595822, - "isdir": false, - "ctime": 1436810541.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2895823, - "inode": 527383, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4117", - "xusr": false, - "atime": 1436810541.2895823, - "isdir": false, - "ctime": 1436810541.2895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1475823, - "inode": 524711, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1445", - "xusr": false, - "atime": 1436810539.1475823, - "isdir": false, - "ctime": 1436810539.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1215823, - "inode": 523344, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/78", - "xusr": false, - "atime": 1436810538.1215823, - "isdir": false, - "ctime": 1436810538.1215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6715822, - "inode": 527864, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4598", - "xusr": false, - "atime": 1436810541.6715822, - "isdir": false, - "ctime": 1436810541.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1315823, - "inode": 525871, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2605", - "xusr": false, - "atime": 1436810540.1315823, - "isdir": false, - "ctime": 1436810540.1315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7835822, - "inode": 525432, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2166", - "xusr": false, - "atime": 1436810539.7835822, - "isdir": false, - "ctime": 1436810539.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7615824, - "inode": 524178, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/912", - "xusr": false, - "atime": 1436810538.7615824, - "isdir": false, - "ctime": 1436810538.7615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0505824, - "inode": 524571, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1305", - "xusr": false, - "atime": 1436810539.0505824, - "isdir": false, - "ctime": 1436810539.0505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9665823, - "inode": 526939, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3673", - "xusr": false, - "atime": 1436810540.9665823, - "isdir": false, - "ctime": 1436810540.9665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0485823, - "inode": 524568, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1302", - "xusr": false, - "atime": 1436810539.0485823, - "isdir": false, - "ctime": 1436810539.0485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4745822, - "inode": 527594, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4328", - "xusr": false, - "atime": 1436810541.4745822, - "isdir": false, - "ctime": 1436810541.4745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0955822, - "inode": 524636, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1370", - "xusr": false, - "atime": 1436810539.0955822, - "isdir": false, - "ctime": 1436810539.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6575823, - "inode": 526505, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3239", - "xusr": false, - "atime": 1436810540.6575823, - "isdir": false, - "ctime": 1436810540.6575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3955822, - "inode": 523690, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/424", - "xusr": false, - "atime": 1436810538.3955822, - "isdir": false, - "ctime": 1436810538.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0785823, - "inode": 525822, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2556", - "xusr": false, - "atime": 1436810540.0785823, - "isdir": false, - "ctime": 1436810540.0785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4485824, - "inode": 526254, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2988", - "xusr": false, - "atime": 1436810540.4485824, - "isdir": false, - "ctime": 1436810540.4485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8555822, - "inode": 525529, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2263", - "xusr": false, - "atime": 1436810539.8555822, - "isdir": false, - "ctime": 1436810539.8555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8085823, - "inode": 525462, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2196", - "xusr": false, - "atime": 1436810539.8085823, - "isdir": false, - "ctime": 1436810539.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5315824, - "inode": 527672, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4406", - "xusr": false, - "atime": 1436810541.5315824, - "isdir": false, - "ctime": 1436810541.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0685823, - "inode": 525811, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2545", - "xusr": false, - "atime": 1436810540.0685823, - "isdir": false, - "ctime": 1436810540.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3035824, - "inode": 523602, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/336", - "xusr": false, - "atime": 1436810538.3035824, - "isdir": false, - "ctime": 1436810538.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0425823, - "inode": 524559, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1293", - "xusr": false, - "atime": 1436810539.0425823, - "isdir": false, - "ctime": 1436810539.0425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9235823, - "inode": 525624, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2358", - "xusr": false, - "atime": 1436810539.9235823, - "isdir": false, - "ctime": 1436810539.9235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2015824, - "inode": 523460, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/194", - "xusr": false, - "atime": 1436810538.2015824, - "isdir": false, - "ctime": 1436810538.2015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7615824, - "inode": 527988, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4722", - "xusr": false, - "atime": 1436810541.7615824, - "isdir": false, - "ctime": 1436810541.7615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2535822, - "inode": 527332, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4066", - "xusr": false, - "atime": 1436810541.2535822, - "isdir": false, - "ctime": 1436810541.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1555824, - "inode": 524722, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1456", - "xusr": false, - "atime": 1436810539.1555824, - "isdir": false, - "ctime": 1436810539.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4605823, - "inode": 526263, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2997", - "xusr": false, - "atime": 1436810540.4605823, - "isdir": false, - "ctime": 1436810540.4605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7305822, - "inode": 526609, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3343", - "xusr": false, - "atime": 1436810540.7305822, - "isdir": false, - "ctime": 1436810540.7305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8645823, - "inode": 526796, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3530", - "xusr": false, - "atime": 1436810540.8645823, - "isdir": false, - "ctime": 1436810540.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6285822, - "inode": 526464, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3198", - "xusr": false, - "atime": 1436810540.6285822, - "isdir": false, - "ctime": 1436810540.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5345824, - "inode": 523874, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/608", - "xusr": false, - "atime": 1436810538.5345824, - "isdir": false, - "ctime": 1436810538.5345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7925823, - "inode": 525444, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2178", - "xusr": false, - "atime": 1436810539.7925823, - "isdir": false, - "ctime": 1436810539.7925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8855822, - "inode": 524342, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1076", - "xusr": false, - "atime": 1436810538.8855822, - "isdir": false, - "ctime": 1436810538.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8825824, - "inode": 526821, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3555", - "xusr": false, - "atime": 1436810540.8825824, - "isdir": false, - "ctime": 1436810540.8825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4365823, - "inode": 527541, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4275", - "xusr": false, - "atime": 1436810541.4365823, - "isdir": false, - "ctime": 1436810541.4365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4725823, - "inode": 523789, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/523", - "xusr": false, - "atime": 1436810538.4725823, - "isdir": false, - "ctime": 1436810538.4725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6715822, - "inode": 527865, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4599", - "xusr": false, - "atime": 1436810541.6715822, - "isdir": false, - "ctime": 1436810541.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6915822, - "inode": 525324, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2058", - "xusr": false, - "atime": 1436810539.6915822, - "isdir": false, - "ctime": 1436810539.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3015823, - "inode": 523600, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/334", - "xusr": false, - "atime": 1436810538.3015823, - "isdir": false, - "ctime": 1436810538.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4985824, - "inode": 525119, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1853", - "xusr": false, - "atime": 1436810539.4985824, - "isdir": false, - "ctime": 1436810539.4985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9485824, - "inode": 525658, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2392", - "xusr": false, - "atime": 1436810539.9485824, - "isdir": false, - "ctime": 1436810539.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4795823, - "inode": 526284, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3018", - "xusr": false, - "atime": 1436810540.4795823, - "isdir": false, - "ctime": 1436810540.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6915822, - "inode": 527893, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4627", - "xusr": false, - "atime": 1436810541.6915822, - "isdir": false, - "ctime": 1436810541.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9285824, - "inode": 526886, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3620", - "xusr": false, - "atime": 1436810540.9285824, - "isdir": false, - "ctime": 1436810540.9285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4095824, - "inode": 526205, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2939", - "xusr": false, - "atime": 1436810540.4095824, - "isdir": false, - "ctime": 1436810540.4095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2555823, - "inode": 527336, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4070", - "xusr": false, - "atime": 1436810541.2555823, - "isdir": false, - "ctime": 1436810541.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9065824, - "inode": 528189, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4923", - "xusr": false, - "atime": 1436810541.9065824, - "isdir": false, - "ctime": 1436810541.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1295824, - "inode": 524685, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1419", - "xusr": false, - "atime": 1436810539.1295824, - "isdir": false, - "ctime": 1436810539.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3375823, - "inode": 524969, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1703", - "xusr": false, - "atime": 1436810539.3375823, - "isdir": false, - "ctime": 1436810539.3375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0275824, - "inode": 527022, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3756", - "xusr": false, - "atime": 1436810541.0275824, - "isdir": false, - "ctime": 1436810541.0275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8045824, - "inode": 526712, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3446", - "xusr": false, - "atime": 1436810540.8045824, - "isdir": false, - "ctime": 1436810540.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2685823, - "inode": 527354, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4088", - "xusr": false, - "atime": 1436810541.2685823, - "isdir": false, - "ctime": 1436810541.2685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7935822, - "inode": 526696, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3430", - "xusr": false, - "atime": 1436810540.7935822, - "isdir": false, - "ctime": 1436810540.7935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8185823, - "inode": 528068, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4802", - "xusr": false, - "atime": 1436810541.8185823, - "isdir": false, - "ctime": 1436810541.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0145824, - "inode": 524520, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1254", - "xusr": false, - "atime": 1436810539.0145824, - "isdir": false, - "ctime": 1436810539.0145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1825824, - "inode": 523432, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/166", - "xusr": false, - "atime": 1436810538.1825824, - "isdir": false, - "ctime": 1436810538.1825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6695824, - "inode": 527861, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4595", - "xusr": false, - "atime": 1436810541.6695824, - "isdir": false, - "ctime": 1436810541.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7015824, - "inode": 524103, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/837", - "xusr": false, - "atime": 1436810538.7015824, - "isdir": false, - "ctime": 1436810538.7015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0445824, - "inode": 524563, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1297", - "xusr": false, - "atime": 1436810539.0445824, - "isdir": false, - "ctime": 1436810539.0445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2475822, - "inode": 524854, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1588", - "xusr": false, - "atime": 1436810539.2475822, - "isdir": false, - "ctime": 1436810539.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5665822, - "inode": 523918, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/652", - "xusr": false, - "atime": 1436810538.5665822, - "isdir": false, - "ctime": 1436810538.5665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6885824, - "inode": 527889, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4623", - "xusr": false, - "atime": 1436810541.6885824, - "isdir": false, - "ctime": 1436810541.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2785823, - "inode": 527368, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4102", - "xusr": false, - "atime": 1436810541.2785823, - "isdir": false, - "ctime": 1436810541.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3805823, - "inode": 525005, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1739", - "xusr": false, - "atime": 1436810539.3805823, - "isdir": false, - "ctime": 1436810539.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4065824, - "inode": 526201, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2935", - "xusr": false, - "atime": 1436810540.4065824, - "isdir": false, - "ctime": 1436810540.4065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8785822, - "inode": 525562, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2296", - "xusr": false, - "atime": 1436810539.8785822, - "isdir": false, - "ctime": 1436810539.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9635823, - "inode": 525678, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2412", - "xusr": false, - "atime": 1436810539.9635823, - "isdir": false, - "ctime": 1436810539.9635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8215823, - "inode": 528071, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4805", - "xusr": false, - "atime": 1436810541.8215823, - "isdir": false, - "ctime": 1436810541.8215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1735823, - "inode": 523418, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/152", - "xusr": false, - "atime": 1436810538.1735823, - "isdir": false, - "ctime": 1436810538.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6045823, - "inode": 526431, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3165", - "xusr": false, - "atime": 1436810540.6045823, - "isdir": false, - "ctime": 1436810540.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4585824, - "inode": 523770, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/504", - "xusr": false, - "atime": 1436810538.4585824, - "isdir": false, - "ctime": 1436810538.4585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7195823, - "inode": 527932, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4666", - "xusr": false, - "atime": 1436810541.7195823, - "isdir": false, - "ctime": 1436810541.7195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1465824, - "inode": 523380, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/114", - "xusr": false, - "atime": 1436810538.1465824, - "isdir": false, - "ctime": 1436810538.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3605824, - "inode": 523654, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/388", - "xusr": false, - "atime": 1436810538.3605824, - "isdir": false, - "ctime": 1436810538.3605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1385822, - "inode": 527176, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3910", - "xusr": false, - "atime": 1436810541.1385822, - "isdir": false, - "ctime": 1436810541.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0205822, - "inode": 524528, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1262", - "xusr": false, - "atime": 1436810539.0205822, - "isdir": false, - "ctime": 1436810539.0205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2885823, - "inode": 523582, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/316", - "xusr": false, - "atime": 1436810538.2885823, - "isdir": false, - "ctime": 1436810538.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6755824, - "inode": 525311, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2045", - "xusr": false, - "atime": 1436810539.6755824, - "isdir": false, - "ctime": 1436810539.6755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9795823, - "inode": 525699, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2433", - "xusr": false, - "atime": 1436810539.9795823, - "isdir": false, - "ctime": 1436810539.9795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5195823, - "inode": 527656, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4390", - "xusr": false, - "atime": 1436810541.5195823, - "isdir": false, - "ctime": 1436810541.5195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5425823, - "inode": 526346, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3080", - "xusr": false, - "atime": 1436810540.5425823, - "isdir": false, - "ctime": 1436810540.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6315823, - "inode": 526469, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3203", - "xusr": false, - "atime": 1436810540.6315823, - "isdir": false, - "ctime": 1436810540.6315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8035824, - "inode": 526710, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3444", - "xusr": false, - "atime": 1436810540.8035824, - "isdir": false, - "ctime": 1436810540.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7105823, - "inode": 524114, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/848", - "xusr": false, - "atime": 1436810538.7105823, - "isdir": false, - "ctime": 1436810538.7105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4325824, - "inode": 523733, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/467", - "xusr": false, - "atime": 1436810538.4325824, - "isdir": false, - "ctime": 1436810538.4325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2445824, - "inode": 523519, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/253", - "xusr": false, - "atime": 1436810538.2445824, - "isdir": false, - "ctime": 1436810538.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1835823, - "inode": 523434, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/168", - "xusr": false, - "atime": 1436810538.1835823, - "isdir": false, - "ctime": 1436810538.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4275823, - "inode": 525058, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1792", - "xusr": false, - "atime": 1436810539.4275823, - "isdir": false, - "ctime": 1436810539.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9685824, - "inode": 526942, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3676", - "xusr": false, - "atime": 1436810540.9685824, - "isdir": false, - "ctime": 1436810540.9685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7855823, - "inode": 528022, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4756", - "xusr": false, - "atime": 1436810541.7855823, - "isdir": false, - "ctime": 1436810541.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4885824, - "inode": 527613, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4347", - "xusr": false, - "atime": 1436810541.4885824, - "isdir": false, - "ctime": 1436810541.4885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2795823, - "inode": 523569, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/303", - "xusr": false, - "atime": 1436810538.2795823, - "isdir": false, - "ctime": 1436810538.2795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3705823, - "inode": 523662, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/396", - "xusr": false, - "atime": 1436810538.3705823, - "isdir": false, - "ctime": 1436810538.3705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4145823, - "inode": 526212, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2946", - "xusr": false, - "atime": 1436810540.4145823, - "isdir": false, - "ctime": 1436810540.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8575823, - "inode": 526786, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3520", - "xusr": false, - "atime": 1436810540.8575823, - "isdir": false, - "ctime": 1436810540.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5075824, - "inode": 523838, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/572", - "xusr": false, - "atime": 1436810538.5075824, - "isdir": false, - "ctime": 1436810538.5075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7425823, - "inode": 524154, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/888", - "xusr": false, - "atime": 1436810538.7425823, - "isdir": false, - "ctime": 1436810538.7425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3695824, - "inode": 524997, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1731", - "xusr": false, - "atime": 1436810539.3695824, - "isdir": false, - "ctime": 1436810539.3695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1555824, - "inode": 525895, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2629", - "xusr": false, - "atime": 1436810540.1555824, - "isdir": false, - "ctime": 1436810540.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2695823, - "inode": 524886, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1620", - "xusr": false, - "atime": 1436810539.2695823, - "isdir": false, - "ctime": 1436810539.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8835824, - "inode": 526823, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3557", - "xusr": false, - "atime": 1436810540.8835824, - "isdir": false, - "ctime": 1436810540.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6515822, - "inode": 525288, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2022", - "xusr": false, - "atime": 1436810539.6515822, - "isdir": false, - "ctime": 1436810539.6515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9625823, - "inode": 524448, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1182", - "xusr": false, - "atime": 1436810538.9625823, - "isdir": false, - "ctime": 1436810538.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5745823, - "inode": 523929, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/663", - "xusr": false, - "atime": 1436810538.5745823, - "isdir": false, - "ctime": 1436810538.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9445822, - "inode": 524422, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1156", - "xusr": false, - "atime": 1436810538.9445822, - "isdir": false, - "ctime": 1436810538.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0265822, - "inode": 524537, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1271", - "xusr": false, - "atime": 1436810539.0265822, - "isdir": false, - "ctime": 1436810539.0265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5675824, - "inode": 525192, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1926", - "xusr": false, - "atime": 1436810539.5675824, - "isdir": false, - "ctime": 1436810539.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4115822, - "inode": 523711, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/445", - "xusr": false, - "atime": 1436810538.4115822, - "isdir": false, - "ctime": 1436810538.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2775824, - "inode": 523566, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/300", - "xusr": false, - "atime": 1436810538.2775824, - "isdir": false, - "ctime": 1436810538.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4945824, - "inode": 525115, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1849", - "xusr": false, - "atime": 1436810539.4945824, - "isdir": false, - "ctime": 1436810539.4945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8765824, - "inode": 525558, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2292", - "xusr": false, - "atime": 1436810539.8765824, - "isdir": false, - "ctime": 1436810539.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7385824, - "inode": 525376, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2110", - "xusr": false, - "atime": 1436810539.7385824, - "isdir": false, - "ctime": 1436810539.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6885824, - "inode": 524084, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/818", - "xusr": false, - "atime": 1436810538.6885824, - "isdir": false, - "ctime": 1436810538.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9035823, - "inode": 524366, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1100", - "xusr": false, - "atime": 1436810538.9035823, - "isdir": false, - "ctime": 1436810538.9035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1365824, - "inode": 524695, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1429", - "xusr": false, - "atime": 1436810539.1365824, - "isdir": false, - "ctime": 1436810539.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6355822, - "inode": 526474, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3208", - "xusr": false, - "atime": 1436810540.6355822, - "isdir": false, - "ctime": 1436810540.6355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8165822, - "inode": 524249, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/983", - "xusr": false, - "atime": 1436810538.8165822, - "isdir": false, - "ctime": 1436810538.8165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8625822, - "inode": 528126, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4860", - "xusr": false, - "atime": 1436810541.8625822, - "isdir": false, - "ctime": 1436810541.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5895822, - "inode": 523949, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/683", - "xusr": false, - "atime": 1436810538.5895822, - "isdir": false, - "ctime": 1436810538.5895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3695824, - "inode": 527461, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4195", - "xusr": false, - "atime": 1436810541.3695824, - "isdir": false, - "ctime": 1436810541.3695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8595824, - "inode": 524306, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1040", - "xusr": false, - "atime": 1436810538.8595824, - "isdir": false, - "ctime": 1436810538.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8595824, - "inode": 525535, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2269", - "xusr": false, - "atime": 1436810539.8595824, - "isdir": false, - "ctime": 1436810539.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2645824, - "inode": 526012, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2746", - "xusr": false, - "atime": 1436810540.2645824, - "isdir": false, - "ctime": 1436810540.2645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6565824, - "inode": 525293, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2027", - "xusr": false, - "atime": 1436810539.6565824, - "isdir": false, - "ctime": 1436810539.6565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7885823, - "inode": 525440, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2174", - "xusr": false, - "atime": 1436810539.7885823, - "isdir": false, - "ctime": 1436810539.7885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5505824, - "inode": 527699, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4433", - "xusr": false, - "atime": 1436810541.5505824, - "isdir": false, - "ctime": 1436810541.5505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3535824, - "inode": 526126, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2860", - "xusr": false, - "atime": 1436810540.3535824, - "isdir": false, - "ctime": 1436810540.3535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2065823, - "inode": 524795, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1529", - "xusr": false, - "atime": 1436810539.2065823, - "isdir": false, - "ctime": 1436810539.2065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2315824, - "inode": 524831, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1565", - "xusr": false, - "atime": 1436810539.2315824, - "isdir": false, - "ctime": 1436810539.2315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1165824, - "inode": 524666, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1400", - "xusr": false, - "atime": 1436810539.1165824, - "isdir": false, - "ctime": 1436810539.1165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2895823, - "inode": 526039, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2773", - "xusr": false, - "atime": 1436810540.2895823, - "isdir": false, - "ctime": 1436810540.2895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0575824, - "inode": 524581, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1315", - "xusr": false, - "atime": 1436810539.0575824, - "isdir": false, - "ctime": 1436810539.0575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7535822, - "inode": 525392, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2126", - "xusr": false, - "atime": 1436810539.7535822, - "isdir": false, - "ctime": 1436810539.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8215823, - "inode": 524255, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/989", - "xusr": false, - "atime": 1436810538.8215823, - "isdir": false, - "ctime": 1436810538.8215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6765823, - "inode": 526532, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3266", - "xusr": false, - "atime": 1436810540.6765823, - "isdir": false, - "ctime": 1436810540.6765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2265823, - "inode": 524824, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1558", - "xusr": false, - "atime": 1436810539.2265823, - "isdir": false, - "ctime": 1436810539.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8355823, - "inode": 528090, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4824", - "xusr": false, - "atime": 1436810541.8355823, - "isdir": false, - "ctime": 1436810541.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5985823, - "inode": 525221, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1955", - "xusr": false, - "atime": 1436810539.5985823, - "isdir": false, - "ctime": 1436810539.5985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0815823, - "inode": 523293, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/27", - "xusr": false, - "atime": 1436810538.0815823, - "isdir": false, - "ctime": 1436810538.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1595824, - "inode": 523399, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/133", - "xusr": false, - "atime": 1436810538.1595824, - "isdir": false, - "ctime": 1436810538.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4895823, - "inode": 523812, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/546", - "xusr": false, - "atime": 1436810538.4895823, - "isdir": false, - "ctime": 1436810538.4895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7525823, - "inode": 527976, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4710", - "xusr": false, - "atime": 1436810541.7525823, - "isdir": false, - "ctime": 1436810541.7525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6755824, - "inode": 527870, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4604", - "xusr": false, - "atime": 1436810541.6755824, - "isdir": false, - "ctime": 1436810541.6755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3625822, - "inode": 526139, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2873", - "xusr": false, - "atime": 1436810540.3625822, - "isdir": false, - "ctime": 1436810540.3625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6665823, - "inode": 525303, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2037", - "xusr": false, - "atime": 1436810539.6665823, - "isdir": false, - "ctime": 1436810539.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1755824, - "inode": 527225, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3959", - "xusr": false, - "atime": 1436810541.1755824, - "isdir": false, - "ctime": 1436810541.1755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9565823, - "inode": 526925, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3659", - "xusr": false, - "atime": 1436810540.9565823, - "isdir": false, - "ctime": 1436810540.9565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1155822, - "inode": 524664, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1398", - "xusr": false, - "atime": 1436810539.1155822, - "isdir": false, - "ctime": 1436810539.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2765822, - "inode": 527365, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4099", - "xusr": false, - "atime": 1436810541.2765822, - "isdir": false, - "ctime": 1436810541.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0075824, - "inode": 524510, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1244", - "xusr": false, - "atime": 1436810539.0075824, - "isdir": false, - "ctime": 1436810539.0075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6615822, - "inode": 525299, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2033", - "xusr": false, - "atime": 1436810539.6615822, - "isdir": false, - "ctime": 1436810539.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5355823, - "inode": 527678, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4412", - "xusr": false, - "atime": 1436810541.5355823, - "isdir": false, - "ctime": 1436810541.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8885822, - "inode": 524345, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1079", - "xusr": false, - "atime": 1436810538.8885822, - "isdir": false, - "ctime": 1436810538.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1155822, - "inode": 523336, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/70", - "xusr": false, - "atime": 1436810538.1155822, - "isdir": false, - "ctime": 1436810538.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8715823, - "inode": 526805, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3539", - "xusr": false, - "atime": 1436810540.8715823, - "isdir": false, - "ctime": 1436810540.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1065824, - "inode": 524651, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1385", - "xusr": false, - "atime": 1436810539.1065824, - "isdir": false, - "ctime": 1436810539.1065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3255823, - "inode": 523621, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/355", - "xusr": false, - "atime": 1436810538.3255823, - "isdir": false, - "ctime": 1436810538.3255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4165823, - "inode": 527514, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4248", - "xusr": false, - "atime": 1436810541.4165823, - "isdir": false, - "ctime": 1436810541.4165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6065824, - "inode": 526434, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3168", - "xusr": false, - "atime": 1436810540.6065824, - "isdir": false, - "ctime": 1436810540.6065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6685822, - "inode": 526520, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3254", - "xusr": false, - "atime": 1436810540.6685822, - "isdir": false, - "ctime": 1436810540.6685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8645823, - "inode": 528129, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4863", - "xusr": false, - "atime": 1436810541.8645823, - "isdir": false, - "ctime": 1436810541.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4085822, - "inode": 523707, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/441", - "xusr": false, - "atime": 1436810538.4085822, - "isdir": false, - "ctime": 1436810538.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4625823, - "inode": 525079, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1813", - "xusr": false, - "atime": 1436810539.4625823, - "isdir": false, - "ctime": 1436810539.4625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4665823, - "inode": 526270, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3004", - "xusr": false, - "atime": 1436810540.4665823, - "isdir": false, - "ctime": 1436810540.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7385824, - "inode": 526620, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3354", - "xusr": false, - "atime": 1436810540.7385824, - "isdir": false, - "ctime": 1436810540.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6675823, - "inode": 524056, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/790", - "xusr": false, - "atime": 1436810538.6675823, - "isdir": false, - "ctime": 1436810538.6675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8265824, - "inode": 524262, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/996", - "xusr": false, - "atime": 1436810538.8265824, - "isdir": false, - "ctime": 1436810538.8265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9025824, - "inode": 526850, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3584", - "xusr": false, - "atime": 1436810540.9025824, - "isdir": false, - "ctime": 1436810540.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4635823, - "inode": 523777, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/511", - "xusr": false, - "atime": 1436810538.4635823, - "isdir": false, - "ctime": 1436810538.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1185822, - "inode": 527149, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3883", - "xusr": false, - "atime": 1436810541.1185822, - "isdir": false, - "ctime": 1436810541.1185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6235824, - "inode": 523996, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/730", - "xusr": false, - "atime": 1436810538.6235824, - "isdir": false, - "ctime": 1436810538.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6515822, - "inode": 524034, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/768", - "xusr": false, - "atime": 1436810538.6515822, - "isdir": false, - "ctime": 1436810538.6515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5265822, - "inode": 525146, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1880", - "xusr": false, - "atime": 1436810539.5265822, - "isdir": false, - "ctime": 1436810539.5265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5255823, - "inode": 526323, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3057", - "xusr": false, - "atime": 1436810540.5255823, - "isdir": false, - "ctime": 1436810540.5255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5325823, - "inode": 526332, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3066", - "xusr": false, - "atime": 1436810540.5325823, - "isdir": false, - "ctime": 1436810540.5325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0615823, - "inode": 524587, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1321", - "xusr": false, - "atime": 1436810539.0615823, - "isdir": false, - "ctime": 1436810539.0615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5515823, - "inode": 526357, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3091", - "xusr": false, - "atime": 1436810540.5515823, - "isdir": false, - "ctime": 1436810540.5515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5555823, - "inode": 525175, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1909", - "xusr": false, - "atime": 1436810539.5555823, - "isdir": false, - "ctime": 1436810539.5555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6055822, - "inode": 523972, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/706", - "xusr": false, - "atime": 1436810538.6055822, - "isdir": false, - "ctime": 1436810538.6055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8885822, - "inode": 528164, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4898", - "xusr": false, - "atime": 1436810541.8885822, - "isdir": false, - "ctime": 1436810541.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0005822, - "inode": 524500, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1234", - "xusr": false, - "atime": 1436810539.0005822, - "isdir": false, - "ctime": 1436810539.0005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9855824, - "inode": 525708, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2442", - "xusr": false, - "atime": 1436810539.9855824, - "isdir": false, - "ctime": 1436810539.9855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7715824, - "inode": 528003, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4737", - "xusr": false, - "atime": 1436810541.7715824, - "isdir": false, - "ctime": 1436810541.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1865823, - "inode": 525925, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2659", - "xusr": false, - "atime": 1436810540.1865823, - "isdir": false, - "ctime": 1436810540.1865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4405823, - "inode": 525063, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1797", - "xusr": false, - "atime": 1436810539.4405823, - "isdir": false, - "ctime": 1436810539.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3505824, - "inode": 524982, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1716", - "xusr": false, - "atime": 1436810539.3505824, - "isdir": false, - "ctime": 1436810539.3505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6985824, - "inode": 527903, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4637", - "xusr": false, - "atime": 1436810541.6985824, - "isdir": false, - "ctime": 1436810541.6985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0115824, - "inode": 525744, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2478", - "xusr": false, - "atime": 1436810540.0115824, - "isdir": false, - "ctime": 1436810540.0115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9175823, - "inode": 524386, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1120", - "xusr": false, - "atime": 1436810538.9175823, - "isdir": false, - "ctime": 1436810538.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2945824, - "inode": 527391, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4125", - "xusr": false, - "atime": 1436810541.2945824, - "isdir": false, - "ctime": 1436810541.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7285824, - "inode": 526606, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3340", - "xusr": false, - "atime": 1436810540.7285824, - "isdir": false, - "ctime": 1436810540.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8185823, - "inode": 525476, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2210", - "xusr": false, - "atime": 1436810539.8185823, - "isdir": false, - "ctime": 1436810539.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6395824, - "inode": 526480, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3214", - "xusr": false, - "atime": 1436810540.6395824, - "isdir": false, - "ctime": 1436810540.6395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8405824, - "inode": 526762, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3496", - "xusr": false, - "atime": 1436810540.8405824, - "isdir": false, - "ctime": 1436810540.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1595824, - "inode": 527205, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3939", - "xusr": false, - "atime": 1436810541.1595824, - "isdir": false, - "ctime": 1436810541.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5925822, - "inode": 526414, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3148", - "xusr": false, - "atime": 1436810540.5925822, - "isdir": false, - "ctime": 1436810540.5925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8595824, - "inode": 524307, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1041", - "xusr": false, - "atime": 1436810538.8595824, - "isdir": false, - "ctime": 1436810538.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6735823, - "inode": 526528, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3262", - "xusr": false, - "atime": 1436810540.6735823, - "isdir": false, - "ctime": 1436810540.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6825824, - "inode": 524076, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/810", - "xusr": false, - "atime": 1436810538.6825824, - "isdir": false, - "ctime": 1436810538.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4515824, - "inode": 523759, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/493", - "xusr": false, - "atime": 1436810538.4515824, - "isdir": false, - "ctime": 1436810538.4515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6645823, - "inode": 527855, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4589", - "xusr": false, - "atime": 1436810541.6645823, - "isdir": false, - "ctime": 1436810541.6645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7285824, - "inode": 525364, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2098", - "xusr": false, - "atime": 1436810539.7285824, - "isdir": false, - "ctime": 1436810539.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0165823, - "inode": 527007, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3741", - "xusr": false, - "atime": 1436810541.0165823, - "isdir": false, - "ctime": 1436810541.0165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4985824, - "inode": 527627, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4361", - "xusr": false, - "atime": 1436810541.4985824, - "isdir": false, - "ctime": 1436810541.4985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6425824, - "inode": 525278, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2012", - "xusr": false, - "atime": 1436810539.6425824, - "isdir": false, - "ctime": 1436810539.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7635822, - "inode": 524181, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/915", - "xusr": false, - "atime": 1436810538.7635822, - "isdir": false, - "ctime": 1436810538.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2105823, - "inode": 523472, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/206", - "xusr": false, - "atime": 1436810538.2105823, - "isdir": false, - "ctime": 1436810538.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9675822, - "inode": 526941, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3675", - "xusr": false, - "atime": 1436810540.9675822, - "isdir": false, - "ctime": 1436810540.9675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8975823, - "inode": 524358, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1092", - "xusr": false, - "atime": 1436810538.8975823, - "isdir": false, - "ctime": 1436810538.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4105823, - "inode": 527507, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4241", - "xusr": false, - "atime": 1436810541.4105823, - "isdir": false, - "ctime": 1436810541.4105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8295822, - "inode": 524266, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1000", - "xusr": false, - "atime": 1436810538.8295822, - "isdir": false, - "ctime": 1436810538.8295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0925822, - "inode": 525836, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2570", - "xusr": false, - "atime": 1436810540.0925822, - "isdir": false, - "ctime": 1436810540.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5575824, - "inode": 526365, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3099", - "xusr": false, - "atime": 1436810540.5575824, - "isdir": false, - "ctime": 1436810540.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3115823, - "inode": 527411, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4145", - "xusr": false, - "atime": 1436810541.3115823, - "isdir": false, - "ctime": 1436810541.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7375822, - "inode": 525374, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2108", - "xusr": false, - "atime": 1436810539.7375822, - "isdir": false, - "ctime": 1436810539.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2365823, - "inode": 527309, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4043", - "xusr": false, - "atime": 1436810541.2365823, - "isdir": false, - "ctime": 1436810541.2365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8235824, - "inode": 528074, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4808", - "xusr": false, - "atime": 1436810541.8235824, - "isdir": false, - "ctime": 1436810541.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0995822, - "inode": 523315, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/49", - "xusr": false, - "atime": 1436810538.0995822, - "isdir": false, - "ctime": 1436810538.0995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5215824, - "inode": 527658, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4392", - "xusr": false, - "atime": 1436810541.5215824, - "isdir": false, - "ctime": 1436810541.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6755824, - "inode": 526530, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3264", - "xusr": false, - "atime": 1436810540.6755824, - "isdir": false, - "ctime": 1436810540.6755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4365823, - "inode": 526242, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2976", - "xusr": false, - "atime": 1436810540.4365823, - "isdir": false, - "ctime": 1436810540.4365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5655823, - "inode": 525188, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1922", - "xusr": false, - "atime": 1436810539.5655823, - "isdir": false, - "ctime": 1436810539.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7965822, - "inode": 525448, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2182", - "xusr": false, - "atime": 1436810539.7965822, - "isdir": false, - "ctime": 1436810539.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4005823, - "inode": 523697, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/431", - "xusr": false, - "atime": 1436810538.4005823, - "isdir": false, - "ctime": 1436810538.4005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2665823, - "inode": 526014, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2748", - "xusr": false, - "atime": 1436810540.2665823, - "isdir": false, - "ctime": 1436810540.2665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4765823, - "inode": 525096, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1830", - "xusr": false, - "atime": 1436810539.4765823, - "isdir": false, - "ctime": 1436810539.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3985822, - "inode": 527491, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4225", - "xusr": false, - "atime": 1436810541.3985822, - "isdir": false, - "ctime": 1436810541.3985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2705822, - "inode": 523557, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/291", - "xusr": false, - "atime": 1436810538.2705822, - "isdir": false, - "ctime": 1436810538.2705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8115823, - "inode": 526721, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3455", - "xusr": false, - "atime": 1436810540.8115823, - "isdir": false, - "ctime": 1436810540.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4625823, - "inode": 523775, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/509", - "xusr": false, - "atime": 1436810538.4625823, - "isdir": false, - "ctime": 1436810538.4625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7345824, - "inode": 527952, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4686", - "xusr": false, - "atime": 1436810541.7345824, - "isdir": false, - "ctime": 1436810541.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5675824, - "inode": 523919, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/653", - "xusr": false, - "atime": 1436810538.5675824, - "isdir": false, - "ctime": 1436810538.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9585824, - "inode": 524441, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1175", - "xusr": false, - "atime": 1436810538.9585824, - "isdir": false, - "ctime": 1436810538.9585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5705824, - "inode": 525196, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1930", - "xusr": false, - "atime": 1436810539.5705824, - "isdir": false, - "ctime": 1436810539.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0725822, - "inode": 525816, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2550", - "xusr": false, - "atime": 1436810540.0725822, - "isdir": false, - "ctime": 1436810540.0725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4055824, - "inode": 527500, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4234", - "xusr": false, - "atime": 1436810541.4055824, - "isdir": false, - "ctime": 1436810541.4055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2275822, - "inode": 527296, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4030", - "xusr": false, - "atime": 1436810541.2275822, - "isdir": false, - "ctime": 1436810541.2275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1075823, - "inode": 527134, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3868", - "xusr": false, - "atime": 1436810541.1075823, - "isdir": false, - "ctime": 1436810541.1075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9565823, - "inode": 528258, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4992", - "xusr": false, - "atime": 1436810541.9565823, - "isdir": false, - "ctime": 1436810541.9565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9335823, - "inode": 524407, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1141", - "xusr": false, - "atime": 1436810538.9335823, - "isdir": false, - "ctime": 1436810538.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7505822, - "inode": 526636, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3370", - "xusr": false, - "atime": 1436810540.7505822, - "isdir": false, - "ctime": 1436810540.7505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9535823, - "inode": 524435, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1169", - "xusr": false, - "atime": 1436810538.9535823, - "isdir": false, - "ctime": 1436810538.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8875823, - "inode": 528162, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4896", - "xusr": false, - "atime": 1436810541.8875823, - "isdir": false, - "ctime": 1436810541.8875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8945823, - "inode": 526838, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3572", - "xusr": false, - "atime": 1436810540.8945823, - "isdir": false, - "ctime": 1436810540.8945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3485823, - "inode": 524980, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1714", - "xusr": false, - "atime": 1436810539.3485823, - "isdir": false, - "ctime": 1436810539.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7635822, - "inode": 525404, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2138", - "xusr": false, - "atime": 1436810539.7635822, - "isdir": false, - "ctime": 1436810539.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4835823, - "inode": 526289, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3023", - "xusr": false, - "atime": 1436810540.4835823, - "isdir": false, - "ctime": 1436810540.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9755824, - "inode": 524466, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1200", - "xusr": false, - "atime": 1436810538.9755824, - "isdir": false, - "ctime": 1436810538.9755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5885823, - "inode": 523948, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/682", - "xusr": false, - "atime": 1436810538.5885823, - "isdir": false, - "ctime": 1436810538.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9325824, - "inode": 528225, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4959", - "xusr": false, - "atime": 1436810541.9325824, - "isdir": false, - "ctime": 1436810541.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6165824, - "inode": 525245, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1979", - "xusr": false, - "atime": 1436810539.6165824, - "isdir": false, - "ctime": 1436810539.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9855824, - "inode": 524481, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1215", - "xusr": false, - "atime": 1436810538.9855824, - "isdir": false, - "ctime": 1436810538.9855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8205824, - "inode": 526734, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3468", - "xusr": false, - "atime": 1436810540.8205824, - "isdir": false, - "ctime": 1436810540.8205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9385824, - "inode": 524414, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1148", - "xusr": false, - "atime": 1436810538.9385824, - "isdir": false, - "ctime": 1436810538.9385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9925823, - "inode": 524489, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1223", - "xusr": false, - "atime": 1436810538.9925823, - "isdir": false, - "ctime": 1436810538.9925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3755822, - "inode": 526157, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2891", - "xusr": false, - "atime": 1436810540.3755822, - "isdir": false, - "ctime": 1436810540.3755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2075822, - "inode": 524796, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1530", - "xusr": false, - "atime": 1436810539.2075822, - "isdir": false, - "ctime": 1436810539.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6785824, - "inode": 525313, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2047", - "xusr": false, - "atime": 1436810539.6785824, - "isdir": false, - "ctime": 1436810539.6785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6305823, - "inode": 526467, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3201", - "xusr": false, - "atime": 1436810540.6305823, - "isdir": false, - "ctime": 1436810540.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6225822, - "inode": 527799, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4533", - "xusr": false, - "atime": 1436810541.6225822, - "isdir": false, - "ctime": 1436810541.6225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8815823, - "inode": 524336, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1070", - "xusr": false, - "atime": 1436810538.8815823, - "isdir": false, - "ctime": 1436810538.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6125822, - "inode": 527785, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4519", - "xusr": false, - "atime": 1436810541.6125822, - "isdir": false, - "ctime": 1436810541.6125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1845822, - "inode": 527237, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3971", - "xusr": false, - "atime": 1436810541.1845822, - "isdir": false, - "ctime": 1436810541.1845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5195823, - "inode": 523854, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/588", - "xusr": false, - "atime": 1436810538.5195823, - "isdir": false, - "ctime": 1436810538.5195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6305823, - "inode": 527809, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4543", - "xusr": false, - "atime": 1436810541.6305823, - "isdir": false, - "ctime": 1436810541.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3535824, - "inode": 524987, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1721", - "xusr": false, - "atime": 1436810539.3535824, - "isdir": false, - "ctime": 1436810539.3535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6595824, - "inode": 526508, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3242", - "xusr": false, - "atime": 1436810540.6595824, - "isdir": false, - "ctime": 1436810540.6595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8875823, - "inode": 525574, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2308", - "xusr": false, - "atime": 1436810539.8875823, - "isdir": false, - "ctime": 1436810539.8875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3925824, - "inode": 526182, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2916", - "xusr": false, - "atime": 1436810540.3925824, - "isdir": false, - "ctime": 1436810540.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1595824, - "inode": 523398, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/132", - "xusr": false, - "atime": 1436810538.1595824, - "isdir": false, - "ctime": 1436810538.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6615822, - "inode": 527851, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4585", - "xusr": false, - "atime": 1436810541.6615822, - "isdir": false, - "ctime": 1436810541.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2575824, - "inode": 524868, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1602", - "xusr": false, - "atime": 1436810539.2575824, - "isdir": false, - "ctime": 1436810539.2575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8835824, - "inode": 528156, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4890", - "xusr": false, - "atime": 1436810541.8835824, - "isdir": false, - "ctime": 1436810541.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8535824, - "inode": 526780, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3514", - "xusr": false, - "atime": 1436810540.8535824, - "isdir": false, - "ctime": 1436810540.8535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2135823, - "inode": 524805, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1539", - "xusr": false, - "atime": 1436810539.2135823, - "isdir": false, - "ctime": 1436810539.2135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2985823, - "inode": 523597, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/331", - "xusr": false, - "atime": 1436810538.2985823, - "isdir": false, - "ctime": 1436810538.2985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6645823, - "inode": 524052, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/786", - "xusr": false, - "atime": 1436810538.6645823, - "isdir": false, - "ctime": 1436810538.6645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2855823, - "inode": 523579, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/313", - "xusr": false, - "atime": 1436810538.2855823, - "isdir": false, - "ctime": 1436810538.2855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9065824, - "inode": 524371, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1105", - "xusr": false, - "atime": 1436810538.9065824, - "isdir": false, - "ctime": 1436810538.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8335824, - "inode": 524272, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1006", - "xusr": false, - "atime": 1436810538.8335824, - "isdir": false, - "ctime": 1436810538.8335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8455822, - "inode": 525515, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2249", - "xusr": false, - "atime": 1436810539.8455822, - "isdir": false, - "ctime": 1436810539.8455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9805822, - "inode": 526959, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3693", - "xusr": false, - "atime": 1436810540.9805822, - "isdir": false, - "ctime": 1436810540.9805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6585822, - "inode": 525295, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2029", - "xusr": false, - "atime": 1436810539.6585822, - "isdir": false, - "ctime": 1436810539.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0065823, - "inode": 525738, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2472", - "xusr": false, - "atime": 1436810540.0065823, - "isdir": false, - "ctime": 1436810540.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4645822, - "inode": 527579, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4313", - "xusr": false, - "atime": 1436810541.4645822, - "isdir": false, - "ctime": 1436810541.4645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2015824, - "inode": 525941, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2675", - "xusr": false, - "atime": 1436810540.2015824, - "isdir": false, - "ctime": 1436810540.2015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2595823, - "inode": 524871, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1605", - "xusr": false, - "atime": 1436810539.2595823, - "isdir": false, - "ctime": 1436810539.2595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7485824, - "inode": 524162, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/896", - "xusr": false, - "atime": 1436810538.7485824, - "isdir": false, - "ctime": 1436810538.7485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2075822, - "inode": 525948, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2682", - "xusr": false, - "atime": 1436810540.2075822, - "isdir": false, - "ctime": 1436810540.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5305824, - "inode": 526329, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3063", - "xusr": false, - "atime": 1436810540.5305824, - "isdir": false, - "ctime": 1436810540.5305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3835824, - "inode": 525008, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1742", - "xusr": false, - "atime": 1436810539.3835824, - "isdir": false, - "ctime": 1436810539.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9715824, - "inode": 525688, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2422", - "xusr": false, - "atime": 1436810539.9715824, - "isdir": false, - "ctime": 1436810539.9715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5135822, - "inode": 527648, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4382", - "xusr": false, - "atime": 1436810541.5135822, - "isdir": false, - "ctime": 1436810541.5135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9015822, - "inode": 524363, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1097", - "xusr": false, - "atime": 1436810538.9015822, - "isdir": false, - "ctime": 1436810538.9015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9295824, - "inode": 525632, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2366", - "xusr": false, - "atime": 1436810539.9295824, - "isdir": false, - "ctime": 1436810539.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2095823, - "inode": 524799, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1533", - "xusr": false, - "atime": 1436810539.2095823, - "isdir": false, - "ctime": 1436810539.2095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4635823, - "inode": 526266, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3000", - "xusr": false, - "atime": 1436810540.4635823, - "isdir": false, - "ctime": 1436810540.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7875824, - "inode": 525439, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2173", - "xusr": false, - "atime": 1436810539.7875824, - "isdir": false, - "ctime": 1436810539.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4745822, - "inode": 525093, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1827", - "xusr": false, - "atime": 1436810539.4745822, - "isdir": false, - "ctime": 1436810539.4745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9675822, - "inode": 524455, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1189", - "xusr": false, - "atime": 1436810538.9675822, - "isdir": false, - "ctime": 1436810538.9675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2665823, - "inode": 523551, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/285", - "xusr": false, - "atime": 1436810538.2665823, - "isdir": false, - "ctime": 1436810538.2665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2835822, - "inode": 523576, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/310", - "xusr": false, - "atime": 1436810538.2835822, - "isdir": false, - "ctime": 1436810538.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9205823, - "inode": 525620, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2354", - "xusr": false, - "atime": 1436810539.9205823, - "isdir": false, - "ctime": 1436810539.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4275823, - "inode": 526230, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2964", - "xusr": false, - "atime": 1436810540.4275823, - "isdir": false, - "ctime": 1436810540.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6735823, - "inode": 527868, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4602", - "xusr": false, - "atime": 1436810541.6735823, - "isdir": false, - "ctime": 1436810541.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3945823, - "inode": 525018, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1752", - "xusr": false, - "atime": 1436810539.3945823, - "isdir": false, - "ctime": 1436810539.3945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7175822, - "inode": 526590, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3324", - "xusr": false, - "atime": 1436810540.7175822, - "isdir": false, - "ctime": 1436810540.7175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1195824, - "inode": 524670, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1404", - "xusr": false, - "atime": 1436810539.1195824, - "isdir": false, - "ctime": 1436810539.1195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9855824, - "inode": 526966, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3700", - "xusr": false, - "atime": 1436810540.9855824, - "isdir": false, - "ctime": 1436810540.9855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9195824, - "inode": 526873, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3607", - "xusr": false, - "atime": 1436810540.9195824, - "isdir": false, - "ctime": 1436810540.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6895823, - "inode": 525322, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2056", - "xusr": false, - "atime": 1436810539.6895823, - "isdir": false, - "ctime": 1436810539.6895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0295823, - "inode": 525767, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2501", - "xusr": false, - "atime": 1436810540.0295823, - "isdir": false, - "ctime": 1436810540.0295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5595822, - "inode": 523909, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/643", - "xusr": false, - "atime": 1436810538.5595822, - "isdir": false, - "ctime": 1436810538.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8865824, - "inode": 526827, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3561", - "xusr": false, - "atime": 1436810540.8865824, - "isdir": false, - "ctime": 1436810540.8865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9545822, - "inode": 524436, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1170", - "xusr": false, - "atime": 1436810538.9545822, - "isdir": false, - "ctime": 1436810538.9545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4165823, - "inode": 527515, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4249", - "xusr": false, - "atime": 1436810541.4165823, - "isdir": false, - "ctime": 1436810541.4165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9115822, - "inode": 528196, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4930", - "xusr": false, - "atime": 1436810541.9115822, - "isdir": false, - "ctime": 1436810541.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2055824, - "inode": 523466, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/200", - "xusr": false, - "atime": 1436810538.2055824, - "isdir": false, - "ctime": 1436810538.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7955823, - "inode": 524220, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/954", - "xusr": false, - "atime": 1436810538.7955823, - "isdir": false, - "ctime": 1436810538.7955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4095824, - "inode": 525035, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1769", - "xusr": false, - "atime": 1436810539.4095824, - "isdir": false, - "ctime": 1436810539.4095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1915822, - "inode": 525931, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2665", - "xusr": false, - "atime": 1436810540.1915822, - "isdir": false, - "ctime": 1436810540.1915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9105823, - "inode": 526860, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3594", - "xusr": false, - "atime": 1436810540.9105823, - "isdir": false, - "ctime": 1436810540.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7445824, - "inode": 525382, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2116", - "xusr": false, - "atime": 1436810539.7445824, - "isdir": false, - "ctime": 1436810539.7445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7035823, - "inode": 526570, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3304", - "xusr": false, - "atime": 1436810540.7035823, - "isdir": false, - "ctime": 1436810540.7035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4395823, - "inode": 526245, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2979", - "xusr": false, - "atime": 1436810540.4395823, - "isdir": false, - "ctime": 1436810540.4395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7515824, - "inode": 527975, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4709", - "xusr": false, - "atime": 1436810541.7515824, - "isdir": false, - "ctime": 1436810541.7515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5855823, - "inode": 525211, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1945", - "xusr": false, - "atime": 1436810539.5855823, - "isdir": false, - "ctime": 1436810539.5855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0815823, - "inode": 527097, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3831", - "xusr": false, - "atime": 1436810541.0815823, - "isdir": false, - "ctime": 1436810541.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4385824, - "inode": 526244, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2978", - "xusr": false, - "atime": 1436810540.4385824, - "isdir": false, - "ctime": 1436810540.4385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9855824, - "inode": 524480, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1214", - "xusr": false, - "atime": 1436810538.9855824, - "isdir": false, - "ctime": 1436810538.9855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3365824, - "inode": 524968, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1702", - "xusr": false, - "atime": 1436810539.3365824, - "isdir": false, - "ctime": 1436810539.3365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4185822, - "inode": 525047, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1781", - "xusr": false, - "atime": 1436810539.4185822, - "isdir": false, - "ctime": 1436810539.4185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7925823, - "inode": 524216, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/950", - "xusr": false, - "atime": 1436810538.7925823, - "isdir": false, - "ctime": 1436810538.7925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4455824, - "inode": 526250, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2984", - "xusr": false, - "atime": 1436810540.4455824, - "isdir": false, - "ctime": 1436810540.4455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9985824, - "inode": 526983, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3717", - "xusr": false, - "atime": 1436810540.9985824, - "isdir": false, - "ctime": 1436810540.9985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9115822, - "inode": 524378, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1112", - "xusr": false, - "atime": 1436810538.9115822, - "isdir": false, - "ctime": 1436810538.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5175824, - "inode": 525136, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1870", - "xusr": false, - "atime": 1436810539.5175824, - "isdir": false, - "ctime": 1436810539.5175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8055823, - "inode": 526713, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3447", - "xusr": false, - "atime": 1436810540.8055823, - "isdir": false, - "ctime": 1436810540.8055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8485823, - "inode": 526773, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3507", - "xusr": false, - "atime": 1436810540.8485823, - "isdir": false, - "ctime": 1436810540.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2485824, - "inode": 523525, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/259", - "xusr": false, - "atime": 1436810538.2485824, - "isdir": false, - "ctime": 1436810538.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2435822, - "inode": 524848, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1582", - "xusr": false, - "atime": 1436810539.2435822, - "isdir": false, - "ctime": 1436810539.2435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2275822, - "inode": 523496, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/230", - "xusr": false, - "atime": 1436810538.2275822, - "isdir": false, - "ctime": 1436810538.2275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7705822, - "inode": 526663, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3397", - "xusr": false, - "atime": 1436810540.7705822, - "isdir": false, - "ctime": 1436810540.7705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0915823, - "inode": 527111, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3845", - "xusr": false, - "atime": 1436810541.0915823, - "isdir": false, - "ctime": 1436810541.0915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6405823, - "inode": 524019, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/753", - "xusr": false, - "atime": 1436810538.6405823, - "isdir": false, - "ctime": 1436810538.6405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2675824, - "inode": 527352, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4086", - "xusr": false, - "atime": 1436810541.2675824, - "isdir": false, - "ctime": 1436810541.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2585824, - "inode": 527340, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4074", - "xusr": false, - "atime": 1436810541.2585824, - "isdir": false, - "ctime": 1436810541.2585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5455823, - "inode": 526349, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3083", - "xusr": false, - "atime": 1436810540.5455823, - "isdir": false, - "ctime": 1436810540.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1545823, - "inode": 525893, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2627", - "xusr": false, - "atime": 1436810540.1545823, - "isdir": false, - "ctime": 1436810540.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0615823, - "inode": 527069, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3803", - "xusr": false, - "atime": 1436810541.0615823, - "isdir": false, - "ctime": 1436810541.0615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8085823, - "inode": 524238, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/972", - "xusr": false, - "atime": 1436810538.8085823, - "isdir": false, - "ctime": 1436810538.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6355822, - "inode": 525271, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2005", - "xusr": false, - "atime": 1436810539.6355822, - "isdir": false, - "ctime": 1436810539.6355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6365824, - "inode": 526476, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3210", - "xusr": false, - "atime": 1436810540.6365824, - "isdir": false, - "ctime": 1436810540.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6015823, - "inode": 527769, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4503", - "xusr": false, - "atime": 1436810541.6015823, - "isdir": false, - "ctime": 1436810541.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6905823, - "inode": 526552, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3286", - "xusr": false, - "atime": 1436810540.6905823, - "isdir": false, - "ctime": 1436810540.6905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1605823, - "inode": 527206, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3940", - "xusr": false, - "atime": 1436810541.1605823, - "isdir": false, - "ctime": 1436810541.1605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7925823, - "inode": 528032, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4766", - "xusr": false, - "atime": 1436810541.7925823, - "isdir": false, - "ctime": 1436810541.7925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2165823, - "inode": 524810, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1544", - "xusr": false, - "atime": 1436810539.2165823, - "isdir": false, - "ctime": 1436810539.2165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0345824, - "inode": 524548, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1282", - "xusr": false, - "atime": 1436810539.0345824, - "isdir": false, - "ctime": 1436810539.0345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4145823, - "inode": 526213, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2947", - "xusr": false, - "atime": 1436810540.4145823, - "isdir": false, - "ctime": 1436810540.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9235823, - "inode": 524395, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1129", - "xusr": false, - "atime": 1436810538.9235823, - "isdir": false, - "ctime": 1436810538.9235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8385823, - "inode": 525505, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2239", - "xusr": false, - "atime": 1436810539.8385823, - "isdir": false, - "ctime": 1436810539.8385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9945824, - "inode": 525720, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2454", - "xusr": false, - "atime": 1436810539.9945824, - "isdir": false, - "ctime": 1436810539.9945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9385824, - "inode": 526900, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3634", - "xusr": false, - "atime": 1436810540.9385824, - "isdir": false, - "ctime": 1436810540.9385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3775823, - "inode": 523670, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/404", - "xusr": false, - "atime": 1436810538.3775823, - "isdir": false, - "ctime": 1436810538.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0355823, - "inode": 525776, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2510", - "xusr": false, - "atime": 1436810540.0355823, - "isdir": false, - "ctime": 1436810540.0355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0755823, - "inode": 524607, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1341", - "xusr": false, - "atime": 1436810539.0755823, - "isdir": false, - "ctime": 1436810539.0755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7755823, - "inode": 524195, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/929", - "xusr": false, - "atime": 1436810538.7755823, - "isdir": false, - "ctime": 1436810538.7755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7125823, - "inode": 524116, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/850", - "xusr": false, - "atime": 1436810538.7125823, - "isdir": false, - "ctime": 1436810538.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5765822, - "inode": 527734, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4468", - "xusr": false, - "atime": 1436810541.5765822, - "isdir": false, - "ctime": 1436810541.5765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7275822, - "inode": 527942, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4676", - "xusr": false, - "atime": 1436810541.7275822, - "isdir": false, - "ctime": 1436810541.7275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8885822, - "inode": 528163, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4897", - "xusr": false, - "atime": 1436810541.8885822, - "isdir": false, - "ctime": 1436810541.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9775822, - "inode": 524469, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1203", - "xusr": false, - "atime": 1436810538.9775822, - "isdir": false, - "ctime": 1436810538.9775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1005824, - "inode": 527123, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3857", - "xusr": false, - "atime": 1436810541.1005824, - "isdir": false, - "ctime": 1436810541.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7525823, - "inode": 526639, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3373", - "xusr": false, - "atime": 1436810540.7525823, - "isdir": false, - "ctime": 1436810540.7525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5465822, - "inode": 526351, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3085", - "xusr": false, - "atime": 1436810540.5465822, - "isdir": false, - "ctime": 1436810540.5465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1705823, - "inode": 525909, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2643", - "xusr": false, - "atime": 1436810540.1705823, - "isdir": false, - "ctime": 1436810540.1705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6225822, - "inode": 526456, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3190", - "xusr": false, - "atime": 1436810540.6225822, - "isdir": false, - "ctime": 1436810540.6225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3325822, - "inode": 526097, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2831", - "xusr": false, - "atime": 1436810540.3325822, - "isdir": false, - "ctime": 1436810540.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1785824, - "inode": 523426, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/160", - "xusr": false, - "atime": 1436810538.1785824, - "isdir": false, - "ctime": 1436810538.1785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0085824, - "inode": 524511, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1245", - "xusr": false, - "atime": 1436810539.0085824, - "isdir": false, - "ctime": 1436810539.0085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2645824, - "inode": 527348, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4082", - "xusr": false, - "atime": 1436810541.2645824, - "isdir": false, - "ctime": 1436810541.2645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5855823, - "inode": 527747, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4481", - "xusr": false, - "atime": 1436810541.5855823, - "isdir": false, - "ctime": 1436810541.5855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8605824, - "inode": 526790, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3524", - "xusr": false, - "atime": 1436810540.8605824, - "isdir": false, - "ctime": 1436810540.8605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5805824, - "inode": 527740, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4474", - "xusr": false, - "atime": 1436810541.5805824, - "isdir": false, - "ctime": 1436810541.5805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2705822, - "inode": 526019, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2753", - "xusr": false, - "atime": 1436810540.2705822, - "isdir": false, - "ctime": 1436810540.2705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1015823, - "inode": 523318, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/52", - "xusr": false, - "atime": 1436810538.1015823, - "isdir": false, - "ctime": 1436810538.1015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2035823, - "inode": 523462, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/196", - "xusr": false, - "atime": 1436810538.2035823, - "isdir": false, - "ctime": 1436810538.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1025822, - "inode": 527126, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3860", - "xusr": false, - "atime": 1436810541.1025822, - "isdir": false, - "ctime": 1436810541.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4015822, - "inode": 525026, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1760", - "xusr": false, - "atime": 1436810539.4015822, - "isdir": false, - "ctime": 1436810539.4015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2125823, - "inode": 524804, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1538", - "xusr": false, - "atime": 1436810539.2125823, - "isdir": false, - "ctime": 1436810539.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9135823, - "inode": 525610, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2344", - "xusr": false, - "atime": 1436810539.9135823, - "isdir": false, - "ctime": 1436810539.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3105824, - "inode": 527409, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4143", - "xusr": false, - "atime": 1436810541.3105824, - "isdir": false, - "ctime": 1436810541.3105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1355822, - "inode": 525875, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2609", - "xusr": false, - "atime": 1436810540.1355822, - "isdir": false, - "ctime": 1436810540.1355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0795822, - "inode": 525823, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2557", - "xusr": false, - "atime": 1436810540.0795822, - "isdir": false, - "ctime": 1436810540.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0275824, - "inode": 524538, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1272", - "xusr": false, - "atime": 1436810539.0275824, - "isdir": false, - "ctime": 1436810539.0275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9405823, - "inode": 528236, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4970", - "xusr": false, - "atime": 1436810541.9405823, - "isdir": false, - "ctime": 1436810541.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9985824, - "inode": 525726, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2460", - "xusr": false, - "atime": 1436810539.9985824, - "isdir": false, - "ctime": 1436810539.9985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3605824, - "inode": 524990, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1724", - "xusr": false, - "atime": 1436810539.3605824, - "isdir": false, - "ctime": 1436810539.3605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8115823, - "inode": 525467, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2201", - "xusr": false, - "atime": 1436810539.8115823, - "isdir": false, - "ctime": 1436810539.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1755824, - "inode": 523422, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/156", - "xusr": false, - "atime": 1436810538.1755824, - "isdir": false, - "ctime": 1436810538.1755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6785824, - "inode": 526534, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3268", - "xusr": false, - "atime": 1436810540.6785824, - "isdir": false, - "ctime": 1436810540.6785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4195824, - "inode": 527519, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4253", - "xusr": false, - "atime": 1436810541.4195824, - "isdir": false, - "ctime": 1436810541.4195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5395823, - "inode": 526341, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3075", - "xusr": false, - "atime": 1436810540.5395823, - "isdir": false, - "ctime": 1436810540.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3215823, - "inode": 526082, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2816", - "xusr": false, - "atime": 1436810540.3215823, - "isdir": false, - "ctime": 1436810540.3215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6335824, - "inode": 526472, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3206", - "xusr": false, - "atime": 1436810540.6335824, - "isdir": false, - "ctime": 1436810540.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1575823, - "inode": 527202, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3936", - "xusr": false, - "atime": 1436810541.1575823, - "isdir": false, - "ctime": 1436810541.1575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7235823, - "inode": 526599, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3333", - "xusr": false, - "atime": 1436810540.7235823, - "isdir": false, - "ctime": 1436810540.7235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2715824, - "inode": 523558, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/292", - "xusr": false, - "atime": 1436810538.2715824, - "isdir": false, - "ctime": 1436810538.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1465824, - "inode": 523381, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/115", - "xusr": false, - "atime": 1436810538.1465824, - "isdir": false, - "ctime": 1436810538.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7965822, - "inode": 524221, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/955", - "xusr": false, - "atime": 1436810538.7965822, - "isdir": false, - "ctime": 1436810538.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5915823, - "inode": 523952, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/686", - "xusr": false, - "atime": 1436810538.5915823, - "isdir": false, - "ctime": 1436810538.5915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8015823, - "inode": 524229, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/963", - "xusr": false, - "atime": 1436810538.8015823, - "isdir": false, - "ctime": 1436810538.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2745824, - "inode": 523563, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/297", - "xusr": false, - "atime": 1436810538.2745824, - "isdir": false, - "ctime": 1436810538.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1895823, - "inode": 524770, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1504", - "xusr": false, - "atime": 1436810539.1895823, - "isdir": false, - "ctime": 1436810539.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0375824, - "inode": 525779, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2513", - "xusr": false, - "atime": 1436810540.0375824, - "isdir": false, - "ctime": 1436810540.0375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6465824, - "inode": 524027, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/761", - "xusr": false, - "atime": 1436810538.6465824, - "isdir": false, - "ctime": 1436810538.6465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5735824, - "inode": 525199, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1933", - "xusr": false, - "atime": 1436810539.5735824, - "isdir": false, - "ctime": 1436810539.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8585823, - "inode": 525533, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2267", - "xusr": false, - "atime": 1436810539.8585823, - "isdir": false, - "ctime": 1436810539.8585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5745823, - "inode": 526389, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3123", - "xusr": false, - "atime": 1436810540.5745823, - "isdir": false, - "ctime": 1436810540.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9325824, - "inode": 528224, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4958", - "xusr": false, - "atime": 1436810541.9325824, - "isdir": false, - "ctime": 1436810541.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7635822, - "inode": 527991, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4725", - "xusr": false, - "atime": 1436810541.7635822, - "isdir": false, - "ctime": 1436810541.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5635824, - "inode": 525186, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1920", - "xusr": false, - "atime": 1436810539.5635824, - "isdir": false, - "ctime": 1436810539.5635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6155822, - "inode": 523985, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/719", - "xusr": false, - "atime": 1436810538.6155822, - "isdir": false, - "ctime": 1436810538.6155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6235824, - "inode": 526458, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3192", - "xusr": false, - "atime": 1436810540.6235824, - "isdir": false, - "ctime": 1436810540.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9675822, - "inode": 526940, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3674", - "xusr": false, - "atime": 1436810540.9675822, - "isdir": false, - "ctime": 1436810540.9675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2395823, - "inode": 527314, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4048", - "xusr": false, - "atime": 1436810541.2395823, - "isdir": false, - "ctime": 1436810541.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9155824, - "inode": 526868, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3602", - "xusr": false, - "atime": 1436810540.9155824, - "isdir": false, - "ctime": 1436810540.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5085824, - "inode": 527641, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4375", - "xusr": false, - "atime": 1436810541.5085824, - "isdir": false, - "ctime": 1436810541.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4195824, - "inode": 525048, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1782", - "xusr": false, - "atime": 1436810539.4195824, - "isdir": false, - "ctime": 1436810539.4195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9715824, - "inode": 524460, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1194", - "xusr": false, - "atime": 1436810538.9715824, - "isdir": false, - "ctime": 1436810538.9715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4465823, - "inode": 527555, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4289", - "xusr": false, - "atime": 1436810541.4465823, - "isdir": false, - "ctime": 1436810541.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0625823, - "inode": 524588, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1322", - "xusr": false, - "atime": 1436810539.0625823, - "isdir": false, - "ctime": 1436810539.0625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4735823, - "inode": 523790, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/524", - "xusr": false, - "atime": 1436810538.4735823, - "isdir": false, - "ctime": 1436810538.4735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9415822, - "inode": 524418, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1152", - "xusr": false, - "atime": 1436810538.9415822, - "isdir": false, - "ctime": 1436810538.9415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1845822, - "inode": 525922, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2656", - "xusr": false, - "atime": 1436810540.1845822, - "isdir": false, - "ctime": 1436810540.1845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3005824, - "inode": 524930, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1664", - "xusr": false, - "atime": 1436810539.3005824, - "isdir": false, - "ctime": 1436810539.3005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6845822, - "inode": 526543, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3277", - "xusr": false, - "atime": 1436810540.6845822, - "isdir": false, - "ctime": 1436810540.6845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6875823, - "inode": 525321, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2055", - "xusr": false, - "atime": 1436810539.6875823, - "isdir": false, - "ctime": 1436810539.6875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7375822, - "inode": 524147, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/881", - "xusr": false, - "atime": 1436810538.7375822, - "isdir": false, - "ctime": 1436810538.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3735824, - "inode": 526154, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2888", - "xusr": false, - "atime": 1436810540.3735824, - "isdir": false, - "ctime": 1436810540.3735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3465824, - "inode": 526117, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2851", - "xusr": false, - "atime": 1436810540.3465824, - "isdir": false, - "ctime": 1436810540.3465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8595824, - "inode": 526789, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3523", - "xusr": false, - "atime": 1436810540.8595824, - "isdir": false, - "ctime": 1436810540.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0745823, - "inode": 527088, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3822", - "xusr": false, - "atime": 1436810541.0745823, - "isdir": false, - "ctime": 1436810541.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1305823, - "inode": 523358, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/92", - "xusr": false, - "atime": 1436810538.1305823, - "isdir": false, - "ctime": 1436810538.1305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8285823, - "inode": 528080, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4814", - "xusr": false, - "atime": 1436810541.8285823, - "isdir": false, - "ctime": 1436810541.8285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4845824, - "inode": 526290, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3024", - "xusr": false, - "atime": 1436810540.4845824, - "isdir": false, - "ctime": 1436810540.4845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0875823, - "inode": 524625, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1359", - "xusr": false, - "atime": 1436810539.0875823, - "isdir": false, - "ctime": 1436810539.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7605822, - "inode": 527987, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4721", - "xusr": false, - "atime": 1436810541.7605822, - "isdir": false, - "ctime": 1436810541.7605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6295824, - "inode": 527808, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4542", - "xusr": false, - "atime": 1436810541.6295824, - "isdir": false, - "ctime": 1436810541.6295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1105824, - "inode": 527138, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3872", - "xusr": false, - "atime": 1436810541.1105824, - "isdir": false, - "ctime": 1436810541.1105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4035823, - "inode": 527497, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4231", - "xusr": false, - "atime": 1436810541.4035823, - "isdir": false, - "ctime": 1436810541.4035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7645824, - "inode": 525406, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2140", - "xusr": false, - "atime": 1436810539.7645824, - "isdir": false, - "ctime": 1436810539.7645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0155823, - "inode": 527006, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3740", - "xusr": false, - "atime": 1436810541.0155823, - "isdir": false, - "ctime": 1436810541.0155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4765823, - "inode": 527596, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4330", - "xusr": false, - "atime": 1436810541.4765823, - "isdir": false, - "ctime": 1436810541.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2925823, - "inode": 523588, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/322", - "xusr": false, - "atime": 1436810538.2925823, - "isdir": false, - "ctime": 1436810538.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7815824, - "inode": 528017, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4751", - "xusr": false, - "atime": 1436810541.7815824, - "isdir": false, - "ctime": 1436810541.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1045823, - "inode": 525847, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2581", - "xusr": false, - "atime": 1436810540.1045823, - "isdir": false, - "ctime": 1436810540.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8795824, - "inode": 526817, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3551", - "xusr": false, - "atime": 1436810540.8795824, - "isdir": false, - "ctime": 1436810540.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7815824, - "inode": 525430, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2164", - "xusr": false, - "atime": 1436810539.7815824, - "isdir": false, - "ctime": 1436810539.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5355823, - "inode": 527677, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4411", - "xusr": false, - "atime": 1436810541.5355823, - "isdir": false, - "ctime": 1436810541.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1695824, - "inode": 527217, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3951", - "xusr": false, - "atime": 1436810541.1695824, - "isdir": false, - "ctime": 1436810541.1695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4155824, - "inode": 526214, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2948", - "xusr": false, - "atime": 1436810540.4155824, - "isdir": false, - "ctime": 1436810540.4155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7255824, - "inode": 525361, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2095", - "xusr": false, - "atime": 1436810539.7255824, - "isdir": false, - "ctime": 1436810539.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7285824, - "inode": 524136, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/870", - "xusr": false, - "atime": 1436810538.7285824, - "isdir": false, - "ctime": 1436810538.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1155822, - "inode": 524665, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1399", - "xusr": false, - "atime": 1436810539.1155822, - "isdir": false, - "ctime": 1436810539.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2525823, - "inode": 526001, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2735", - "xusr": false, - "atime": 1436810540.2525823, - "isdir": false, - "ctime": 1436810540.2525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1075823, - "inode": 527133, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3867", - "xusr": false, - "atime": 1436810541.1075823, - "isdir": false, - "ctime": 1436810541.1075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9535823, - "inode": 526920, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3654", - "xusr": false, - "atime": 1436810540.9535823, - "isdir": false, - "ctime": 1436810540.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3435824, - "inode": 523641, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/375", - "xusr": false, - "atime": 1436810538.3435824, - "isdir": false, - "ctime": 1436810538.3435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8455822, - "inode": 524288, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1022", - "xusr": false, - "atime": 1436810538.8455822, - "isdir": false, - "ctime": 1436810538.8455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8255823, - "inode": 526741, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3475", - "xusr": false, - "atime": 1436810540.8255823, - "isdir": false, - "ctime": 1436810540.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6765823, - "inode": 526531, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3265", - "xusr": false, - "atime": 1436810540.6765823, - "isdir": false, - "ctime": 1436810540.6765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9125824, - "inode": 526863, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3597", - "xusr": false, - "atime": 1436810540.9125824, - "isdir": false, - "ctime": 1436810540.9125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6935823, - "inode": 526555, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3289", - "xusr": false, - "atime": 1436810540.6935823, - "isdir": false, - "ctime": 1436810540.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9265823, - "inode": 525627, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2361", - "xusr": false, - "atime": 1436810539.9265823, - "isdir": false, - "ctime": 1436810539.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4905822, - "inode": 525111, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1845", - "xusr": false, - "atime": 1436810539.4905822, - "isdir": false, - "ctime": 1436810539.4905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7885823, - "inode": 524211, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/945", - "xusr": false, - "atime": 1436810538.7885823, - "isdir": false, - "ctime": 1436810538.7885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3345823, - "inode": 526100, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2834", - "xusr": false, - "atime": 1436810540.3345823, - "isdir": false, - "ctime": 1436810540.3345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1315823, - "inode": 523359, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/93", - "xusr": false, - "atime": 1436810538.1315823, - "isdir": false, - "ctime": 1436810538.1315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2535822, - "inode": 524863, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1597", - "xusr": false, - "atime": 1436810539.2535822, - "isdir": false, - "ctime": 1436810539.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2005823, - "inode": 523458, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/192", - "xusr": false, - "atime": 1436810538.2005823, - "isdir": false, - "ctime": 1436810538.2005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8575823, - "inode": 528119, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4853", - "xusr": false, - "atime": 1436810541.8575823, - "isdir": false, - "ctime": 1436810541.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5205822, - "inode": 527657, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4391", - "xusr": false, - "atime": 1436810541.5205822, - "isdir": false, - "ctime": 1436810541.5205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4755824, - "inode": 525094, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1828", - "xusr": false, - "atime": 1436810539.4755824, - "isdir": false, - "ctime": 1436810539.4755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1855824, - "inode": 523437, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/171", - "xusr": false, - "atime": 1436810538.1855824, - "isdir": false, - "ctime": 1436810538.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6625824, - "inode": 527852, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4586", - "xusr": false, - "atime": 1436810541.6625824, - "isdir": false, - "ctime": 1436810541.6625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5035822, - "inode": 527633, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4367", - "xusr": false, - "atime": 1436810541.5035822, - "isdir": false, - "ctime": 1436810541.5035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4995823, - "inode": 523826, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/560", - "xusr": false, - "atime": 1436810538.4995823, - "isdir": false, - "ctime": 1436810538.4995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8175824, - "inode": 525475, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2209", - "xusr": false, - "atime": 1436810539.8175824, - "isdir": false, - "ctime": 1436810539.8175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8865824, - "inode": 528160, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4894", - "xusr": false, - "atime": 1436810541.8865824, - "isdir": false, - "ctime": 1436810541.8865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6565824, - "inode": 527844, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4578", - "xusr": false, - "atime": 1436810541.6565824, - "isdir": false, - "ctime": 1436810541.6565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2225823, - "inode": 527290, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4024", - "xusr": false, - "atime": 1436810541.2225823, - "isdir": false, - "ctime": 1436810541.2225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1915822, - "inode": 523445, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/179", - "xusr": false, - "atime": 1436810538.1915822, - "isdir": false, - "ctime": 1436810538.1915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1855824, - "inode": 525923, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2657", - "xusr": false, - "atime": 1436810540.1855824, - "isdir": false, - "ctime": 1436810540.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8455822, - "inode": 528103, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4837", - "xusr": false, - "atime": 1436810541.8455822, - "isdir": false, - "ctime": 1436810541.8455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4175823, - "inode": 523719, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/453", - "xusr": false, - "atime": 1436810538.4175823, - "isdir": false, - "ctime": 1436810538.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1695824, - "inode": 525908, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2642", - "xusr": false, - "atime": 1436810540.1695824, - "isdir": false, - "ctime": 1436810540.1695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8295822, - "inode": 526746, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3480", - "xusr": false, - "atime": 1436810540.8295822, - "isdir": false, - "ctime": 1436810540.8295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5735824, - "inode": 523927, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/661", - "xusr": false, - "atime": 1436810538.5735824, - "isdir": false, - "ctime": 1436810538.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0505824, - "inode": 525795, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2529", - "xusr": false, - "atime": 1436810540.0505824, - "isdir": false, - "ctime": 1436810540.0505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6045823, - "inode": 525230, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1964", - "xusr": false, - "atime": 1436810539.6045823, - "isdir": false, - "ctime": 1436810539.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6005824, - "inode": 526426, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3160", - "xusr": false, - "atime": 1436810540.6005824, - "isdir": false, - "ctime": 1436810540.6005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1735823, - "inode": 524748, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1482", - "xusr": false, - "atime": 1436810539.1735823, - "isdir": false, - "ctime": 1436810539.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6255822, - "inode": 525257, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1991", - "xusr": false, - "atime": 1436810539.6255822, - "isdir": false, - "ctime": 1436810539.6255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1095824, - "inode": 527136, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3870", - "xusr": false, - "atime": 1436810541.1095824, - "isdir": false, - "ctime": 1436810541.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9425824, - "inode": 526906, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3640", - "xusr": false, - "atime": 1436810540.9425824, - "isdir": false, - "ctime": 1436810540.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5705824, - "inode": 526383, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3117", - "xusr": false, - "atime": 1436810540.5705824, - "isdir": false, - "ctime": 1436810540.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8315823, - "inode": 525495, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2229", - "xusr": false, - "atime": 1436810539.8315823, - "isdir": false, - "ctime": 1436810539.8315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4235823, - "inode": 527524, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4258", - "xusr": false, - "atime": 1436810541.4235823, - "isdir": false, - "ctime": 1436810541.4235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5585823, - "inode": 526367, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3101", - "xusr": false, - "atime": 1436810540.5585823, - "isdir": false, - "ctime": 1436810540.5585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6375823, - "inode": 527819, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4553", - "xusr": false, - "atime": 1436810541.6375823, - "isdir": false, - "ctime": 1436810541.6375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9505823, - "inode": 526916, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3650", - "xusr": false, - "atime": 1436810540.9505823, - "isdir": false, - "ctime": 1436810540.9505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5715823, - "inode": 527727, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4461", - "xusr": false, - "atime": 1436810541.5715823, - "isdir": false, - "ctime": 1436810541.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2375822, - "inode": 524839, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1573", - "xusr": false, - "atime": 1436810539.2375822, - "isdir": false, - "ctime": 1436810539.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3425822, - "inode": 526111, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2845", - "xusr": false, - "atime": 1436810540.3425822, - "isdir": false, - "ctime": 1436810540.3425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9005823, - "inode": 525593, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2327", - "xusr": false, - "atime": 1436810539.9005823, - "isdir": false, - "ctime": 1436810539.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8715823, - "inode": 524323, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1057", - "xusr": false, - "atime": 1436810538.8715823, - "isdir": false, - "ctime": 1436810538.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3125823, - "inode": 527412, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4146", - "xusr": false, - "atime": 1436810541.3125823, - "isdir": false, - "ctime": 1436810541.3125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9915824, - "inode": 525716, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2450", - "xusr": false, - "atime": 1436810539.9915824, - "isdir": false, - "ctime": 1436810539.9915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7345824, - "inode": 525370, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2104", - "xusr": false, - "atime": 1436810539.7345824, - "isdir": false, - "ctime": 1436810539.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2335823, - "inode": 523504, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/238", - "xusr": false, - "atime": 1436810538.2335823, - "isdir": false, - "ctime": 1436810538.2335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8515823, - "inode": 525523, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2257", - "xusr": false, - "atime": 1436810539.8515823, - "isdir": false, - "ctime": 1436810539.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5865824, - "inode": 526406, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3140", - "xusr": false, - "atime": 1436810540.5865824, - "isdir": false, - "ctime": 1436810540.5865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5535824, - "inode": 523900, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/634", - "xusr": false, - "atime": 1436810538.5535824, - "isdir": false, - "ctime": 1436810538.5535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7695823, - "inode": 524188, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/922", - "xusr": false, - "atime": 1436810538.7695823, - "isdir": false, - "ctime": 1436810538.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1625824, - "inode": 527209, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3943", - "xusr": false, - "atime": 1436810541.1625824, - "isdir": false, - "ctime": 1436810541.1625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7425823, - "inode": 526625, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3359", - "xusr": false, - "atime": 1436810540.7425823, - "isdir": false, - "ctime": 1436810540.7425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8415823, - "inode": 526763, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3497", - "xusr": false, - "atime": 1436810540.8415823, - "isdir": false, - "ctime": 1436810540.8415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6505823, - "inode": 527836, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4570", - "xusr": false, - "atime": 1436810541.6505823, - "isdir": false, - "ctime": 1436810541.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4475822, - "inode": 523754, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/488", - "xusr": false, - "atime": 1436810538.4475822, - "isdir": false, - "ctime": 1436810538.4475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5355823, - "inode": 523876, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/610", - "xusr": false, - "atime": 1436810538.5355823, - "isdir": false, - "ctime": 1436810538.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0215824, - "inode": 527014, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3748", - "xusr": false, - "atime": 1436810541.0215824, - "isdir": false, - "ctime": 1436810541.0215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0495822, - "inode": 524570, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1304", - "xusr": false, - "atime": 1436810539.0495822, - "isdir": false, - "ctime": 1436810539.0495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4115822, - "inode": 526208, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2942", - "xusr": false, - "atime": 1436810540.4115822, - "isdir": false, - "ctime": 1436810540.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1895823, - "inode": 525928, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2662", - "xusr": false, - "atime": 1436810540.1895823, - "isdir": false, - "ctime": 1436810540.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3325822, - "inode": 523631, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/365", - "xusr": false, - "atime": 1436810538.3325822, - "isdir": false, - "ctime": 1436810538.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7295823, - "inode": 526607, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3341", - "xusr": false, - "atime": 1436810540.7295823, - "isdir": false, - "ctime": 1436810540.7295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5145824, - "inode": 525134, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1868", - "xusr": false, - "atime": 1436810539.5145824, - "isdir": false, - "ctime": 1436810539.5145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9325824, - "inode": 524406, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1140", - "xusr": false, - "atime": 1436810538.9325824, - "isdir": false, - "ctime": 1436810538.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1415823, - "inode": 525881, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2615", - "xusr": false, - "atime": 1436810540.1415823, - "isdir": false, - "ctime": 1436810540.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8345823, - "inode": 524274, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1008", - "xusr": false, - "atime": 1436810538.8345823, - "isdir": false, - "ctime": 1436810538.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7405822, - "inode": 527960, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4694", - "xusr": false, - "atime": 1436810541.7405822, - "isdir": false, - "ctime": 1436810541.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7685823, - "inode": 527998, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4732", - "xusr": false, - "atime": 1436810541.7685823, - "isdir": false, - "ctime": 1436810541.7685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2385824, - "inode": 525984, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2718", - "xusr": false, - "atime": 1436810540.2385824, - "isdir": false, - "ctime": 1436810540.2385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7795823, - "inode": 526676, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3410", - "xusr": false, - "atime": 1436810540.7795823, - "isdir": false, - "ctime": 1436810540.7795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5415823, - "inode": 523883, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/617", - "xusr": false, - "atime": 1436810538.5415823, - "isdir": false, - "ctime": 1436810538.5415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7725823, - "inode": 526666, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3400", - "xusr": false, - "atime": 1436810540.7725823, - "isdir": false, - "ctime": 1436810540.7725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0895822, - "inode": 524627, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1361", - "xusr": false, - "atime": 1436810539.0895822, - "isdir": false, - "ctime": 1436810539.0895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3035824, - "inode": 523603, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/337", - "xusr": false, - "atime": 1436810538.3035824, - "isdir": false, - "ctime": 1436810538.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3925824, - "inode": 526181, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2915", - "xusr": false, - "atime": 1436810540.3925824, - "isdir": false, - "ctime": 1436810540.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6385822, - "inode": 524016, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/750", - "xusr": false, - "atime": 1436810538.6385822, - "isdir": false, - "ctime": 1436810538.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2425823, - "inode": 525988, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2722", - "xusr": false, - "atime": 1436810540.2425823, - "isdir": false, - "ctime": 1436810540.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4465823, - "inode": 525066, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1800", - "xusr": false, - "atime": 1436810539.4465823, - "isdir": false, - "ctime": 1436810539.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8505824, - "inode": 525522, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2256", - "xusr": false, - "atime": 1436810539.8505824, - "isdir": false, - "ctime": 1436810539.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5365822, - "inode": 527679, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4413", - "xusr": false, - "atime": 1436810541.5365822, - "isdir": false, - "ctime": 1436810541.5365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9105823, - "inode": 524376, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1110", - "xusr": false, - "atime": 1436810538.9105823, - "isdir": false, - "ctime": 1436810538.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6915822, - "inode": 526553, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3287", - "xusr": false, - "atime": 1436810540.6915822, - "isdir": false, - "ctime": 1436810540.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5365822, - "inode": 523877, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/611", - "xusr": false, - "atime": 1436810538.5365822, - "isdir": false, - "ctime": 1436810538.5365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7855823, - "inode": 526684, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3418", - "xusr": false, - "atime": 1436810540.7855823, - "isdir": false, - "ctime": 1436810540.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6985824, - "inode": 526563, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3297", - "xusr": false, - "atime": 1436810540.6985824, - "isdir": false, - "ctime": 1436810540.6985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4225824, - "inode": 525052, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1786", - "xusr": false, - "atime": 1436810539.4225824, - "isdir": false, - "ctime": 1436810539.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2605822, - "inode": 523542, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/276", - "xusr": false, - "atime": 1436810538.2605822, - "isdir": false, - "ctime": 1436810538.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9445822, - "inode": 526908, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3642", - "xusr": false, - "atime": 1436810540.9445822, - "isdir": false, - "ctime": 1436810540.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7335823, - "inode": 526613, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3347", - "xusr": false, - "atime": 1436810540.7335823, - "isdir": false, - "ctime": 1436810540.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0605824, - "inode": 525803, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2537", - "xusr": false, - "atime": 1436810540.0605824, - "isdir": false, - "ctime": 1436810540.0605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5155823, - "inode": 527650, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4384", - "xusr": false, - "atime": 1436810541.5155823, - "isdir": false, - "ctime": 1436810541.5155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5385823, - "inode": 525158, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1892", - "xusr": false, - "atime": 1436810539.5385823, - "isdir": false, - "ctime": 1436810539.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8365824, - "inode": 524276, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1010", - "xusr": false, - "atime": 1436810538.8365824, - "isdir": false, - "ctime": 1436810538.8365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3975823, - "inode": 523692, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/426", - "xusr": false, - "atime": 1436810538.3975823, - "isdir": false, - "ctime": 1436810538.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1275823, - "inode": 524682, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1416", - "xusr": false, - "atime": 1436810539.1275823, - "isdir": false, - "ctime": 1436810539.1275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9525824, - "inode": 525662, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2396", - "xusr": false, - "atime": 1436810539.9525824, - "isdir": false, - "ctime": 1436810539.9525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2745824, - "inode": 524893, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1627", - "xusr": false, - "atime": 1436810539.2745824, - "isdir": false, - "ctime": 1436810539.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4625823, - "inode": 527577, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4311", - "xusr": false, - "atime": 1436810541.4625823, - "isdir": false, - "ctime": 1436810541.4625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8645823, - "inode": 526795, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3529", - "xusr": false, - "atime": 1436810540.8645823, - "isdir": false, - "ctime": 1436810540.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2255824, - "inode": 524822, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1556", - "xusr": false, - "atime": 1436810539.2255824, - "isdir": false, - "ctime": 1436810539.2255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8335824, - "inode": 525498, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2232", - "xusr": false, - "atime": 1436810539.8335824, - "isdir": false, - "ctime": 1436810539.8335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0025823, - "inode": 526988, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3722", - "xusr": false, - "atime": 1436810541.0025823, - "isdir": false, - "ctime": 1436810541.0025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3025823, - "inode": 523601, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/335", - "xusr": false, - "atime": 1436810538.3025823, - "isdir": false, - "ctime": 1436810538.3025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0845823, - "inode": 524620, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1354", - "xusr": false, - "atime": 1436810539.0845823, - "isdir": false, - "ctime": 1436810539.0845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0375824, - "inode": 524552, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1286", - "xusr": false, - "atime": 1436810539.0375824, - "isdir": false, - "ctime": 1436810539.0375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6615822, - "inode": 526510, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3244", - "xusr": false, - "atime": 1436810540.6615822, - "isdir": false, - "ctime": 1436810540.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2585824, - "inode": 524870, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1604", - "xusr": false, - "atime": 1436810539.2585824, - "isdir": false, - "ctime": 1436810539.2585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8955822, - "inode": 525585, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2319", - "xusr": false, - "atime": 1436810539.8955822, - "isdir": false, - "ctime": 1436810539.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4305823, - "inode": 527533, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4267", - "xusr": false, - "atime": 1436810541.4305823, - "isdir": false, - "ctime": 1436810541.4305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6275823, - "inode": 525260, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1994", - "xusr": false, - "atime": 1436810539.6275823, - "isdir": false, - "ctime": 1436810539.6275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1835823, - "inode": 525921, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2655", - "xusr": false, - "atime": 1436810540.1835823, - "isdir": false, - "ctime": 1436810540.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1715822, - "inode": 524744, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1478", - "xusr": false, - "atime": 1436810539.1715822, - "isdir": false, - "ctime": 1436810539.1715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9295824, - "inode": 528221, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4955", - "xusr": false, - "atime": 1436810541.9295824, - "isdir": false, - "ctime": 1436810541.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1435823, - "inode": 525884, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2618", - "xusr": false, - "atime": 1436810540.1435823, - "isdir": false, - "ctime": 1436810540.1435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8785822, - "inode": 526815, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3549", - "xusr": false, - "atime": 1436810540.8785822, - "isdir": false, - "ctime": 1436810540.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9255824, - "inode": 525626, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2360", - "xusr": false, - "atime": 1436810539.9255824, - "isdir": false, - "ctime": 1436810539.9255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4615824, - "inode": 526264, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2998", - "xusr": false, - "atime": 1436810540.4615824, - "isdir": false, - "ctime": 1436810540.4615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7185824, - "inode": 527930, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4664", - "xusr": false, - "atime": 1436810541.7185824, - "isdir": false, - "ctime": 1436810541.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9055824, - "inode": 528187, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4921", - "xusr": false, - "atime": 1436810541.9055824, - "isdir": false, - "ctime": 1436810541.9055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8905823, - "inode": 528166, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4900", - "xusr": false, - "atime": 1436810541.8905823, - "isdir": false, - "ctime": 1436810541.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3705823, - "inode": 526150, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2884", - "xusr": false, - "atime": 1436810540.3705823, - "isdir": false, - "ctime": 1436810540.3705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2735822, - "inode": 524892, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1626", - "xusr": false, - "atime": 1436810539.2735822, - "isdir": false, - "ctime": 1436810539.2735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5365822, - "inode": 526337, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3071", - "xusr": false, - "atime": 1436810540.5365822, - "isdir": false, - "ctime": 1436810540.5365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0735824, - "inode": 527087, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3821", - "xusr": false, - "atime": 1436810541.0735824, - "isdir": false, - "ctime": 1436810541.0735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7365823, - "inode": 524146, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/880", - "xusr": false, - "atime": 1436810538.7365823, - "isdir": false, - "ctime": 1436810538.7365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6185822, - "inode": 526451, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3185", - "xusr": false, - "atime": 1436810540.6185822, - "isdir": false, - "ctime": 1436810540.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1405823, - "inode": 524701, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1435", - "xusr": false, - "atime": 1436810539.1405823, - "isdir": false, - "ctime": 1436810539.1405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9735823, - "inode": 524463, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1197", - "xusr": false, - "atime": 1436810538.9735823, - "isdir": false, - "ctime": 1436810538.9735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0435822, - "inode": 527044, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3778", - "xusr": false, - "atime": 1436810541.0435822, - "isdir": false, - "ctime": 1436810541.0435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2115824, - "inode": 524802, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1536", - "xusr": false, - "atime": 1436810539.2115824, - "isdir": false, - "ctime": 1436810539.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9335823, - "inode": 526894, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3628", - "xusr": false, - "atime": 1436810540.9335823, - "isdir": false, - "ctime": 1436810540.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4165823, - "inode": 523718, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/452", - "xusr": false, - "atime": 1436810538.4165823, - "isdir": false, - "ctime": 1436810538.4165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5725822, - "inode": 525198, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1932", - "xusr": false, - "atime": 1436810539.5725822, - "isdir": false, - "ctime": 1436810539.5725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2925823, - "inode": 523589, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/323", - "xusr": false, - "atime": 1436810538.2925823, - "isdir": false, - "ctime": 1436810538.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1835823, - "inode": 527235, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3969", - "xusr": false, - "atime": 1436810541.1835823, - "isdir": false, - "ctime": 1436810541.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7485824, - "inode": 524161, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/895", - "xusr": false, - "atime": 1436810538.7485824, - "isdir": false, - "ctime": 1436810538.7485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7345824, - "inode": 526614, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3348", - "xusr": false, - "atime": 1436810540.7345824, - "isdir": false, - "ctime": 1436810540.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7125823, - "inode": 527922, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4656", - "xusr": false, - "atime": 1436810541.7125823, - "isdir": false, - "ctime": 1436810541.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8155823, - "inode": 524248, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/982", - "xusr": false, - "atime": 1436810538.8155823, - "isdir": false, - "ctime": 1436810538.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7975824, - "inode": 525449, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2183", - "xusr": false, - "atime": 1436810539.7975824, - "isdir": false, - "ctime": 1436810539.7975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8615823, - "inode": 525538, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2272", - "xusr": false, - "atime": 1436810539.8615823, - "isdir": false, - "ctime": 1436810539.8615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9175823, - "inode": 525615, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2349", - "xusr": false, - "atime": 1436810539.9175823, - "isdir": false, - "ctime": 1436810539.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7935822, - "inode": 524217, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/951", - "xusr": false, - "atime": 1436810538.7935822, - "isdir": false, - "ctime": 1436810538.7935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5975823, - "inode": 523961, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/695", - "xusr": false, - "atime": 1436810538.5975823, - "isdir": false, - "ctime": 1436810538.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9675822, - "inode": 524454, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1188", - "xusr": false, - "atime": 1436810538.9675822, - "isdir": false, - "ctime": 1436810538.9675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3115823, - "inode": 527410, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4144", - "xusr": false, - "atime": 1436810541.3115823, - "isdir": false, - "ctime": 1436810541.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3865824, - "inode": 526173, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2907", - "xusr": false, - "atime": 1436810540.3865824, - "isdir": false, - "ctime": 1436810540.3865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4385824, - "inode": 527544, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4278", - "xusr": false, - "atime": 1436810541.4385824, - "isdir": false, - "ctime": 1436810541.4385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9065824, - "inode": 526855, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3589", - "xusr": false, - "atime": 1436810540.9065824, - "isdir": false, - "ctime": 1436810540.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1155822, - "inode": 523337, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/71", - "xusr": false, - "atime": 1436810538.1155822, - "isdir": false, - "ctime": 1436810538.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6605823, - "inode": 525297, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2031", - "xusr": false, - "atime": 1436810539.6605823, - "isdir": false, - "ctime": 1436810539.6605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4575822, - "inode": 527570, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4304", - "xusr": false, - "atime": 1436810541.4575822, - "isdir": false, - "ctime": 1436810541.4575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0565822, - "inode": 527062, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3796", - "xusr": false, - "atime": 1436810541.0565822, - "isdir": false, - "ctime": 1436810541.0565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9255824, - "inode": 528215, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4949", - "xusr": false, - "atime": 1436810541.9255824, - "isdir": false, - "ctime": 1436810541.9255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8305824, - "inode": 524268, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1002", - "xusr": false, - "atime": 1436810538.8305824, - "isdir": false, - "ctime": 1436810538.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9745822, - "inode": 525693, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2427", - "xusr": false, - "atime": 1436810539.9745822, - "isdir": false, - "ctime": 1436810539.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1995823, - "inode": 527258, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3992", - "xusr": false, - "atime": 1436810541.1995823, - "isdir": false, - "ctime": 1436810541.1995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8485823, - "inode": 524291, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1025", - "xusr": false, - "atime": 1436810538.8485823, - "isdir": false, - "ctime": 1436810538.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2385824, - "inode": 523511, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/245", - "xusr": false, - "atime": 1436810538.2385824, - "isdir": false, - "ctime": 1436810538.2385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5335822, - "inode": 526333, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3067", - "xusr": false, - "atime": 1436810540.5335822, - "isdir": false, - "ctime": 1436810540.5335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8445823, - "inode": 525513, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2247", - "xusr": false, - "atime": 1436810539.8445823, - "isdir": false, - "ctime": 1436810539.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5385823, - "inode": 525159, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1893", - "xusr": false, - "atime": 1436810539.5385823, - "isdir": false, - "ctime": 1436810539.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8675823, - "inode": 528134, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4868", - "xusr": false, - "atime": 1436810541.8675823, - "isdir": false, - "ctime": 1436810541.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2145822, - "inode": 524807, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1541", - "xusr": false, - "atime": 1436810539.2145822, - "isdir": false, - "ctime": 1436810539.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7185824, - "inode": 525355, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2089", - "xusr": false, - "atime": 1436810539.7185824, - "isdir": false, - "ctime": 1436810539.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5905824, - "inode": 527754, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4488", - "xusr": false, - "atime": 1436810541.5905824, - "isdir": false, - "ctime": 1436810541.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6525824, - "inode": 527838, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4572", - "xusr": false, - "atime": 1436810541.6525824, - "isdir": false, - "ctime": 1436810541.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2115824, - "inode": 523474, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/208", - "xusr": false, - "atime": 1436810538.2115824, - "isdir": false, - "ctime": 1436810538.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4045823, - "inode": 526199, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2933", - "xusr": false, - "atime": 1436810540.4045823, - "isdir": false, - "ctime": 1436810540.4045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5565822, - "inode": 523904, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/638", - "xusr": false, - "atime": 1436810538.5565822, - "isdir": false, - "ctime": 1436810538.5565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9105823, - "inode": 526861, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3595", - "xusr": false, - "atime": 1436810540.9105823, - "isdir": false, - "ctime": 1436810540.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4475822, - "inode": 526253, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2987", - "xusr": false, - "atime": 1436810540.4475822, - "isdir": false, - "ctime": 1436810540.4475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1415823, - "inode": 527180, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3914", - "xusr": false, - "atime": 1436810541.1415823, - "isdir": false, - "ctime": 1436810541.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5425823, - "inode": 525164, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1898", - "xusr": false, - "atime": 1436810539.5425823, - "isdir": false, - "ctime": 1436810539.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2265823, - "inode": 523494, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/228", - "xusr": false, - "atime": 1436810538.2265823, - "isdir": false, - "ctime": 1436810538.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3285823, - "inode": 526091, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2825", - "xusr": false, - "atime": 1436810540.3285823, - "isdir": false, - "ctime": 1436810540.3285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9125824, - "inode": 526864, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3598", - "xusr": false, - "atime": 1436810540.9125824, - "isdir": false, - "ctime": 1436810540.9125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9205823, - "inode": 524390, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1124", - "xusr": false, - "atime": 1436810538.9205823, - "isdir": false, - "ctime": 1436810538.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1055822, - "inode": 523324, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/58", - "xusr": false, - "atime": 1436810538.1055822, - "isdir": false, - "ctime": 1436810538.1055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8325822, - "inode": 528086, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4820", - "xusr": false, - "atime": 1436810541.8325822, - "isdir": false, - "ctime": 1436810541.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6405823, - "inode": 526482, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3216", - "xusr": false, - "atime": 1436810540.6405823, - "isdir": false, - "ctime": 1436810540.6405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9245822, - "inode": 528213, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4947", - "xusr": false, - "atime": 1436810541.9245822, - "isdir": false, - "ctime": 1436810541.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0315824, - "inode": 525771, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2505", - "xusr": false, - "atime": 1436810540.0315824, - "isdir": false, - "ctime": 1436810540.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4595823, - "inode": 525076, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1810", - "xusr": false, - "atime": 1436810539.4595823, - "isdir": false, - "ctime": 1436810539.4595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1515822, - "inode": 523388, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/122", - "xusr": false, - "atime": 1436810538.1515822, - "isdir": false, - "ctime": 1436810538.1515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8175824, - "inode": 524250, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/984", - "xusr": false, - "atime": 1436810538.8175824, - "isdir": false, - "ctime": 1436810538.8175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3525822, - "inode": 524986, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1720", - "xusr": false, - "atime": 1436810539.3525822, - "isdir": false, - "ctime": 1436810539.3525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0575824, - "inode": 527064, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3798", - "xusr": false, - "atime": 1436810541.0575824, - "isdir": false, - "ctime": 1436810541.0575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5265822, - "inode": 523864, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/598", - "xusr": false, - "atime": 1436810538.5265822, - "isdir": false, - "ctime": 1436810538.5265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5615823, - "inode": 526371, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3105", - "xusr": false, - "atime": 1436810540.5615823, - "isdir": false, - "ctime": 1436810540.5615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1995823, - "inode": 524785, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1519", - "xusr": false, - "atime": 1436810539.1995823, - "isdir": false, - "ctime": 1436810539.1995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3515823, - "inode": 524984, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1718", - "xusr": false, - "atime": 1436810539.3515823, - "isdir": false, - "ctime": 1436810539.3515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5745823, - "inode": 523928, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/662", - "xusr": false, - "atime": 1436810538.5745823, - "isdir": false, - "ctime": 1436810538.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1185822, - "inode": 524669, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1403", - "xusr": false, - "atime": 1436810539.1185822, - "isdir": false, - "ctime": 1436810539.1185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9075823, - "inode": 526857, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3591", - "xusr": false, - "atime": 1436810540.9075823, - "isdir": false, - "ctime": 1436810540.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6495824, - "inode": 526493, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3227", - "xusr": false, - "atime": 1436810540.6495824, - "isdir": false, - "ctime": 1436810540.6495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5785823, - "inode": 526395, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3129", - "xusr": false, - "atime": 1436810540.5785823, - "isdir": false, - "ctime": 1436810540.5785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5155823, - "inode": 527651, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4385", - "xusr": false, - "atime": 1436810541.5155823, - "isdir": false, - "ctime": 1436810541.5155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7305822, - "inode": 525366, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2100", - "xusr": false, - "atime": 1436810539.7305822, - "isdir": false, - "ctime": 1436810539.7305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7305822, - "inode": 527946, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4680", - "xusr": false, - "atime": 1436810541.7305822, - "isdir": false, - "ctime": 1436810541.7305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2465823, - "inode": 524853, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1587", - "xusr": false, - "atime": 1436810539.2465823, - "isdir": false, - "ctime": 1436810539.2465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4295824, - "inode": 526234, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2968", - "xusr": false, - "atime": 1436810540.4295824, - "isdir": false, - "ctime": 1436810540.4295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1485822, - "inode": 523384, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/118", - "xusr": false, - "atime": 1436810538.1485822, - "isdir": false, - "ctime": 1436810538.1485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3155823, - "inode": 524946, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1680", - "xusr": false, - "atime": 1436810539.3155823, - "isdir": false, - "ctime": 1436810539.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6725824, - "inode": 525308, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2042", - "xusr": false, - "atime": 1436810539.6725824, - "isdir": false, - "ctime": 1436810539.6725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8675823, - "inode": 524317, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1051", - "xusr": false, - "atime": 1436810538.8675823, - "isdir": false, - "ctime": 1436810538.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0845823, - "inode": 527102, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3836", - "xusr": false, - "atime": 1436810541.0845823, - "isdir": false, - "ctime": 1436810541.0845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6955824, - "inode": 527898, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4632", - "xusr": false, - "atime": 1436810541.6955824, - "isdir": false, - "ctime": 1436810541.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9395823, - "inode": 526901, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3635", - "xusr": false, - "atime": 1436810540.9395823, - "isdir": false, - "ctime": 1436810540.9395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7825823, - "inode": 526681, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3415", - "xusr": false, - "atime": 1436810540.7825823, - "isdir": false, - "ctime": 1436810540.7825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3695824, - "inode": 526149, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2883", - "xusr": false, - "atime": 1436810540.3695824, - "isdir": false, - "ctime": 1436810540.3695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1905823, - "inode": 527245, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3979", - "xusr": false, - "atime": 1436810541.1905823, - "isdir": false, - "ctime": 1436810541.1905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6165824, - "inode": 526448, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3182", - "xusr": false, - "atime": 1436810540.6165824, - "isdir": false, - "ctime": 1436810540.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2275822, - "inode": 525973, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2707", - "xusr": false, - "atime": 1436810540.2275822, - "isdir": false, - "ctime": 1436810540.2275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8855822, - "inode": 528159, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4893", - "xusr": false, - "atime": 1436810541.8855822, - "isdir": false, - "ctime": 1436810541.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6185822, - "inode": 527794, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4528", - "xusr": false, - "atime": 1436810541.6185822, - "isdir": false, - "ctime": 1436810541.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7275822, - "inode": 525363, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2097", - "xusr": false, - "atime": 1436810539.7275822, - "isdir": false, - "ctime": 1436810539.7275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2655823, - "inode": 524880, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1614", - "xusr": false, - "atime": 1436810539.2655823, - "isdir": false, - "ctime": 1436810539.2655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8525822, - "inode": 525524, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2258", - "xusr": false, - "atime": 1436810539.8525822, - "isdir": false, - "ctime": 1436810539.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2095823, - "inode": 525951, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2685", - "xusr": false, - "atime": 1436810540.2095823, - "isdir": false, - "ctime": 1436810540.2095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6695824, - "inode": 526521, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3255", - "xusr": false, - "atime": 1436810540.6695824, - "isdir": false, - "ctime": 1436810540.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0705824, - "inode": 524600, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1334", - "xusr": false, - "atime": 1436810539.0705824, - "isdir": false, - "ctime": 1436810539.0705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2565823, - "inode": 526005, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2739", - "xusr": false, - "atime": 1436810540.2565823, - "isdir": false, - "ctime": 1436810540.2565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9755824, - "inode": 525694, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2428", - "xusr": false, - "atime": 1436810539.9755824, - "isdir": false, - "ctime": 1436810539.9755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1645823, - "inode": 524735, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1469", - "xusr": false, - "atime": 1436810539.1645823, - "isdir": false, - "ctime": 1436810539.1645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0935824, - "inode": 525838, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2572", - "xusr": false, - "atime": 1436810540.0935824, - "isdir": false, - "ctime": 1436810540.0935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2815824, - "inode": 527373, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4107", - "xusr": false, - "atime": 1436810541.2815824, - "isdir": false, - "ctime": 1436810541.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5975823, - "inode": 523960, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/694", - "xusr": false, - "atime": 1436810538.5975823, - "isdir": false, - "ctime": 1436810538.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6095824, - "inode": 527781, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4515", - "xusr": false, - "atime": 1436810541.6095824, - "isdir": false, - "ctime": 1436810541.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9795823, - "inode": 525700, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2434", - "xusr": false, - "atime": 1436810539.9795823, - "isdir": false, - "ctime": 1436810539.9795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0755823, - "inode": 527089, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3823", - "xusr": false, - "atime": 1436810541.0755823, - "isdir": false, - "ctime": 1436810541.0755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3975823, - "inode": 525022, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1756", - "xusr": false, - "atime": 1436810539.3975823, - "isdir": false, - "ctime": 1436810539.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7735822, - "inode": 528005, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4739", - "xusr": false, - "atime": 1436810541.7735822, - "isdir": false, - "ctime": 1436810541.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7645824, - "inode": 527992, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4726", - "xusr": false, - "atime": 1436810541.7645824, - "isdir": false, - "ctime": 1436810541.7645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1135824, - "inode": 527142, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3876", - "xusr": false, - "atime": 1436810541.1135824, - "isdir": false, - "ctime": 1436810541.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6205823, - "inode": 527796, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4530", - "xusr": false, - "atime": 1436810541.6205823, - "isdir": false, - "ctime": 1436810541.6205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5365822, - "inode": 525156, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1890", - "xusr": false, - "atime": 1436810539.5365822, - "isdir": false, - "ctime": 1436810539.5365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8355823, - "inode": 525501, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2235", - "xusr": false, - "atime": 1436810539.8355823, - "isdir": false, - "ctime": 1436810539.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7985823, - "inode": 528040, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4774", - "xusr": false, - "atime": 1436810541.7985823, - "isdir": false, - "ctime": 1436810541.7985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0045824, - "inode": 526991, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3725", - "xusr": false, - "atime": 1436810541.0045824, - "isdir": false, - "ctime": 1436810541.0045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1295824, - "inode": 525870, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2604", - "xusr": false, - "atime": 1436810540.1295824, - "isdir": false, - "ctime": 1436810540.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3565824, - "inode": 526131, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2865", - "xusr": false, - "atime": 1436810540.3565824, - "isdir": false, - "ctime": 1436810540.3565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2605822, - "inode": 526008, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2742", - "xusr": false, - "atime": 1436810540.2605822, - "isdir": false, - "ctime": 1436810540.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6855824, - "inode": 526545, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3279", - "xusr": false, - "atime": 1436810540.6855824, - "isdir": false, - "ctime": 1436810540.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0635824, - "inode": 523267, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1", - "xusr": false, - "atime": 1436810538.0635824, - "isdir": false, - "ctime": 1436810538.0635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8145823, - "inode": 525471, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2205", - "xusr": false, - "atime": 1436810539.8145823, - "isdir": false, - "ctime": 1436810539.8145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0745823, - "inode": 525818, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2552", - "xusr": false, - "atime": 1436810540.0745823, - "isdir": false, - "ctime": 1436810540.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1495824, - "inode": 527191, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3925", - "xusr": false, - "atime": 1436810541.1495824, - "isdir": false, - "ctime": 1436810541.1495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8225822, - "inode": 524257, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/991", - "xusr": false, - "atime": 1436810538.8225822, - "isdir": false, - "ctime": 1436810538.8225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3355823, - "inode": 524966, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1700", - "xusr": false, - "atime": 1436810539.3355823, - "isdir": false, - "ctime": 1436810539.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4965823, - "inode": 527624, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4358", - "xusr": false, - "atime": 1436810541.4965823, - "isdir": false, - "ctime": 1436810541.4965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6145823, - "inode": 523984, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/718", - "xusr": false, - "atime": 1436810538.6145823, - "isdir": false, - "ctime": 1436810538.6145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5415823, - "inode": 523884, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/618", - "xusr": false, - "atime": 1436810538.5415823, - "isdir": false, - "ctime": 1436810538.5415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3345823, - "inode": 527434, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4168", - "xusr": false, - "atime": 1436810541.3345823, - "isdir": false, - "ctime": 1436810541.3345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4245822, - "inode": 527525, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4259", - "xusr": false, - "atime": 1436810541.4245822, - "isdir": false, - "ctime": 1436810541.4245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5815823, - "inode": 526399, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3133", - "xusr": false, - "atime": 1436810540.5815823, - "isdir": false, - "ctime": 1436810540.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4125824, - "inode": 527509, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4243", - "xusr": false, - "atime": 1436810541.4125824, - "isdir": false, - "ctime": 1436810541.4125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1875823, - "inode": 527240, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3974", - "xusr": false, - "atime": 1436810541.1875823, - "isdir": false, - "ctime": 1436810541.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3945823, - "inode": 525019, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1753", - "xusr": false, - "atime": 1436810539.3945823, - "isdir": false, - "ctime": 1436810539.3945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9615824, - "inode": 528265, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4999", - "xusr": false, - "atime": 1436810541.9615824, - "isdir": false, - "ctime": 1436810541.9615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2495823, - "inode": 525997, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2731", - "xusr": false, - "atime": 1436810540.2495823, - "isdir": false, - "ctime": 1436810540.2495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4405823, - "inode": 523743, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/477", - "xusr": false, - "atime": 1436810538.4405823, - "isdir": false, - "ctime": 1436810538.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8695824, - "inode": 526803, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3537", - "xusr": false, - "atime": 1436810540.8695824, - "isdir": false, - "ctime": 1436810540.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4865823, - "inode": 523809, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/543", - "xusr": false, - "atime": 1436810538.4865823, - "isdir": false, - "ctime": 1436810538.4865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3515823, - "inode": 526124, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2858", - "xusr": false, - "atime": 1436810540.3515823, - "isdir": false, - "ctime": 1436810540.3515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2225823, - "inode": 523489, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/223", - "xusr": false, - "atime": 1436810538.2225823, - "isdir": false, - "ctime": 1436810538.2225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0085824, - "inode": 526996, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3730", - "xusr": false, - "atime": 1436810541.0085824, - "isdir": false, - "ctime": 1436810541.0085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8365824, - "inode": 526756, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3490", - "xusr": false, - "atime": 1436810540.8365824, - "isdir": false, - "ctime": 1436810540.8365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7715824, - "inode": 528002, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4736", - "xusr": false, - "atime": 1436810541.7715824, - "isdir": false, - "ctime": 1436810541.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6175823, - "inode": 526449, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3183", - "xusr": false, - "atime": 1436810540.6175823, - "isdir": false, - "ctime": 1436810540.6175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4455824, - "inode": 527553, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4287", - "xusr": false, - "atime": 1436810541.4455824, - "isdir": false, - "ctime": 1436810541.4455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2145822, - "inode": 523478, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/212", - "xusr": false, - "atime": 1436810538.2145822, - "isdir": false, - "ctime": 1436810538.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7835822, - "inode": 524205, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/939", - "xusr": false, - "atime": 1436810538.7835822, - "isdir": false, - "ctime": 1436810538.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3665824, - "inode": 523661, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/395", - "xusr": false, - "atime": 1436810538.3665824, - "isdir": false, - "ctime": 1436810538.3665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0835824, - "inode": 527100, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3834", - "xusr": false, - "atime": 1436810541.0835824, - "isdir": false, - "ctime": 1436810541.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6595824, - "inode": 524045, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/779", - "xusr": false, - "atime": 1436810538.6595824, - "isdir": false, - "ctime": 1436810538.6595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1965823, - "inode": 523452, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/186", - "xusr": false, - "atime": 1436810538.1965823, - "isdir": false, - "ctime": 1436810538.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5025823, - "inode": 525124, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1858", - "xusr": false, - "atime": 1436810539.5025823, - "isdir": false, - "ctime": 1436810539.5025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8925824, - "inode": 525582, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2316", - "xusr": false, - "atime": 1436810539.8925824, - "isdir": false, - "ctime": 1436810539.8925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5445824, - "inode": 523888, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/622", - "xusr": false, - "atime": 1436810538.5445824, - "isdir": false, - "ctime": 1436810538.5445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3105824, - "inode": 524941, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1675", - "xusr": false, - "atime": 1436810539.3105824, - "isdir": false, - "ctime": 1436810539.3105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4095824, - "inode": 526206, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2940", - "xusr": false, - "atime": 1436810540.4095824, - "isdir": false, - "ctime": 1436810540.4095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4665823, - "inode": 523781, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/515", - "xusr": false, - "atime": 1436810538.4665823, - "isdir": false, - "ctime": 1436810538.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9485824, - "inode": 524428, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1162", - "xusr": false, - "atime": 1436810538.9485824, - "isdir": false, - "ctime": 1436810538.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3305824, - "inode": 523628, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/362", - "xusr": false, - "atime": 1436810538.3305824, - "isdir": false, - "ctime": 1436810538.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7585824, - "inode": 527985, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4719", - "xusr": false, - "atime": 1436810541.7585824, - "isdir": false, - "ctime": 1436810541.7585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1715822, - "inode": 525910, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2644", - "xusr": false, - "atime": 1436810540.1715822, - "isdir": false, - "ctime": 1436810540.1715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2565823, - "inode": 524867, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1601", - "xusr": false, - "atime": 1436810539.2565823, - "isdir": false, - "ctime": 1436810539.2565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5475824, - "inode": 525167, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1901", - "xusr": false, - "atime": 1436810539.5475824, - "isdir": false, - "ctime": 1436810539.5475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5745823, - "inode": 525201, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1935", - "xusr": false, - "atime": 1436810539.5745823, - "isdir": false, - "ctime": 1436810539.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0215824, - "inode": 525756, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2490", - "xusr": false, - "atime": 1436810540.0215824, - "isdir": false, - "ctime": 1436810540.0215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9935822, - "inode": 524491, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1225", - "xusr": false, - "atime": 1436810538.9935822, - "isdir": false, - "ctime": 1436810538.9935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1885824, - "inode": 523441, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/175", - "xusr": false, - "atime": 1436810538.1885824, - "isdir": false, - "ctime": 1436810538.1885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9225824, - "inode": 526878, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3612", - "xusr": false, - "atime": 1436810540.9225824, - "isdir": false, - "ctime": 1436810540.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4565823, - "inode": 523766, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/500", - "xusr": false, - "atime": 1436810538.4565823, - "isdir": false, - "ctime": 1436810538.4565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6785824, - "inode": 527874, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4608", - "xusr": false, - "atime": 1436810541.6785824, - "isdir": false, - "ctime": 1436810541.6785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4535823, - "inode": 525072, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1806", - "xusr": false, - "atime": 1436810539.4535823, - "isdir": false, - "ctime": 1436810539.4535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0585823, - "inode": 525802, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2536", - "xusr": false, - "atime": 1436810540.0585823, - "isdir": false, - "ctime": 1436810540.0585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7625823, - "inode": 527990, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4724", - "xusr": false, - "atime": 1436810541.7625823, - "isdir": false, - "ctime": 1436810541.7625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7595823, - "inode": 525399, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2133", - "xusr": false, - "atime": 1436810539.7595823, - "isdir": false, - "ctime": 1436810539.7595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5575824, - "inode": 525178, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1912", - "xusr": false, - "atime": 1436810539.5575824, - "isdir": false, - "ctime": 1436810539.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0135822, - "inode": 525747, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2481", - "xusr": false, - "atime": 1436810540.0135822, - "isdir": false, - "ctime": 1436810540.0135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4135823, - "inode": 527511, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4245", - "xusr": false, - "atime": 1436810541.4135823, - "isdir": false, - "ctime": 1436810541.4135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6465824, - "inode": 527830, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4564", - "xusr": false, - "atime": 1436810541.6465824, - "isdir": false, - "ctime": 1436810541.6465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2245822, - "inode": 527293, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4027", - "xusr": false, - "atime": 1436810541.2245822, - "isdir": false, - "ctime": 1436810541.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2725823, - "inode": 526022, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2756", - "xusr": false, - "atime": 1436810540.2725823, - "isdir": false, - "ctime": 1436810540.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6005824, - "inode": 525224, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1958", - "xusr": false, - "atime": 1436810539.6005824, - "isdir": false, - "ctime": 1436810539.6005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2815824, - "inode": 526032, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2766", - "xusr": false, - "atime": 1436810540.2815824, - "isdir": false, - "ctime": 1436810540.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3315823, - "inode": 524961, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1695", - "xusr": false, - "atime": 1436810539.3315823, - "isdir": false, - "ctime": 1436810539.3315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0565822, - "inode": 527063, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3797", - "xusr": false, - "atime": 1436810541.0565822, - "isdir": false, - "ctime": 1436810541.0565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8815823, - "inode": 526820, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3554", - "xusr": false, - "atime": 1436810540.8815823, - "isdir": false, - "ctime": 1436810540.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8925824, - "inode": 524351, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1085", - "xusr": false, - "atime": 1436810538.8925824, - "isdir": false, - "ctime": 1436810538.8925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9455824, - "inode": 525653, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2387", - "xusr": false, - "atime": 1436810539.9455824, - "isdir": false, - "ctime": 1436810539.9455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1385822, - "inode": 525878, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2612", - "xusr": false, - "atime": 1436810540.1385822, - "isdir": false, - "ctime": 1436810540.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5015824, - "inode": 523829, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/563", - "xusr": false, - "atime": 1436810538.5015824, - "isdir": false, - "ctime": 1436810538.5015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3145823, - "inode": 526073, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2807", - "xusr": false, - "atime": 1436810540.3145823, - "isdir": false, - "ctime": 1436810540.3145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4655824, - "inode": 526269, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3003", - "xusr": false, - "atime": 1436810540.4655824, - "isdir": false, - "ctime": 1436810540.4655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9575822, - "inode": 526927, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3661", - "xusr": false, - "atime": 1436810540.9575822, - "isdir": false, - "ctime": 1436810540.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3645823, - "inode": 527460, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4194", - "xusr": false, - "atime": 1436810541.3645823, - "isdir": false, - "ctime": 1436810541.3645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4155824, - "inode": 523716, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/450", - "xusr": false, - "atime": 1436810538.4155824, - "isdir": false, - "ctime": 1436810538.4155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2285824, - "inode": 525975, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2709", - "xusr": false, - "atime": 1436810540.2285824, - "isdir": false, - "ctime": 1436810540.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9525824, - "inode": 528253, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4987", - "xusr": false, - "atime": 1436810541.9525824, - "isdir": false, - "ctime": 1436810541.9525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1765823, - "inode": 527227, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3961", - "xusr": false, - "atime": 1436810541.1765823, - "isdir": false, - "ctime": 1436810541.1765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2395823, - "inode": 523512, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/246", - "xusr": false, - "atime": 1436810538.2395823, - "isdir": false, - "ctime": 1436810538.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2195823, - "inode": 527285, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4019", - "xusr": false, - "atime": 1436810541.2195823, - "isdir": false, - "ctime": 1436810541.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2715824, - "inode": 524888, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1622", - "xusr": false, - "atime": 1436810539.2715824, - "isdir": false, - "ctime": 1436810539.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5375824, - "inode": 527680, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4414", - "xusr": false, - "atime": 1436810541.5375824, - "isdir": false, - "ctime": 1436810541.5375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1135824, - "inode": 524661, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1395", - "xusr": false, - "atime": 1436810539.1135824, - "isdir": false, - "ctime": 1436810539.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5965824, - "inode": 526420, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3154", - "xusr": false, - "atime": 1436810540.5965824, - "isdir": false, - "ctime": 1436810540.5965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1965823, - "inode": 524781, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1515", - "xusr": false, - "atime": 1436810539.1965823, - "isdir": false, - "ctime": 1436810539.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2215824, - "inode": 527288, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4022", - "xusr": false, - "atime": 1436810541.2215824, - "isdir": false, - "ctime": 1436810541.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6805823, - "inode": 524073, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/807", - "xusr": false, - "atime": 1436810538.6805823, - "isdir": false, - "ctime": 1436810538.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7665823, - "inode": 524184, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/918", - "xusr": false, - "atime": 1436810538.7665823, - "isdir": false, - "ctime": 1436810538.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8985822, - "inode": 524359, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1093", - "xusr": false, - "atime": 1436810538.8985822, - "isdir": false, - "ctime": 1436810538.8985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8805823, - "inode": 528152, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4886", - "xusr": false, - "atime": 1436810541.8805823, - "isdir": false, - "ctime": 1436810541.8805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2075822, - "inode": 523469, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/203", - "xusr": false, - "atime": 1436810538.2075822, - "isdir": false, - "ctime": 1436810538.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8125823, - "inode": 524244, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/978", - "xusr": false, - "atime": 1436810538.8125823, - "isdir": false, - "ctime": 1436810538.8125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0965824, - "inode": 524637, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1371", - "xusr": false, - "atime": 1436810539.0965824, - "isdir": false, - "ctime": 1436810539.0965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5105822, - "inode": 525131, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1865", - "xusr": false, - "atime": 1436810539.5105822, - "isdir": false, - "ctime": 1436810539.5105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1165824, - "inode": 527146, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3880", - "xusr": false, - "atime": 1436810541.1165824, - "isdir": false, - "ctime": 1436810541.1165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5685823, - "inode": 523921, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/655", - "xusr": false, - "atime": 1436810538.5685823, - "isdir": false, - "ctime": 1436810538.5685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6335824, - "inode": 524009, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/743", - "xusr": false, - "atime": 1436810538.6335824, - "isdir": false, - "ctime": 1436810538.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0775824, - "inode": 523287, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/21", - "xusr": false, - "atime": 1436810538.0775824, - "isdir": false, - "ctime": 1436810538.0775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0745823, - "inode": 523282, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/16", - "xusr": false, - "atime": 1436810538.0745823, - "isdir": false, - "ctime": 1436810538.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4465823, - "inode": 523753, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/487", - "xusr": false, - "atime": 1436810538.4465823, - "isdir": false, - "ctime": 1436810538.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6215823, - "inode": 527797, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4531", - "xusr": false, - "atime": 1436810541.6215823, - "isdir": false, - "ctime": 1436810541.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3835824, - "inode": 526168, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2902", - "xusr": false, - "atime": 1436810540.3835824, - "isdir": false, - "ctime": 1436810540.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8045824, - "inode": 524232, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/966", - "xusr": false, - "atime": 1436810538.8045824, - "isdir": false, - "ctime": 1436810538.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5735824, - "inode": 527731, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4465", - "xusr": false, - "atime": 1436810541.5735824, - "isdir": false, - "ctime": 1436810541.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4785824, - "inode": 525099, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1833", - "xusr": false, - "atime": 1436810539.4785824, - "isdir": false, - "ctime": 1436810539.4785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6145823, - "inode": 527787, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4521", - "xusr": false, - "atime": 1436810541.6145823, - "isdir": false, - "ctime": 1436810541.6145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4415822, - "inode": 523745, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/479", - "xusr": false, - "atime": 1436810538.4415822, - "isdir": false, - "ctime": 1436810538.4415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2025824, - "inode": 527261, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3995", - "xusr": false, - "atime": 1436810541.2025824, - "isdir": false, - "ctime": 1436810541.2025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1275823, - "inode": 527161, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3895", - "xusr": false, - "atime": 1436810541.1275823, - "isdir": false, - "ctime": 1436810541.1275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6815822, - "inode": 527879, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4613", - "xusr": false, - "atime": 1436810541.6815822, - "isdir": false, - "ctime": 1436810541.6815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9605823, - "inode": 526931, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3665", - "xusr": false, - "atime": 1436810540.9605823, - "isdir": false, - "ctime": 1436810540.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4785824, - "inode": 527599, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4333", - "xusr": false, - "atime": 1436810541.4785824, - "isdir": false, - "ctime": 1436810541.4785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0825822, - "inode": 524617, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1351", - "xusr": false, - "atime": 1436810539.0825822, - "isdir": false, - "ctime": 1436810539.0825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7235823, - "inode": 527937, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4671", - "xusr": false, - "atime": 1436810541.7235823, - "isdir": false, - "ctime": 1436810541.7235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6165824, - "inode": 527791, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4525", - "xusr": false, - "atime": 1436810541.6165824, - "isdir": false, - "ctime": 1436810541.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4515824, - "inode": 523760, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/494", - "xusr": false, - "atime": 1436810538.4515824, - "isdir": false, - "ctime": 1436810538.4515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8545823, - "inode": 524300, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1034", - "xusr": false, - "atime": 1436810538.8545823, - "isdir": false, - "ctime": 1436810538.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5725822, - "inode": 527729, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4463", - "xusr": false, - "atime": 1436810541.5725822, - "isdir": false, - "ctime": 1436810541.5725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9295824, - "inode": 526888, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3622", - "xusr": false, - "atime": 1436810540.9295824, - "isdir": false, - "ctime": 1436810540.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6115823, - "inode": 527784, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4518", - "xusr": false, - "atime": 1436810541.6115823, - "isdir": false, - "ctime": 1436810541.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7345824, - "inode": 524144, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/878", - "xusr": false, - "atime": 1436810538.7345824, - "isdir": false, - "ctime": 1436810538.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4215822, - "inode": 527521, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4255", - "xusr": false, - "atime": 1436810541.4215822, - "isdir": false, - "ctime": 1436810541.4215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7965822, - "inode": 526700, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3434", - "xusr": false, - "atime": 1436810540.7965822, - "isdir": false, - "ctime": 1436810540.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0625823, - "inode": 527071, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3805", - "xusr": false, - "atime": 1436810541.0625823, - "isdir": false, - "ctime": 1436810541.0625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1345823, - "inode": 523364, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/98", - "xusr": false, - "atime": 1436810538.1345823, - "isdir": false, - "ctime": 1436810538.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9015822, - "inode": 525594, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2328", - "xusr": false, - "atime": 1436810539.9015822, - "isdir": false, - "ctime": 1436810539.9015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6535823, - "inode": 527840, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4574", - "xusr": false, - "atime": 1436810541.6535823, - "isdir": false, - "ctime": 1436810541.6535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9205823, - "inode": 528208, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4942", - "xusr": false, - "atime": 1436810541.9205823, - "isdir": false, - "ctime": 1436810541.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0695822, - "inode": 527080, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3814", - "xusr": false, - "atime": 1436810541.0695822, - "isdir": false, - "ctime": 1436810541.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2265823, - "inode": 527295, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4029", - "xusr": false, - "atime": 1436810541.2265823, - "isdir": false, - "ctime": 1436810541.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0475824, - "inode": 527050, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3784", - "xusr": false, - "atime": 1436810541.0475824, - "isdir": false, - "ctime": 1436810541.0475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2015824, - "inode": 524787, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1521", - "xusr": false, - "atime": 1436810539.2015824, - "isdir": false, - "ctime": 1436810539.2015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2195823, - "inode": 527286, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4020", - "xusr": false, - "atime": 1436810541.2195823, - "isdir": false, - "ctime": 1436810541.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8455822, - "inode": 526769, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3503", - "xusr": false, - "atime": 1436810540.8455822, - "isdir": false, - "ctime": 1436810540.8455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3965824, - "inode": 527488, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4222", - "xusr": false, - "atime": 1436810541.3965824, - "isdir": false, - "ctime": 1436810541.3965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6695824, - "inode": 524058, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/792", - "xusr": false, - "atime": 1436810538.6695824, - "isdir": false, - "ctime": 1436810538.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1725824, - "inode": 525911, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2645", - "xusr": false, - "atime": 1436810540.1725824, - "isdir": false, - "ctime": 1436810540.1725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4215822, - "inode": 525050, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1784", - "xusr": false, - "atime": 1436810539.4215822, - "isdir": false, - "ctime": 1436810539.4215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7695823, - "inode": 526661, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3395", - "xusr": false, - "atime": 1436810540.7695823, - "isdir": false, - "ctime": 1436810540.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3935823, - "inode": 527485, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4219", - "xusr": false, - "atime": 1436810541.3935823, - "isdir": false, - "ctime": 1436810541.3935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9395823, - "inode": 528234, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4968", - "xusr": false, - "atime": 1436810541.9395823, - "isdir": false, - "ctime": 1436810541.9395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0405824, - "inode": 527040, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3774", - "xusr": false, - "atime": 1436810541.0405824, - "isdir": false, - "ctime": 1436810541.0405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5065823, - "inode": 523837, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/571", - "xusr": false, - "atime": 1436810538.5065823, - "isdir": false, - "ctime": 1436810538.5065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5455823, - "inode": 526350, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3084", - "xusr": false, - "atime": 1436810540.5455823, - "isdir": false, - "ctime": 1436810540.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2635822, - "inode": 527347, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4081", - "xusr": false, - "atime": 1436810541.2635822, - "isdir": false, - "ctime": 1436810541.2635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4395823, - "inode": 527545, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4279", - "xusr": false, - "atime": 1436810541.4395823, - "isdir": false, - "ctime": 1436810541.4395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8565824, - "inode": 525530, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2264", - "xusr": false, - "atime": 1436810539.8565824, - "isdir": false, - "ctime": 1436810539.8565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1685822, - "inode": 524741, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1475", - "xusr": false, - "atime": 1436810539.1685822, - "isdir": false, - "ctime": 1436810539.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6825824, - "inode": 527880, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4614", - "xusr": false, - "atime": 1436810541.6825824, - "isdir": false, - "ctime": 1436810541.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5765824, - "inode": 523932, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/666", - "xusr": false, - "atime": 1436810538.5765824, - "isdir": false, - "ctime": 1436810538.5765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8555822, - "inode": 526783, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3517", - "xusr": false, - "atime": 1436810540.8555822, - "isdir": false, - "ctime": 1436810540.8555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5785823, - "inode": 527737, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4471", - "xusr": false, - "atime": 1436810541.5785823, - "isdir": false, - "ctime": 1436810541.5785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8795824, - "inode": 524334, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1068", - "xusr": false, - "atime": 1436810538.8795824, - "isdir": false, - "ctime": 1436810538.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6675823, - "inode": 526518, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3252", - "xusr": false, - "atime": 1436810540.6675823, - "isdir": false, - "ctime": 1436810540.6675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6095824, - "inode": 525236, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1970", - "xusr": false, - "atime": 1436810539.6095824, - "isdir": false, - "ctime": 1436810539.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2555823, - "inode": 524866, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1600", - "xusr": false, - "atime": 1436810539.2555823, - "isdir": false, - "ctime": 1436810539.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3995824, - "inode": 526191, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2925", - "xusr": false, - "atime": 1436810540.3995824, - "isdir": false, - "ctime": 1436810540.3995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7775824, - "inode": 528011, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4745", - "xusr": false, - "atime": 1436810541.7775824, - "isdir": false, - "ctime": 1436810541.7775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6865823, - "inode": 527885, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4619", - "xusr": false, - "atime": 1436810541.6865823, - "isdir": false, - "ctime": 1436810541.6865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1375823, - "inode": 525877, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2611", - "xusr": false, - "atime": 1436810540.1375823, - "isdir": false, - "ctime": 1436810540.1375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0635824, - "inode": 527072, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3806", - "xusr": false, - "atime": 1436810541.0635824, - "isdir": false, - "ctime": 1436810541.0635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1805823, - "inode": 523429, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/163", - "xusr": false, - "atime": 1436810538.1805823, - "isdir": false, - "ctime": 1436810538.1805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9155824, - "inode": 528201, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4935", - "xusr": false, - "atime": 1436810541.9155824, - "isdir": false, - "ctime": 1436810541.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4165823, - "inode": 525044, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1778", - "xusr": false, - "atime": 1436810539.4165823, - "isdir": false, - "ctime": 1436810539.4165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7225823, - "inode": 526598, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3332", - "xusr": false, - "atime": 1436810540.7225823, - "isdir": false, - "ctime": 1436810540.7225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6265824, - "inode": 527804, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4538", - "xusr": false, - "atime": 1436810541.6265824, - "isdir": false, - "ctime": 1436810541.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8805823, - "inode": 525565, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2299", - "xusr": false, - "atime": 1436810539.8805823, - "isdir": false, - "ctime": 1436810539.8805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9545822, - "inode": 528255, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4989", - "xusr": false, - "atime": 1436810541.9545822, - "isdir": false, - "ctime": 1436810541.9545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0175824, - "inode": 524524, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1258", - "xusr": false, - "atime": 1436810539.0175824, - "isdir": false, - "ctime": 1436810539.0175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0875823, - "inode": 523300, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/34", - "xusr": false, - "atime": 1436810538.0875823, - "isdir": false, - "ctime": 1436810538.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8765824, - "inode": 528147, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4881", - "xusr": false, - "atime": 1436810541.8765824, - "isdir": false, - "ctime": 1436810541.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1235824, - "inode": 524676, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1410", - "xusr": false, - "atime": 1436810539.1235824, - "isdir": false, - "ctime": 1436810539.1235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8955822, - "inode": 528173, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4907", - "xusr": false, - "atime": 1436810541.8955822, - "isdir": false, - "ctime": 1436810541.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8855822, - "inode": 526826, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3560", - "xusr": false, - "atime": 1436810540.8855822, - "isdir": false, - "ctime": 1436810540.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3655822, - "inode": 523660, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/394", - "xusr": false, - "atime": 1436810538.3655822, - "isdir": false, - "ctime": 1436810538.3655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4045823, - "inode": 523702, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/436", - "xusr": false, - "atime": 1436810538.4045823, - "isdir": false, - "ctime": 1436810538.4045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1025822, - "inode": 525846, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2580", - "xusr": false, - "atime": 1436810540.1025822, - "isdir": false, - "ctime": 1436810540.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1755824, - "inode": 525915, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2649", - "xusr": false, - "atime": 1436810540.1755824, - "isdir": false, - "ctime": 1436810540.1755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6945822, - "inode": 527897, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4631", - "xusr": false, - "atime": 1436810541.6945822, - "isdir": false, - "ctime": 1436810541.6945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3535824, - "inode": 526127, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2861", - "xusr": false, - "atime": 1436810540.3535824, - "isdir": false, - "ctime": 1436810540.3535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0245824, - "inode": 524533, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1267", - "xusr": false, - "atime": 1436810539.0245824, - "isdir": false, - "ctime": 1436810539.0245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2915823, - "inode": 526041, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2775", - "xusr": false, - "atime": 1436810540.2915823, - "isdir": false, - "ctime": 1436810540.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1385822, - "inode": 524698, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1432", - "xusr": false, - "atime": 1436810539.1385822, - "isdir": false, - "ctime": 1436810539.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3205824, - "inode": 524953, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1687", - "xusr": false, - "atime": 1436810539.3205824, - "isdir": false, - "ctime": 1436810539.3205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3875823, - "inode": 525013, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1747", - "xusr": false, - "atime": 1436810539.3875823, - "isdir": false, - "ctime": 1436810539.3875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7655823, - "inode": 524183, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/917", - "xusr": false, - "atime": 1436810538.7655823, - "isdir": false, - "ctime": 1436810538.7655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1995823, - "inode": 527257, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3991", - "xusr": false, - "atime": 1436810541.1995823, - "isdir": false, - "ctime": 1436810541.1995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2835822, - "inode": 523575, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/309", - "xusr": false, - "atime": 1436810538.2835822, - "isdir": false, - "ctime": 1436810538.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4215822, - "inode": 525051, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1785", - "xusr": false, - "atime": 1436810539.4215822, - "isdir": false, - "ctime": 1436810539.4215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2345824, - "inode": 523506, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/240", - "xusr": false, - "atime": 1436810538.2345824, - "isdir": false, - "ctime": 1436810538.2345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0885823, - "inode": 524626, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1360", - "xusr": false, - "atime": 1436810539.0885823, - "isdir": false, - "ctime": 1436810539.0885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0695822, - "inode": 525813, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2547", - "xusr": false, - "atime": 1436810540.0695822, - "isdir": false, - "ctime": 1436810540.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7325823, - "inode": 524141, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/875", - "xusr": false, - "atime": 1436810538.7325823, - "isdir": false, - "ctime": 1436810538.7325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6045823, - "inode": 527774, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4508", - "xusr": false, - "atime": 1436810541.6045823, - "isdir": false, - "ctime": 1436810541.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5985823, - "inode": 527766, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4500", - "xusr": false, - "atime": 1436810541.5985823, - "isdir": false, - "ctime": 1436810541.5985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9135823, - "inode": 528199, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4933", - "xusr": false, - "atime": 1436810541.9135823, - "isdir": false, - "ctime": 1436810541.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1115823, - "inode": 524658, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1392", - "xusr": false, - "atime": 1436810539.1115823, - "isdir": false, - "ctime": 1436810539.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0905824, - "inode": 527110, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3844", - "xusr": false, - "atime": 1436810541.0905824, - "isdir": false, - "ctime": 1436810541.0905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7315824, - "inode": 524140, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/874", - "xusr": false, - "atime": 1436810538.7315824, - "isdir": false, - "ctime": 1436810538.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1535823, - "inode": 524719, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1453", - "xusr": false, - "atime": 1436810539.1535823, - "isdir": false, - "ctime": 1436810539.1535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3075824, - "inode": 524938, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1672", - "xusr": false, - "atime": 1436810539.3075824, - "isdir": false, - "ctime": 1436810539.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3155823, - "inode": 527415, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4149", - "xusr": false, - "atime": 1436810541.3155823, - "isdir": false, - "ctime": 1436810541.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5995822, - "inode": 526424, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3158", - "xusr": false, - "atime": 1436810540.5995822, - "isdir": false, - "ctime": 1436810540.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8705823, - "inode": 526804, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3538", - "xusr": false, - "atime": 1436810540.8705823, - "isdir": false, - "ctime": 1436810540.8705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6595824, - "inode": 527848, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4582", - "xusr": false, - "atime": 1436810541.6595824, - "isdir": false, - "ctime": 1436810541.6595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5895822, - "inode": 527753, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4487", - "xusr": false, - "atime": 1436810541.5895822, - "isdir": false, - "ctime": 1436810541.5895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2175822, - "inode": 524811, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1545", - "xusr": false, - "atime": 1436810539.2175822, - "isdir": false, - "ctime": 1436810539.2175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8985822, - "inode": 528178, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4912", - "xusr": false, - "atime": 1436810541.8985822, - "isdir": false, - "ctime": 1436810541.8985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9085822, - "inode": 526858, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3592", - "xusr": false, - "atime": 1436810540.9085822, - "isdir": false, - "ctime": 1436810540.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7985823, - "inode": 526703, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3437", - "xusr": false, - "atime": 1436810540.7985823, - "isdir": false, - "ctime": 1436810540.7985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6915822, - "inode": 527892, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4626", - "xusr": false, - "atime": 1436810541.6915822, - "isdir": false, - "ctime": 1436810541.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4065824, - "inode": 525031, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1765", - "xusr": false, - "atime": 1436810539.4065824, - "isdir": false, - "ctime": 1436810539.4065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2745824, - "inode": 527362, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4096", - "xusr": false, - "atime": 1436810541.2745824, - "isdir": false, - "ctime": 1436810541.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3855822, - "inode": 526171, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2905", - "xusr": false, - "atime": 1436810540.3855822, - "isdir": false, - "ctime": 1436810540.3855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2205822, - "inode": 524815, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1549", - "xusr": false, - "atime": 1436810539.2205822, - "isdir": false, - "ctime": 1436810539.2205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9215822, - "inode": 526877, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3611", - "xusr": false, - "atime": 1436810540.9215822, - "isdir": false, - "ctime": 1436810540.9215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9695823, - "inode": 526943, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3677", - "xusr": false, - "atime": 1436810540.9695823, - "isdir": false, - "ctime": 1436810540.9695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1775823, - "inode": 527228, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3962", - "xusr": false, - "atime": 1436810541.1775823, - "isdir": false, - "ctime": 1436810541.1775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8295822, - "inode": 528082, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4816", - "xusr": false, - "atime": 1436810541.8295822, - "isdir": false, - "ctime": 1436810541.8295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2715824, - "inode": 524889, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1623", - "xusr": false, - "atime": 1436810539.2715824, - "isdir": false, - "ctime": 1436810539.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2525823, - "inode": 523531, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/265", - "xusr": false, - "atime": 1436810538.2525823, - "isdir": false, - "ctime": 1436810538.2525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8185823, - "inode": 526731, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3465", - "xusr": false, - "atime": 1436810540.8185823, - "isdir": false, - "ctime": 1436810540.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1625824, - "inode": 523403, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/137", - "xusr": false, - "atime": 1436810538.1625824, - "isdir": false, - "ctime": 1436810538.1625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9655824, - "inode": 526938, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3672", - "xusr": false, - "atime": 1436810540.9655824, - "isdir": false, - "ctime": 1436810540.9655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5875823, - "inode": 523946, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/680", - "xusr": false, - "atime": 1436810538.5875823, - "isdir": false, - "ctime": 1436810538.5875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0225823, - "inode": 524531, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1265", - "xusr": false, - "atime": 1436810539.0225823, - "isdir": false, - "ctime": 1436810539.0225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3465824, - "inode": 527445, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4179", - "xusr": false, - "atime": 1436810541.3465824, - "isdir": false, - "ctime": 1436810541.3465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5135822, - "inode": 525133, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1867", - "xusr": false, - "atime": 1436810539.5135822, - "isdir": false, - "ctime": 1436810539.5135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7575824, - "inode": 525397, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2131", - "xusr": false, - "atime": 1436810539.7575824, - "isdir": false, - "ctime": 1436810539.7575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3025823, - "inode": 527400, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4134", - "xusr": false, - "atime": 1436810541.3025823, - "isdir": false, - "ctime": 1436810541.3025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1405823, - "inode": 525880, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2614", - "xusr": false, - "atime": 1436810540.1405823, - "isdir": false, - "ctime": 1436810540.1405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4235823, - "inode": 523728, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/462", - "xusr": false, - "atime": 1436810538.4235823, - "isdir": false, - "ctime": 1436810538.4235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1235824, - "inode": 523347, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/81", - "xusr": false, - "atime": 1436810538.1235824, - "isdir": false, - "ctime": 1436810538.1235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4055824, - "inode": 523704, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/438", - "xusr": false, - "atime": 1436810538.4055824, - "isdir": false, - "ctime": 1436810538.4055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2055824, - "inode": 523465, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/199", - "xusr": false, - "atime": 1436810538.2055824, - "isdir": false, - "ctime": 1436810538.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9765823, - "inode": 525695, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2429", - "xusr": false, - "atime": 1436810539.9765823, - "isdir": false, - "ctime": 1436810539.9765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8095822, - "inode": 528055, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4789", - "xusr": false, - "atime": 1436810541.8095822, - "isdir": false, - "ctime": 1436810541.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7135823, - "inode": 525349, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2083", - "xusr": false, - "atime": 1436810539.7135823, - "isdir": false, - "ctime": 1436810539.7135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0735824, - "inode": 527086, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3820", - "xusr": false, - "atime": 1436810541.0735824, - "isdir": false, - "ctime": 1436810541.0735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1225822, - "inode": 524674, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1408", - "xusr": false, - "atime": 1436810539.1225822, - "isdir": false, - "ctime": 1436810539.1225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6195824, - "inode": 526452, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3186", - "xusr": false, - "atime": 1436810540.6195824, - "isdir": false, - "ctime": 1436810540.6195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6775823, - "inode": 524070, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/804", - "xusr": false, - "atime": 1436810538.6775823, - "isdir": false, - "ctime": 1436810538.6775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5405824, - "inode": 527685, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4419", - "xusr": false, - "atime": 1436810541.5405824, - "isdir": false, - "ctime": 1436810541.5405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5975823, - "inode": 526422, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3156", - "xusr": false, - "atime": 1436810540.5975823, - "isdir": false, - "ctime": 1436810540.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8135824, - "inode": 528062, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4796", - "xusr": false, - "atime": 1436810541.8135824, - "isdir": false, - "ctime": 1436810541.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7065823, - "inode": 526575, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3309", - "xusr": false, - "atime": 1436810540.7065823, - "isdir": false, - "ctime": 1436810540.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1215823, - "inode": 525861, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2595", - "xusr": false, - "atime": 1436810540.1215823, - "isdir": false, - "ctime": 1436810540.1215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0485823, - "inode": 525793, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2527", - "xusr": false, - "atime": 1436810540.0485823, - "isdir": false, - "ctime": 1436810540.0485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7455823, - "inode": 527967, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4701", - "xusr": false, - "atime": 1436810541.7455823, - "isdir": false, - "ctime": 1436810541.7455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2995822, - "inode": 526052, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2786", - "xusr": false, - "atime": 1436810540.2995822, - "isdir": false, - "ctime": 1436810540.2995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3135824, - "inode": 527413, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4147", - "xusr": false, - "atime": 1436810541.3135824, - "isdir": false, - "ctime": 1436810541.3135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9405823, - "inode": 526903, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3637", - "xusr": false, - "atime": 1436810540.9405823, - "isdir": false, - "ctime": 1436810540.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7775824, - "inode": 526673, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3407", - "xusr": false, - "atime": 1436810540.7775824, - "isdir": false, - "ctime": 1436810540.7775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3585823, - "inode": 526134, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2868", - "xusr": false, - "atime": 1436810540.3585823, - "isdir": false, - "ctime": 1436810540.3585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8045824, - "inode": 528049, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4783", - "xusr": false, - "atime": 1436810541.8045824, - "isdir": false, - "ctime": 1436810541.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5795822, - "inode": 526396, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3130", - "xusr": false, - "atime": 1436810540.5795822, - "isdir": false, - "ctime": 1436810540.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6975822, - "inode": 526561, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3295", - "xusr": false, - "atime": 1436810540.6975822, - "isdir": false, - "ctime": 1436810540.6975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6435823, - "inode": 525279, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2013", - "xusr": false, - "atime": 1436810539.6435823, - "isdir": false, - "ctime": 1436810539.6435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7025824, - "inode": 526569, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3303", - "xusr": false, - "atime": 1436810540.7025824, - "isdir": false, - "ctime": 1436810540.7025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0045824, - "inode": 524505, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1239", - "xusr": false, - "atime": 1436810539.0045824, - "isdir": false, - "ctime": 1436810539.0045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9085822, - "inode": 524373, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1107", - "xusr": false, - "atime": 1436810538.9085822, - "isdir": false, - "ctime": 1436810538.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5875823, - "inode": 523947, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/681", - "xusr": false, - "atime": 1436810538.5875823, - "isdir": false, - "ctime": 1436810538.5875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6965823, - "inode": 524095, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/829", - "xusr": false, - "atime": 1436810538.6965823, - "isdir": false, - "ctime": 1436810538.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5935824, - "inode": 526415, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3149", - "xusr": false, - "atime": 1436810540.5935824, - "isdir": false, - "ctime": 1436810540.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3065822, - "inode": 524937, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1671", - "xusr": false, - "atime": 1436810539.3065822, - "isdir": false, - "ctime": 1436810539.3065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9265823, - "inode": 524398, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1132", - "xusr": false, - "atime": 1436810538.9265823, - "isdir": false, - "ctime": 1436810538.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4745822, - "inode": 523791, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/525", - "xusr": false, - "atime": 1436810538.4745822, - "isdir": false, - "ctime": 1436810538.4745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9545822, - "inode": 525665, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2399", - "xusr": false, - "atime": 1436810539.9545822, - "isdir": false, - "ctime": 1436810539.9545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2605822, - "inode": 527343, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4077", - "xusr": false, - "atime": 1436810541.2605822, - "isdir": false, - "ctime": 1436810541.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5145824, - "inode": 523847, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/581", - "xusr": false, - "atime": 1436810538.5145824, - "isdir": false, - "ctime": 1436810538.5145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8915823, - "inode": 524349, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1083", - "xusr": false, - "atime": 1436810538.8915823, - "isdir": false, - "ctime": 1436810538.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0495822, - "inode": 524569, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1303", - "xusr": false, - "atime": 1436810539.0495822, - "isdir": false, - "ctime": 1436810539.0495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5645823, - "inode": 525187, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1921", - "xusr": false, - "atime": 1436810539.5645823, - "isdir": false, - "ctime": 1436810539.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5545824, - "inode": 523902, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/636", - "xusr": false, - "atime": 1436810538.5545824, - "isdir": false, - "ctime": 1436810538.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9185822, - "inode": 525617, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2351", - "xusr": false, - "atime": 1436810539.9185822, - "isdir": false, - "ctime": 1436810539.9185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9175823, - "inode": 525616, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2350", - "xusr": false, - "atime": 1436810539.9175823, - "isdir": false, - "ctime": 1436810539.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0075824, - "inode": 526995, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3729", - "xusr": false, - "atime": 1436810541.0075824, - "isdir": false, - "ctime": 1436810541.0075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1285822, - "inode": 525869, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2603", - "xusr": false, - "atime": 1436810540.1285822, - "isdir": false, - "ctime": 1436810540.1285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9145823, - "inode": 526867, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3601", - "xusr": false, - "atime": 1436810540.9145823, - "isdir": false, - "ctime": 1436810540.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8925824, - "inode": 528169, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4903", - "xusr": false, - "atime": 1436810541.8925824, - "isdir": false, - "ctime": 1436810541.8925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1545823, - "inode": 524720, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1454", - "xusr": false, - "atime": 1436810539.1545823, - "isdir": false, - "ctime": 1436810539.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0625823, - "inode": 527070, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3804", - "xusr": false, - "atime": 1436810541.0625823, - "isdir": false, - "ctime": 1436810541.0625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3805823, - "inode": 526164, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2898", - "xusr": false, - "atime": 1436810540.3805823, - "isdir": false, - "ctime": 1436810540.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0645823, - "inode": 525807, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2541", - "xusr": false, - "atime": 1436810540.0645823, - "isdir": false, - "ctime": 1436810540.0645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8385823, - "inode": 528095, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4829", - "xusr": false, - "atime": 1436810541.8385823, - "isdir": false, - "ctime": 1436810541.8385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6915822, - "inode": 524088, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/822", - "xusr": false, - "atime": 1436810538.6915822, - "isdir": false, - "ctime": 1436810538.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3605824, - "inode": 527454, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4188", - "xusr": false, - "atime": 1436810541.3605824, - "isdir": false, - "ctime": 1436810541.3605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3825824, - "inode": 525007, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1741", - "xusr": false, - "atime": 1436810539.3825824, - "isdir": false, - "ctime": 1436810539.3825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4345822, - "inode": 523735, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/469", - "xusr": false, - "atime": 1436810538.4345822, - "isdir": false, - "ctime": 1436810538.4345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3935823, - "inode": 523687, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/421", - "xusr": false, - "atime": 1436810538.3935823, - "isdir": false, - "ctime": 1436810538.3935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4125824, - "inode": 526209, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2943", - "xusr": false, - "atime": 1436810540.4125824, - "isdir": false, - "ctime": 1436810540.4125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9785824, - "inode": 525698, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2432", - "xusr": false, - "atime": 1436810539.9785824, - "isdir": false, - "ctime": 1436810539.9785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8245823, - "inode": 526739, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3473", - "xusr": false, - "atime": 1436810540.8245823, - "isdir": false, - "ctime": 1436810540.8245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9255824, - "inode": 524397, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1131", - "xusr": false, - "atime": 1436810538.9255824, - "isdir": false, - "ctime": 1436810538.9255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4345822, - "inode": 527538, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4272", - "xusr": false, - "atime": 1436810541.4345822, - "isdir": false, - "ctime": 1436810541.4345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7175822, - "inode": 524122, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/856", - "xusr": false, - "atime": 1436810538.7175822, - "isdir": false, - "ctime": 1436810538.7175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5315824, - "inode": 523871, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/605", - "xusr": false, - "atime": 1436810538.5315824, - "isdir": false, - "ctime": 1436810538.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5335822, - "inode": 527674, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4408", - "xusr": false, - "atime": 1436810541.5335822, - "isdir": false, - "ctime": 1436810541.5335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6045823, - "inode": 523971, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/705", - "xusr": false, - "atime": 1436810538.6045823, - "isdir": false, - "ctime": 1436810538.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7695823, - "inode": 527999, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4733", - "xusr": false, - "atime": 1436810541.7695823, - "isdir": false, - "ctime": 1436810541.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8345823, - "inode": 526753, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3487", - "xusr": false, - "atime": 1436810540.8345823, - "isdir": false, - "ctime": 1436810540.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6715822, - "inode": 526524, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3258", - "xusr": false, - "atime": 1436810540.6715822, - "isdir": false, - "ctime": 1436810540.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3505824, - "inode": 524983, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1717", - "xusr": false, - "atime": 1436810539.3505824, - "isdir": false, - "ctime": 1436810539.3505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4495823, - "inode": 523757, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/491", - "xusr": false, - "atime": 1436810538.4495823, - "isdir": false, - "ctime": 1436810538.4495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4635823, - "inode": 523776, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/510", - "xusr": false, - "atime": 1436810538.4635823, - "isdir": false, - "ctime": 1436810538.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9105823, - "inode": 525606, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2340", - "xusr": false, - "atime": 1436810539.9105823, - "isdir": false, - "ctime": 1436810539.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0685823, - "inode": 527079, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3813", - "xusr": false, - "atime": 1436810541.0685823, - "isdir": false, - "ctime": 1436810541.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9705822, - "inode": 525687, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2421", - "xusr": false, - "atime": 1436810539.9705822, - "isdir": false, - "ctime": 1436810539.9705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0365822, - "inode": 525777, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2511", - "xusr": false, - "atime": 1436810540.0365822, - "isdir": false, - "ctime": 1436810540.0365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1225822, - "inode": 525862, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2596", - "xusr": false, - "atime": 1436810540.1225822, - "isdir": false, - "ctime": 1436810540.1225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1365824, - "inode": 527173, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3907", - "xusr": false, - "atime": 1436810541.1365824, - "isdir": false, - "ctime": 1436810541.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9765823, - "inode": 526953, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3687", - "xusr": false, - "atime": 1436810540.9765823, - "isdir": false, - "ctime": 1436810540.9765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0095823, - "inode": 526998, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3732", - "xusr": false, - "atime": 1436810541.0095823, - "isdir": false, - "ctime": 1436810541.0095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3015823, - "inode": 524932, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1666", - "xusr": false, - "atime": 1436810539.3015823, - "isdir": false, - "ctime": 1436810539.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5845823, - "inode": 523942, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/676", - "xusr": false, - "atime": 1436810538.5845823, - "isdir": false, - "ctime": 1436810538.5845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9675822, - "inode": 525683, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2417", - "xusr": false, - "atime": 1436810539.9675822, - "isdir": false, - "ctime": 1436810539.9675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4135823, - "inode": 526211, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2945", - "xusr": false, - "atime": 1436810540.4135823, - "isdir": false, - "ctime": 1436810540.4135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7355824, - "inode": 526616, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3350", - "xusr": false, - "atime": 1436810540.7355824, - "isdir": false, - "ctime": 1436810540.7355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8835824, - "inode": 528157, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4891", - "xusr": false, - "atime": 1436810541.8835824, - "isdir": false, - "ctime": 1436810541.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1655824, - "inode": 527212, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3946", - "xusr": false, - "atime": 1436810541.1655824, - "isdir": false, - "ctime": 1436810541.1655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1065824, - "inode": 523325, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/59", - "xusr": false, - "atime": 1436810538.1065824, - "isdir": false, - "ctime": 1436810538.1065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0035822, - "inode": 526990, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3724", - "xusr": false, - "atime": 1436810541.0035822, - "isdir": false, - "ctime": 1436810541.0035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4875822, - "inode": 527612, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4346", - "xusr": false, - "atime": 1436810541.4875822, - "isdir": false, - "ctime": 1436810541.4875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7235823, - "inode": 524129, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/863", - "xusr": false, - "atime": 1436810538.7235823, - "isdir": false, - "ctime": 1436810538.7235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4185822, - "inode": 526218, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2952", - "xusr": false, - "atime": 1436810540.4185822, - "isdir": false, - "ctime": 1436810540.4185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3405824, - "inode": 527437, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4171", - "xusr": false, - "atime": 1436810541.3405824, - "isdir": false, - "ctime": 1436810541.3405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6455822, - "inode": 524026, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/760", - "xusr": false, - "atime": 1436810538.6455822, - "isdir": false, - "ctime": 1436810538.6455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6705823, - "inode": 525307, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2041", - "xusr": false, - "atime": 1436810539.6705823, - "isdir": false, - "ctime": 1436810539.6705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0995822, - "inode": 524641, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1375", - "xusr": false, - "atime": 1436810539.0995822, - "isdir": false, - "ctime": 1436810539.0995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5305824, - "inode": 525151, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1885", - "xusr": false, - "atime": 1436810539.5305824, - "isdir": false, - "ctime": 1436810539.5305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1285822, - "inode": 523355, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/89", - "xusr": false, - "atime": 1436810538.1285822, - "isdir": false, - "ctime": 1436810538.1285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8305824, - "inode": 526747, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3481", - "xusr": false, - "atime": 1436810540.8305824, - "isdir": false, - "ctime": 1436810540.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9555824, - "inode": 526924, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3658", - "xusr": false, - "atime": 1436810540.9555824, - "isdir": false, - "ctime": 1436810540.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6775823, - "inode": 525312, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2046", - "xusr": false, - "atime": 1436810539.6775823, - "isdir": false, - "ctime": 1436810539.6775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6025822, - "inode": 526429, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3163", - "xusr": false, - "atime": 1436810540.6025822, - "isdir": false, - "ctime": 1436810540.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7515824, - "inode": 524166, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/900", - "xusr": false, - "atime": 1436810538.7515824, - "isdir": false, - "ctime": 1436810538.7515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3075824, - "inode": 526063, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2797", - "xusr": false, - "atime": 1436810540.3075824, - "isdir": false, - "ctime": 1436810540.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3035824, - "inode": 524934, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1668", - "xusr": false, - "atime": 1436810539.3035824, - "isdir": false, - "ctime": 1436810539.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4665823, - "inode": 525083, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1817", - "xusr": false, - "atime": 1436810539.4665823, - "isdir": false, - "ctime": 1436810539.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7555823, - "inode": 527980, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4714", - "xusr": false, - "atime": 1436810541.7555823, - "isdir": false, - "ctime": 1436810541.7555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4855824, - "inode": 527609, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4343", - "xusr": false, - "atime": 1436810541.4855824, - "isdir": false, - "ctime": 1436810541.4855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2905824, - "inode": 526040, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2774", - "xusr": false, - "atime": 1436810540.2905824, - "isdir": false, - "ctime": 1436810540.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8005824, - "inode": 525452, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2186", - "xusr": false, - "atime": 1436810539.8005824, - "isdir": false, - "ctime": 1436810539.8005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2295823, - "inode": 524828, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1562", - "xusr": false, - "atime": 1436810539.2295823, - "isdir": false, - "ctime": 1436810539.2295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5215824, - "inode": 523856, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/590", - "xusr": false, - "atime": 1436810538.5215824, - "isdir": false, - "ctime": 1436810538.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1335824, - "inode": 523362, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/96", - "xusr": false, - "atime": 1436810538.1335824, - "isdir": false, - "ctime": 1436810538.1335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1995823, - "inode": 525939, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2673", - "xusr": false, - "atime": 1436810540.1995823, - "isdir": false, - "ctime": 1436810540.1995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8625822, - "inode": 524310, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1044", - "xusr": false, - "atime": 1436810538.8625822, - "isdir": false, - "ctime": 1436810538.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9875822, - "inode": 524484, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1218", - "xusr": false, - "atime": 1436810538.9875822, - "isdir": false, - "ctime": 1436810538.9875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1505823, - "inode": 527192, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3926", - "xusr": false, - "atime": 1436810541.1505823, - "isdir": false, - "ctime": 1436810541.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9895823, - "inode": 524485, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1219", - "xusr": false, - "atime": 1436810538.9895823, - "isdir": false, - "ctime": 1436810538.9895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4945824, - "inode": 526294, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3028", - "xusr": false, - "atime": 1436810540.4945824, - "isdir": false, - "ctime": 1436810540.4945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3885822, - "inode": 527479, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4213", - "xusr": false, - "atime": 1436810541.3885822, - "isdir": false, - "ctime": 1436810541.3885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9605823, - "inode": 528263, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4997", - "xusr": false, - "atime": 1436810541.9605823, - "isdir": false, - "ctime": 1436810541.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9915824, - "inode": 525717, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2451", - "xusr": false, - "atime": 1436810539.9915824, - "isdir": false, - "ctime": 1436810539.9915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5885823, - "inode": 527751, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4485", - "xusr": false, - "atime": 1436810541.5885823, - "isdir": false, - "ctime": 1436810541.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0435822, - "inode": 527045, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3779", - "xusr": false, - "atime": 1436810541.0435822, - "isdir": false, - "ctime": 1436810541.0435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2255824, - "inode": 523493, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/227", - "xusr": false, - "atime": 1436810538.2255824, - "isdir": false, - "ctime": 1436810538.2255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4375823, - "inode": 523740, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/474", - "xusr": false, - "atime": 1436810538.4375823, - "isdir": false, - "ctime": 1436810538.4375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7065823, - "inode": 525342, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2076", - "xusr": false, - "atime": 1436810539.7065823, - "isdir": false, - "ctime": 1436810539.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9375823, - "inode": 525642, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2376", - "xusr": false, - "atime": 1436810539.9375823, - "isdir": false, - "ctime": 1436810539.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2905824, - "inode": 527385, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4119", - "xusr": false, - "atime": 1436810541.2905824, - "isdir": false, - "ctime": 1436810541.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1045823, - "inode": 524649, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1383", - "xusr": false, - "atime": 1436810539.1045823, - "isdir": false, - "ctime": 1436810539.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3765824, - "inode": 526159, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2893", - "xusr": false, - "atime": 1436810540.3765824, - "isdir": false, - "ctime": 1436810540.3765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2045822, - "inode": 527265, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3999", - "xusr": false, - "atime": 1436810541.2045822, - "isdir": false, - "ctime": 1436810541.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1635823, - "inode": 525902, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2636", - "xusr": false, - "atime": 1436810540.1635823, - "isdir": false, - "ctime": 1436810540.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2225823, - "inode": 525966, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2700", - "xusr": false, - "atime": 1436810540.2225823, - "isdir": false, - "ctime": 1436810540.2225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8435824, - "inode": 528101, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4835", - "xusr": false, - "atime": 1436810541.8435824, - "isdir": false, - "ctime": 1436810541.8435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5205822, - "inode": 525139, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1873", - "xusr": false, - "atime": 1436810539.5205822, - "isdir": false, - "ctime": 1436810539.5205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7245822, - "inode": 524130, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/864", - "xusr": false, - "atime": 1436810538.7245822, - "isdir": false, - "ctime": 1436810538.7245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8335824, - "inode": 526752, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3486", - "xusr": false, - "atime": 1436810540.8335824, - "isdir": false, - "ctime": 1436810540.8335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2025824, - "inode": 523461, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/195", - "xusr": false, - "atime": 1436810538.2025824, - "isdir": false, - "ctime": 1436810538.2025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1225822, - "inode": 527154, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3888", - "xusr": false, - "atime": 1436810541.1225822, - "isdir": false, - "ctime": 1436810541.1225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7185824, - "inode": 524123, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/857", - "xusr": false, - "atime": 1436810538.7185824, - "isdir": false, - "ctime": 1436810538.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7035823, - "inode": 527909, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4643", - "xusr": false, - "atime": 1436810541.7035823, - "isdir": false, - "ctime": 1436810541.7035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3965824, - "inode": 527489, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4223", - "xusr": false, - "atime": 1436810541.3965824, - "isdir": false, - "ctime": 1436810541.3965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8485823, - "inode": 528108, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4842", - "xusr": false, - "atime": 1436810541.8485823, - "isdir": false, - "ctime": 1436810541.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7395823, - "inode": 526621, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3355", - "xusr": false, - "atime": 1436810540.7395823, - "isdir": false, - "ctime": 1436810540.7395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2275822, - "inode": 527297, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4031", - "xusr": false, - "atime": 1436810541.2275822, - "isdir": false, - "ctime": 1436810541.2275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0765822, - "inode": 527091, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3825", - "xusr": false, - "atime": 1436810541.0765822, - "isdir": false, - "ctime": 1436810541.0765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5615823, - "inode": 525183, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1917", - "xusr": false, - "atime": 1436810539.5615823, - "isdir": false, - "ctime": 1436810539.5615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0675824, - "inode": 524595, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1329", - "xusr": false, - "atime": 1436810539.0675824, - "isdir": false, - "ctime": 1436810539.0675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6895823, - "inode": 524086, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/820", - "xusr": false, - "atime": 1436810538.6895823, - "isdir": false, - "ctime": 1436810538.6895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4535823, - "inode": 523762, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/496", - "xusr": false, - "atime": 1436810538.4535823, - "isdir": false, - "ctime": 1436810538.4535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2665823, - "inode": 524881, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1615", - "xusr": false, - "atime": 1436810539.2665823, - "isdir": false, - "ctime": 1436810539.2665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2045822, - "inode": 527264, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3998", - "xusr": false, - "atime": 1436810541.2045822, - "isdir": false, - "ctime": 1436810541.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0855823, - "inode": 524621, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1355", - "xusr": false, - "atime": 1436810539.0855823, - "isdir": false, - "ctime": 1436810539.0855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8375823, - "inode": 526758, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3492", - "xusr": false, - "atime": 1436810540.8375823, - "isdir": false, - "ctime": 1436810540.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4855824, - "inode": 526291, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3025", - "xusr": false, - "atime": 1436810540.4855824, - "isdir": false, - "ctime": 1436810540.4855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7455823, - "inode": 526629, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3363", - "xusr": false, - "atime": 1436810540.7455823, - "isdir": false, - "ctime": 1436810540.7455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2675824, - "inode": 523552, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/286", - "xusr": false, - "atime": 1436810538.2675824, - "isdir": false, - "ctime": 1436810538.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1205823, - "inode": 524672, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1406", - "xusr": false, - "atime": 1436810539.1205823, - "isdir": false, - "ctime": 1436810539.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7775824, - "inode": 525424, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2158", - "xusr": false, - "atime": 1436810539.7775824, - "isdir": false, - "ctime": 1436810539.7775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9785824, - "inode": 526956, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3690", - "xusr": false, - "atime": 1436810540.9785824, - "isdir": false, - "ctime": 1436810540.9785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6155822, - "inode": 527789, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4523", - "xusr": false, - "atime": 1436810541.6155822, - "isdir": false, - "ctime": 1436810541.6155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4925823, - "inode": 523817, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/551", - "xusr": false, - "atime": 1436810538.4925823, - "isdir": false, - "ctime": 1436810538.4925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9025824, - "inode": 528183, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4917", - "xusr": false, - "atime": 1436810541.9025824, - "isdir": false, - "ctime": 1436810541.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6755824, - "inode": 524067, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/801", - "xusr": false, - "atime": 1436810538.6755824, - "isdir": false, - "ctime": 1436810538.6755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8405824, - "inode": 524281, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1015", - "xusr": false, - "atime": 1436810538.8405824, - "isdir": false, - "ctime": 1436810538.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1455822, - "inode": 527186, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3920", - "xusr": false, - "atime": 1436810541.1455822, - "isdir": false, - "ctime": 1436810541.1455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3955822, - "inode": 526185, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2919", - "xusr": false, - "atime": 1436810540.3955822, - "isdir": false, - "ctime": 1436810540.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7405822, - "inode": 526623, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3357", - "xusr": false, - "atime": 1436810540.7405822, - "isdir": false, - "ctime": 1436810540.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0595822, - "inode": 524584, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1318", - "xusr": false, - "atime": 1436810539.0595822, - "isdir": false, - "ctime": 1436810539.0595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2185824, - "inode": 527284, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4018", - "xusr": false, - "atime": 1436810541.2185824, - "isdir": false, - "ctime": 1436810541.2185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8835824, - "inode": 524339, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1073", - "xusr": false, - "atime": 1436810538.8835824, - "isdir": false, - "ctime": 1436810538.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8355823, - "inode": 524275, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1009", - "xusr": false, - "atime": 1436810538.8355823, - "isdir": false, - "ctime": 1436810538.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9425824, - "inode": 525650, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2384", - "xusr": false, - "atime": 1436810539.9425824, - "isdir": false, - "ctime": 1436810539.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5605824, - "inode": 525181, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1915", - "xusr": false, - "atime": 1436810539.5605824, - "isdir": false, - "ctime": 1436810539.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4625823, - "inode": 527576, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4310", - "xusr": false, - "atime": 1436810541.4625823, - "isdir": false, - "ctime": 1436810541.4625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1395824, - "inode": 523370, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/104", - "xusr": false, - "atime": 1436810538.1395824, - "isdir": false, - "ctime": 1436810538.1395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7905824, - "inode": 524214, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/948", - "xusr": false, - "atime": 1436810538.7905824, - "isdir": false, - "ctime": 1436810538.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6075823, - "inode": 526436, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3170", - "xusr": false, - "atime": 1436810540.6075823, - "isdir": false, - "ctime": 1436810540.6075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2695823, - "inode": 523555, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/289", - "xusr": false, - "atime": 1436810538.2695823, - "isdir": false, - "ctime": 1436810538.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4045823, - "inode": 527499, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4233", - "xusr": false, - "atime": 1436810541.4045823, - "isdir": false, - "ctime": 1436810541.4045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6685822, - "inode": 527860, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4594", - "xusr": false, - "atime": 1436810541.6685822, - "isdir": false, - "ctime": 1436810541.6685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7695823, - "inode": 525412, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2146", - "xusr": false, - "atime": 1436810539.7695823, - "isdir": false, - "ctime": 1436810539.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2625823, - "inode": 524875, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1609", - "xusr": false, - "atime": 1436810539.2625823, - "isdir": false, - "ctime": 1436810539.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9295824, - "inode": 528220, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4954", - "xusr": false, - "atime": 1436810541.9295824, - "isdir": false, - "ctime": 1436810541.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9605823, - "inode": 528264, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4998", - "xusr": false, - "atime": 1436810541.9605823, - "isdir": false, - "ctime": 1436810541.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1735823, - "inode": 523419, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/153", - "xusr": false, - "atime": 1436810538.1735823, - "isdir": false, - "ctime": 1436810538.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1015823, - "inode": 527125, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3859", - "xusr": false, - "atime": 1436810541.1015823, - "isdir": false, - "ctime": 1436810541.1015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2965822, - "inode": 523594, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/328", - "xusr": false, - "atime": 1436810538.2965822, - "isdir": false, - "ctime": 1436810538.2965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9975822, - "inode": 526981, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3715", - "xusr": false, - "atime": 1436810540.9975822, - "isdir": false, - "ctime": 1436810540.9975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2925823, - "inode": 526043, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2777", - "xusr": false, - "atime": 1436810540.2925823, - "isdir": false, - "ctime": 1436810540.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8685822, - "inode": 524318, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1052", - "xusr": false, - "atime": 1436810538.8685822, - "isdir": false, - "ctime": 1436810538.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7275822, - "inode": 524134, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/868", - "xusr": false, - "atime": 1436810538.7275822, - "isdir": false, - "ctime": 1436810538.7275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4745822, - "inode": 527593, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4327", - "xusr": false, - "atime": 1436810541.4745822, - "isdir": false, - "ctime": 1436810541.4745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8665824, - "inode": 526798, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3532", - "xusr": false, - "atime": 1436810540.8665824, - "isdir": false, - "ctime": 1436810540.8665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2335823, - "inode": 524834, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1568", - "xusr": false, - "atime": 1436810539.2335823, - "isdir": false, - "ctime": 1436810539.2335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9575822, - "inode": 526926, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3660", - "xusr": false, - "atime": 1436810540.9575822, - "isdir": false, - "ctime": 1436810540.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1075823, - "inode": 524653, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1387", - "xusr": false, - "atime": 1436810539.1075823, - "isdir": false, - "ctime": 1436810539.1075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8115823, - "inode": 524242, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/976", - "xusr": false, - "atime": 1436810538.8115823, - "isdir": false, - "ctime": 1436810538.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3855822, - "inode": 523681, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/415", - "xusr": false, - "atime": 1436810538.3855822, - "isdir": false, - "ctime": 1436810538.3855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6635823, - "inode": 527854, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4588", - "xusr": false, - "atime": 1436810541.6635823, - "isdir": false, - "ctime": 1436810541.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7045822, - "inode": 524106, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/840", - "xusr": false, - "atime": 1436810538.7045822, - "isdir": false, - "ctime": 1436810538.7045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9005823, - "inode": 526847, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3581", - "xusr": false, - "atime": 1436810540.9005823, - "isdir": false, - "ctime": 1436810540.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4615824, - "inode": 527575, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4309", - "xusr": false, - "atime": 1436810541.4615824, - "isdir": false, - "ctime": 1436810541.4615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0665822, - "inode": 527076, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3810", - "xusr": false, - "atime": 1436810541.0665822, - "isdir": false, - "ctime": 1436810541.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5735824, - "inode": 526388, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3122", - "xusr": false, - "atime": 1436810540.5735824, - "isdir": false, - "ctime": 1436810540.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6445823, - "inode": 525281, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2015", - "xusr": false, - "atime": 1436810539.6445823, - "isdir": false, - "ctime": 1436810539.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5855823, - "inode": 523943, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/677", - "xusr": false, - "atime": 1436810538.5855823, - "isdir": false, - "ctime": 1436810538.5855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6675823, - "inode": 527859, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4593", - "xusr": false, - "atime": 1436810541.6675823, - "isdir": false, - "ctime": 1436810541.6675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4225824, - "inode": 527522, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4256", - "xusr": false, - "atime": 1436810541.4225824, - "isdir": false, - "ctime": 1436810541.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7895823, - "inode": 526690, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3424", - "xusr": false, - "atime": 1436810540.7895823, - "isdir": false, - "ctime": 1436810540.7895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5995822, - "inode": 527767, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4501", - "xusr": false, - "atime": 1436810541.5995822, - "isdir": false, - "ctime": 1436810541.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9565823, - "inode": 525668, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2402", - "xusr": false, - "atime": 1436810539.9565823, - "isdir": false, - "ctime": 1436810539.9565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1715822, - "inode": 527220, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3954", - "xusr": false, - "atime": 1436810541.1715822, - "isdir": false, - "ctime": 1436810541.1715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9335823, - "inode": 528226, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4960", - "xusr": false, - "atime": 1436810541.9335823, - "isdir": false, - "ctime": 1436810541.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5315824, - "inode": 523870, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/604", - "xusr": false, - "atime": 1436810538.5315824, - "isdir": false, - "ctime": 1436810538.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9635823, - "inode": 525677, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2411", - "xusr": false, - "atime": 1436810539.9635823, - "isdir": false, - "ctime": 1436810539.9635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3995824, - "inode": 527492, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4226", - "xusr": false, - "atime": 1436810541.3995824, - "isdir": false, - "ctime": 1436810541.3995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3715823, - "inode": 527462, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4196", - "xusr": false, - "atime": 1436810541.3715823, - "isdir": false, - "ctime": 1436810541.3715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3485823, - "inode": 526120, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2854", - "xusr": false, - "atime": 1436810540.3485823, - "isdir": false, - "ctime": 1436810540.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2565823, - "inode": 523536, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/270", - "xusr": false, - "atime": 1436810538.2565823, - "isdir": false, - "ctime": 1436810538.2565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6835823, - "inode": 526542, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3276", - "xusr": false, - "atime": 1436810540.6835823, - "isdir": false, - "ctime": 1436810540.6835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9005823, - "inode": 528180, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4914", - "xusr": false, - "atime": 1436810541.9005823, - "isdir": false, - "ctime": 1436810541.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7355824, - "inode": 527953, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4687", - "xusr": false, - "atime": 1436810541.7355824, - "isdir": false, - "ctime": 1436810541.7355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7505822, - "inode": 525388, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2122", - "xusr": false, - "atime": 1436810539.7505822, - "isdir": false, - "ctime": 1436810539.7505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3685822, - "inode": 524996, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1730", - "xusr": false, - "atime": 1436810539.3685822, - "isdir": false, - "ctime": 1436810539.3685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7015822, - "inode": 527907, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4641", - "xusr": false, - "atime": 1436810541.7015822, - "isdir": false, - "ctime": 1436810541.7015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0925822, - "inode": 523306, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/40", - "xusr": false, - "atime": 1436810538.0925822, - "isdir": false, - "ctime": 1436810538.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9555824, - "inode": 526923, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3657", - "xusr": false, - "atime": 1436810540.9555824, - "isdir": false, - "ctime": 1436810540.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0545824, - "inode": 524577, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1311", - "xusr": false, - "atime": 1436810539.0545824, - "isdir": false, - "ctime": 1436810539.0545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9895823, - "inode": 525713, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2447", - "xusr": false, - "atime": 1436810539.9895823, - "isdir": false, - "ctime": 1436810539.9895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9885824, - "inode": 525712, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2446", - "xusr": false, - "atime": 1436810539.9885824, - "isdir": false, - "ctime": 1436810539.9885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8385823, - "inode": 524279, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1013", - "xusr": false, - "atime": 1436810538.8385823, - "isdir": false, - "ctime": 1436810538.8385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3795824, - "inode": 525004, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1738", - "xusr": false, - "atime": 1436810539.3795824, - "isdir": false, - "ctime": 1436810539.3795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6105824, - "inode": 526440, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3174", - "xusr": false, - "atime": 1436810540.6105824, - "isdir": false, - "ctime": 1436810540.6105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6815822, - "inode": 527878, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4612", - "xusr": false, - "atime": 1436810541.6815822, - "isdir": false, - "ctime": 1436810541.6815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6475823, - "inode": 524029, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/763", - "xusr": false, - "atime": 1436810538.6475823, - "isdir": false, - "ctime": 1436810538.6475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9905822, - "inode": 524486, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1220", - "xusr": false, - "atime": 1436810538.9905822, - "isdir": false, - "ctime": 1436810538.9905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2975824, - "inode": 526050, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2784", - "xusr": false, - "atime": 1436810540.2975824, - "isdir": false, - "ctime": 1436810540.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5125823, - "inode": 527646, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4380", - "xusr": false, - "atime": 1436810541.5125823, - "isdir": false, - "ctime": 1436810541.5125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1825824, - "inode": 524760, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1494", - "xusr": false, - "atime": 1436810539.1825824, - "isdir": false, - "ctime": 1436810539.1825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7305822, - "inode": 524138, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/872", - "xusr": false, - "atime": 1436810538.7305822, - "isdir": false, - "ctime": 1436810538.7305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1235824, - "inode": 525863, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2597", - "xusr": false, - "atime": 1436810540.1235824, - "isdir": false, - "ctime": 1436810540.1235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2105823, - "inode": 523473, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/207", - "xusr": false, - "atime": 1436810538.2105823, - "isdir": false, - "ctime": 1436810538.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7535822, - "inode": 527978, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4712", - "xusr": false, - "atime": 1436810541.7535822, - "isdir": false, - "ctime": 1436810541.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8855822, - "inode": 525572, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2306", - "xusr": false, - "atime": 1436810539.8855822, - "isdir": false, - "ctime": 1436810539.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4355824, - "inode": 527540, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4274", - "xusr": false, - "atime": 1436810541.4355824, - "isdir": false, - "ctime": 1436810541.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2515824, - "inode": 527330, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4064", - "xusr": false, - "atime": 1436810541.2515824, - "isdir": false, - "ctime": 1436810541.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7765822, - "inode": 526672, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3406", - "xusr": false, - "atime": 1436810540.7765822, - "isdir": false, - "ctime": 1436810540.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7555823, - "inode": 525394, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2128", - "xusr": false, - "atime": 1436810539.7555823, - "isdir": false, - "ctime": 1436810539.7555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2345824, - "inode": 527306, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4040", - "xusr": false, - "atime": 1436810541.2345824, - "isdir": false, - "ctime": 1436810541.2345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1325824, - "inode": 524689, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1423", - "xusr": false, - "atime": 1436810539.1325824, - "isdir": false, - "ctime": 1436810539.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7145822, - "inode": 527924, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4658", - "xusr": false, - "atime": 1436810541.7145822, - "isdir": false, - "ctime": 1436810541.7145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8125823, - "inode": 525468, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2202", - "xusr": false, - "atime": 1436810539.8125823, - "isdir": false, - "ctime": 1436810539.8125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0075824, - "inode": 525739, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2473", - "xusr": false, - "atime": 1436810540.0075824, - "isdir": false, - "ctime": 1436810540.0075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7915823, - "inode": 528030, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4764", - "xusr": false, - "atime": 1436810541.7915823, - "isdir": false, - "ctime": 1436810541.7915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6585822, - "inode": 527846, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4580", - "xusr": false, - "atime": 1436810541.6585822, - "isdir": false, - "ctime": 1436810541.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4225824, - "inode": 526224, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2958", - "xusr": false, - "atime": 1436810540.4225824, - "isdir": false, - "ctime": 1436810540.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2305822, - "inode": 527301, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4035", - "xusr": false, - "atime": 1436810541.2305822, - "isdir": false, - "ctime": 1436810541.2305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0145824, - "inode": 525748, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2482", - "xusr": false, - "atime": 1436810540.0145824, - "isdir": false, - "ctime": 1436810540.0145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2095823, - "inode": 527271, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4005", - "xusr": false, - "atime": 1436810541.2095823, - "isdir": false, - "ctime": 1436810541.2095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1405823, - "inode": 527179, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3913", - "xusr": false, - "atime": 1436810541.1405823, - "isdir": false, - "ctime": 1436810541.1405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5595822, - "inode": 523908, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/642", - "xusr": false, - "atime": 1436810538.5595822, - "isdir": false, - "ctime": 1436810538.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7225823, - "inode": 527936, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4670", - "xusr": false, - "atime": 1436810541.7225823, - "isdir": false, - "ctime": 1436810541.7225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7945824, - "inode": 526697, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3431", - "xusr": false, - "atime": 1436810540.7945824, - "isdir": false, - "ctime": 1436810540.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6645823, - "inode": 525302, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2036", - "xusr": false, - "atime": 1436810539.6645823, - "isdir": false, - "ctime": 1436810539.6645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3275824, - "inode": 526090, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2824", - "xusr": false, - "atime": 1436810540.3275824, - "isdir": false, - "ctime": 1436810540.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5105822, - "inode": 523842, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/576", - "xusr": false, - "atime": 1436810538.5105822, - "isdir": false, - "ctime": 1436810538.5105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7845824, - "inode": 525434, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2168", - "xusr": false, - "atime": 1436810539.7845824, - "isdir": false, - "ctime": 1436810539.7845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1745822, - "inode": 523420, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/154", - "xusr": false, - "atime": 1436810538.1745822, - "isdir": false, - "ctime": 1436810538.1745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2805824, - "inode": 524902, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1636", - "xusr": false, - "atime": 1436810539.2805824, - "isdir": false, - "ctime": 1436810539.2805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6415823, - "inode": 527823, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4557", - "xusr": false, - "atime": 1436810541.6415823, - "isdir": false, - "ctime": 1436810541.6415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6285822, - "inode": 527807, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4541", - "xusr": false, - "atime": 1436810541.6285822, - "isdir": false, - "ctime": 1436810541.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5035822, - "inode": 527634, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4368", - "xusr": false, - "atime": 1436810541.5035822, - "isdir": false, - "ctime": 1436810541.5035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3295822, - "inode": 523626, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/360", - "xusr": false, - "atime": 1436810538.3295822, - "isdir": false, - "ctime": 1436810538.3295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5455823, - "inode": 525166, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1900", - "xusr": false, - "atime": 1436810539.5455823, - "isdir": false, - "ctime": 1436810539.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5865824, - "inode": 523945, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/679", - "xusr": false, - "atime": 1436810538.5865824, - "isdir": false, - "ctime": 1436810538.5865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0895822, - "inode": 525833, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2567", - "xusr": false, - "atime": 1436810540.0895822, - "isdir": false, - "ctime": 1436810540.0895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7145822, - "inode": 525350, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2084", - "xusr": false, - "atime": 1436810539.7145822, - "isdir": false, - "ctime": 1436810539.7145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6665823, - "inode": 527857, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4591", - "xusr": false, - "atime": 1436810541.6665823, - "isdir": false, - "ctime": 1436810541.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1905823, - "inode": 524772, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1506", - "xusr": false, - "atime": 1436810539.1905823, - "isdir": false, - "ctime": 1436810539.1905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5285823, - "inode": 526327, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3061", - "xusr": false, - "atime": 1436810540.5285823, - "isdir": false, - "ctime": 1436810540.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0935824, - "inode": 527115, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3849", - "xusr": false, - "atime": 1436810541.0935824, - "isdir": false, - "ctime": 1436810541.0935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7015824, - "inode": 525337, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2071", - "xusr": false, - "atime": 1436810539.7015824, - "isdir": false, - "ctime": 1436810539.7015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6875823, - "inode": 526547, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3281", - "xusr": false, - "atime": 1436810540.6875823, - "isdir": false, - "ctime": 1436810540.6875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9845824, - "inode": 525706, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2440", - "xusr": false, - "atime": 1436810539.9845824, - "isdir": false, - "ctime": 1436810539.9845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4035823, - "inode": 526197, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2931", - "xusr": false, - "atime": 1436810540.4035823, - "isdir": false, - "ctime": 1436810540.4035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2135823, - "inode": 527277, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4011", - "xusr": false, - "atime": 1436810541.2135823, - "isdir": false, - "ctime": 1436810541.2135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8155823, - "inode": 526727, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3461", - "xusr": false, - "atime": 1436810540.8155823, - "isdir": false, - "ctime": 1436810540.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5835824, - "inode": 527745, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4479", - "xusr": false, - "atime": 1436810541.5835824, - "isdir": false, - "ctime": 1436810541.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2285824, - "inode": 527298, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4032", - "xusr": false, - "atime": 1436810541.2285824, - "isdir": false, - "ctime": 1436810541.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2205822, - "inode": 523486, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/220", - "xusr": false, - "atime": 1436810538.2205822, - "isdir": false, - "ctime": 1436810538.2205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8515823, - "inode": 528112, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4846", - "xusr": false, - "atime": 1436810541.8515823, - "isdir": false, - "ctime": 1436810541.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2965822, - "inode": 527393, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4127", - "xusr": false, - "atime": 1436810541.2965822, - "isdir": false, - "ctime": 1436810541.2965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3005824, - "inode": 523599, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/333", - "xusr": false, - "atime": 1436810538.3005824, - "isdir": false, - "ctime": 1436810538.3005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3295822, - "inode": 526093, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2827", - "xusr": false, - "atime": 1436810540.3295822, - "isdir": false, - "ctime": 1436810540.3295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0695822, - "inode": 527081, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3815", - "xusr": false, - "atime": 1436810541.0695822, - "isdir": false, - "ctime": 1436810541.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8795824, - "inode": 525563, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2297", - "xusr": false, - "atime": 1436810539.8795824, - "isdir": false, - "ctime": 1436810539.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7575824, - "inode": 524174, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/908", - "xusr": false, - "atime": 1436810538.7575824, - "isdir": false, - "ctime": 1436810538.7575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7155824, - "inode": 525351, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2085", - "xusr": false, - "atime": 1436810539.7155824, - "isdir": false, - "ctime": 1436810539.7155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4545822, - "inode": 527566, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4300", - "xusr": false, - "atime": 1436810541.4545822, - "isdir": false, - "ctime": 1436810541.4545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9445822, - "inode": 526909, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3643", - "xusr": false, - "atime": 1436810540.9445822, - "isdir": false, - "ctime": 1436810540.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7335823, - "inode": 524142, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/876", - "xusr": false, - "atime": 1436810538.7335823, - "isdir": false, - "ctime": 1436810538.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7335823, - "inode": 527950, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4684", - "xusr": false, - "atime": 1436810541.7335823, - "isdir": false, - "ctime": 1436810541.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2165823, - "inode": 527281, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4015", - "xusr": false, - "atime": 1436810541.2165823, - "isdir": false, - "ctime": 1436810541.2165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8955822, - "inode": 526840, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3574", - "xusr": false, - "atime": 1436810540.8955822, - "isdir": false, - "ctime": 1436810540.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8475823, - "inode": 526772, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3506", - "xusr": false, - "atime": 1436810540.8475823, - "isdir": false, - "ctime": 1436810540.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9465823, - "inode": 526911, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3645", - "xusr": false, - "atime": 1436810540.9465823, - "isdir": false, - "ctime": 1436810540.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8645823, - "inode": 525542, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2276", - "xusr": false, - "atime": 1436810539.8645823, - "isdir": false, - "ctime": 1436810539.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8485823, - "inode": 524292, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1026", - "xusr": false, - "atime": 1436810538.8485823, - "isdir": false, - "ctime": 1436810538.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8935823, - "inode": 526837, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3571", - "xusr": false, - "atime": 1436810540.8935823, - "isdir": false, - "ctime": 1436810540.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1735823, - "inode": 524747, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1481", - "xusr": false, - "atime": 1436810539.1735823, - "isdir": false, - "ctime": 1436810539.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5685823, - "inode": 526381, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3115", - "xusr": false, - "atime": 1436810540.5685823, - "isdir": false, - "ctime": 1436810540.5685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4315822, - "inode": 527534, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4268", - "xusr": false, - "atime": 1436810541.4315822, - "isdir": false, - "ctime": 1436810541.4315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2955823, - "inode": 523593, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/327", - "xusr": false, - "atime": 1436810538.2955823, - "isdir": false, - "ctime": 1436810538.2955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3125823, - "inode": 526069, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2803", - "xusr": false, - "atime": 1436810540.3125823, - "isdir": false, - "ctime": 1436810540.3125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2615824, - "inode": 523544, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/278", - "xusr": false, - "atime": 1436810538.2615824, - "isdir": false, - "ctime": 1436810538.2615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5555823, - "inode": 527705, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4439", - "xusr": false, - "atime": 1436810541.5555823, - "isdir": false, - "ctime": 1436810541.5555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2875824, - "inode": 523581, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/315", - "xusr": false, - "atime": 1436810538.2875824, - "isdir": false, - "ctime": 1436810538.2875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4865823, - "inode": 527611, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4345", - "xusr": false, - "atime": 1436810541.4865823, - "isdir": false, - "ctime": 1436810541.4865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9395823, - "inode": 525645, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2379", - "xusr": false, - "atime": 1436810539.9395823, - "isdir": false, - "ctime": 1436810539.9395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9085822, - "inode": 528191, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4925", - "xusr": false, - "atime": 1436810541.9085822, - "isdir": false, - "ctime": 1436810541.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5495822, - "inode": 525169, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1903", - "xusr": false, - "atime": 1436810539.5495822, - "isdir": false, - "ctime": 1436810539.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2745824, - "inode": 527363, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4097", - "xusr": false, - "atime": 1436810541.2745824, - "isdir": false, - "ctime": 1436810541.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1935823, - "inode": 527249, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3983", - "xusr": false, - "atime": 1436810541.1935823, - "isdir": false, - "ctime": 1436810541.1935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1545823, - "inode": 523392, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/126", - "xusr": false, - "atime": 1436810538.1545823, - "isdir": false, - "ctime": 1436810538.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6815822, - "inode": 526539, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3273", - "xusr": false, - "atime": 1436810540.6815822, - "isdir": false, - "ctime": 1436810540.6815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4685824, - "inode": 523783, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/517", - "xusr": false, - "atime": 1436810538.4685824, - "isdir": false, - "ctime": 1436810538.4685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2595823, - "inode": 523541, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/275", - "xusr": false, - "atime": 1436810538.2595823, - "isdir": false, - "ctime": 1436810538.2595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5625823, - "inode": 525184, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1918", - "xusr": false, - "atime": 1436810539.5625823, - "isdir": false, - "ctime": 1436810539.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1655824, - "inode": 524736, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1470", - "xusr": false, - "atime": 1436810539.1655824, - "isdir": false, - "ctime": 1436810539.1655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1615822, - "inode": 523402, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/136", - "xusr": false, - "atime": 1436810538.1615822, - "isdir": false, - "ctime": 1436810538.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4605823, - "inode": 523772, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/506", - "xusr": false, - "atime": 1436810538.4605823, - "isdir": false, - "ctime": 1436810538.4605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7415824, - "inode": 525379, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2113", - "xusr": false, - "atime": 1436810539.7415824, - "isdir": false, - "ctime": 1436810539.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3135824, - "inode": 524944, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1678", - "xusr": false, - "atime": 1436810539.3135824, - "isdir": false, - "ctime": 1436810539.3135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3325822, - "inode": 526098, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2832", - "xusr": false, - "atime": 1436810540.3325822, - "isdir": false, - "ctime": 1436810540.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5975823, - "inode": 526421, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3155", - "xusr": false, - "atime": 1436810540.5975823, - "isdir": false, - "ctime": 1436810540.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8795824, - "inode": 524333, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1067", - "xusr": false, - "atime": 1436810538.8795824, - "isdir": false, - "ctime": 1436810538.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3145823, - "inode": 524945, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1679", - "xusr": false, - "atime": 1436810539.3145823, - "isdir": false, - "ctime": 1436810539.3145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1225822, - "inode": 523346, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/80", - "xusr": false, - "atime": 1436810538.1225822, - "isdir": false, - "ctime": 1436810538.1225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1815822, - "inode": 523431, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/165", - "xusr": false, - "atime": 1436810538.1815822, - "isdir": false, - "ctime": 1436810538.1815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1395824, - "inode": 523371, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/105", - "xusr": false, - "atime": 1436810538.1395824, - "isdir": false, - "ctime": 1436810538.1395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7205822, - "inode": 526595, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3329", - "xusr": false, - "atime": 1436810540.7205822, - "isdir": false, - "ctime": 1436810540.7205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9875822, - "inode": 526969, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3703", - "xusr": false, - "atime": 1436810540.9875822, - "isdir": false, - "ctime": 1436810540.9875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1665823, - "inode": 527213, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3947", - "xusr": false, - "atime": 1436810541.1665823, - "isdir": false, - "ctime": 1436810541.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4995823, - "inode": 525120, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1854", - "xusr": false, - "atime": 1436810539.4995823, - "isdir": false, - "ctime": 1436810539.4995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1725824, - "inode": 524746, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1480", - "xusr": false, - "atime": 1436810539.1725824, - "isdir": false, - "ctime": 1436810539.1725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8715823, - "inode": 525551, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2285", - "xusr": false, - "atime": 1436810539.8715823, - "isdir": false, - "ctime": 1436810539.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3075824, - "inode": 523607, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/341", - "xusr": false, - "atime": 1436810538.3075824, - "isdir": false, - "ctime": 1436810538.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8085823, - "inode": 525463, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2197", - "xusr": false, - "atime": 1436810539.8085823, - "isdir": false, - "ctime": 1436810539.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9665823, - "inode": 525682, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2416", - "xusr": false, - "atime": 1436810539.9665823, - "isdir": false, - "ctime": 1436810539.9665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4815824, - "inode": 527603, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4337", - "xusr": false, - "atime": 1436810541.4815824, - "isdir": false, - "ctime": 1436810541.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5835824, - "inode": 527744, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4478", - "xusr": false, - "atime": 1436810541.5835824, - "isdir": false, - "ctime": 1436810541.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7995822, - "inode": 524226, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/960", - "xusr": false, - "atime": 1436810538.7995822, - "isdir": false, - "ctime": 1436810538.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8095822, - "inode": 526719, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3453", - "xusr": false, - "atime": 1436810540.8095822, - "isdir": false, - "ctime": 1436810540.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9275823, - "inode": 528217, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4951", - "xusr": false, - "atime": 1436810541.9275823, - "isdir": false, - "ctime": 1436810541.9275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1965823, - "inode": 527253, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3987", - "xusr": false, - "atime": 1436810541.1965823, - "isdir": false, - "ctime": 1436810541.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2985823, - "inode": 524927, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1661", - "xusr": false, - "atime": 1436810539.2985823, - "isdir": false, - "ctime": 1436810539.2985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1785824, - "inode": 524755, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1489", - "xusr": false, - "atime": 1436810539.1785824, - "isdir": false, - "ctime": 1436810539.1785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2905824, - "inode": 524915, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1649", - "xusr": false, - "atime": 1436810539.2905824, - "isdir": false, - "ctime": 1436810539.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8985822, - "inode": 525590, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2324", - "xusr": false, - "atime": 1436810539.8985822, - "isdir": false, - "ctime": 1436810539.8985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4385824, - "inode": 523741, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/475", - "xusr": false, - "atime": 1436810538.4385824, - "isdir": false, - "ctime": 1436810538.4385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9245822, - "inode": 526880, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3614", - "xusr": false, - "atime": 1436810540.9245822, - "isdir": false, - "ctime": 1436810540.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3335824, - "inode": 526099, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2833", - "xusr": false, - "atime": 1436810540.3335824, - "isdir": false, - "ctime": 1436810540.3335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2555823, - "inode": 523535, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/269", - "xusr": false, - "atime": 1436810538.2555823, - "isdir": false, - "ctime": 1436810538.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4125824, - "inode": 523713, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/447", - "xusr": false, - "atime": 1436810538.4125824, - "isdir": false, - "ctime": 1436810538.4125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4655824, - "inode": 525082, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1816", - "xusr": false, - "atime": 1436810539.4655824, - "isdir": false, - "ctime": 1436810539.4655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1865823, - "inode": 523438, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/172", - "xusr": false, - "atime": 1436810538.1865823, - "isdir": false, - "ctime": 1436810538.1865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7875824, - "inode": 525438, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2172", - "xusr": false, - "atime": 1436810539.7875824, - "isdir": false, - "ctime": 1436810539.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0835824, - "inode": 525826, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2560", - "xusr": false, - "atime": 1436810540.0835824, - "isdir": false, - "ctime": 1436810540.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7865822, - "inode": 526686, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3420", - "xusr": false, - "atime": 1436810540.7865822, - "isdir": false, - "ctime": 1436810540.7865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2455823, - "inode": 525991, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2725", - "xusr": false, - "atime": 1436810540.2455823, - "isdir": false, - "ctime": 1436810540.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0655823, - "inode": 525808, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2542", - "xusr": false, - "atime": 1436810540.0655823, - "isdir": false, - "ctime": 1436810540.0655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1025822, - "inode": 524646, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1380", - "xusr": false, - "atime": 1436810539.1025822, - "isdir": false, - "ctime": 1436810539.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5325823, - "inode": 527673, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4407", - "xusr": false, - "atime": 1436810541.5325823, - "isdir": false, - "ctime": 1436810541.5325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5765822, - "inode": 526392, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3126", - "xusr": false, - "atime": 1436810540.5765822, - "isdir": false, - "ctime": 1436810540.5765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1115823, - "inode": 524659, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1393", - "xusr": false, - "atime": 1436810539.1115823, - "isdir": false, - "ctime": 1436810539.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4075823, - "inode": 525032, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1766", - "xusr": false, - "atime": 1436810539.4075823, - "isdir": false, - "ctime": 1436810539.4075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9155824, - "inode": 528202, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4936", - "xusr": false, - "atime": 1436810541.9155824, - "isdir": false, - "ctime": 1436810541.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4465823, - "inode": 526252, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2986", - "xusr": false, - "atime": 1436810540.4465823, - "isdir": false, - "ctime": 1436810540.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7165823, - "inode": 524121, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/855", - "xusr": false, - "atime": 1436810538.7165823, - "isdir": false, - "ctime": 1436810538.7165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8775823, - "inode": 526814, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3548", - "xusr": false, - "atime": 1436810540.8775823, - "isdir": false, - "ctime": 1436810540.8775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0495822, - "inode": 527053, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3787", - "xusr": false, - "atime": 1436810541.0495822, - "isdir": false, - "ctime": 1436810541.0495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7875824, - "inode": 526688, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3422", - "xusr": false, - "atime": 1436810540.7875824, - "isdir": false, - "ctime": 1436810540.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4995823, - "inode": 527628, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4362", - "xusr": false, - "atime": 1436810541.4995823, - "isdir": false, - "ctime": 1436810541.4995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6165824, - "inode": 525246, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1980", - "xusr": false, - "atime": 1436810539.6165824, - "isdir": false, - "ctime": 1436810539.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7005823, - "inode": 526566, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3300", - "xusr": false, - "atime": 1436810540.7005823, - "isdir": false, - "ctime": 1436810540.7005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0335822, - "inode": 524547, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1281", - "xusr": false, - "atime": 1436810539.0335822, - "isdir": false, - "ctime": 1436810539.0335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6955824, - "inode": 526558, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3292", - "xusr": false, - "atime": 1436810540.6955824, - "isdir": false, - "ctime": 1436810540.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9635823, - "inode": 524449, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1183", - "xusr": false, - "atime": 1436810538.9635823, - "isdir": false, - "ctime": 1436810538.9635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6945822, - "inode": 524093, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/827", - "xusr": false, - "atime": 1436810538.6945822, - "isdir": false, - "ctime": 1436810538.6945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1555824, - "inode": 525894, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2628", - "xusr": false, - "atime": 1436810540.1555824, - "isdir": false, - "ctime": 1436810540.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9385824, - "inode": 528233, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4967", - "xusr": false, - "atime": 1436810541.9385824, - "isdir": false, - "ctime": 1436810541.9385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7455823, - "inode": 525383, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2117", - "xusr": false, - "atime": 1436810539.7455823, - "isdir": false, - "ctime": 1436810539.7455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7775824, - "inode": 524198, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/932", - "xusr": false, - "atime": 1436810538.7775824, - "isdir": false, - "ctime": 1436810538.7775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5335822, - "inode": 523873, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/607", - "xusr": false, - "atime": 1436810538.5335822, - "isdir": false, - "ctime": 1436810538.5335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5645823, - "inode": 527717, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4451", - "xusr": false, - "atime": 1436810541.5645823, - "isdir": false, - "ctime": 1436810541.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4445822, - "inode": 523750, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/484", - "xusr": false, - "atime": 1436810538.4445822, - "isdir": false, - "ctime": 1436810538.4445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4525824, - "inode": 527562, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4296", - "xusr": false, - "atime": 1436810541.4525824, - "isdir": false, - "ctime": 1436810541.4525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6655824, - "inode": 527856, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4590", - "xusr": false, - "atime": 1436810541.6655824, - "isdir": false, - "ctime": 1436810541.6655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1405823, - "inode": 524700, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1434", - "xusr": false, - "atime": 1436810539.1405823, - "isdir": false, - "ctime": 1436810539.1405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1905823, - "inode": 525930, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2664", - "xusr": false, - "atime": 1436810540.1905823, - "isdir": false, - "ctime": 1436810540.1905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3975823, - "inode": 526189, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2923", - "xusr": false, - "atime": 1436810540.3975823, - "isdir": false, - "ctime": 1436810540.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1525824, - "inode": 524718, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1452", - "xusr": false, - "atime": 1436810539.1525824, - "isdir": false, - "ctime": 1436810539.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3115823, - "inode": 526068, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2802", - "xusr": false, - "atime": 1436810540.3115823, - "isdir": false, - "ctime": 1436810540.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6095824, - "inode": 526439, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3173", - "xusr": false, - "atime": 1436810540.6095824, - "isdir": false, - "ctime": 1436810540.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9155824, - "inode": 524384, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1118", - "xusr": false, - "atime": 1436810538.9155824, - "isdir": false, - "ctime": 1436810538.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5985823, - "inode": 526423, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3157", - "xusr": false, - "atime": 1436810540.5985823, - "isdir": false, - "ctime": 1436810540.5985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1955824, - "inode": 523451, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/185", - "xusr": false, - "atime": 1436810538.1955824, - "isdir": false, - "ctime": 1436810538.1955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5875823, - "inode": 525212, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1946", - "xusr": false, - "atime": 1436810539.5875823, - "isdir": false, - "ctime": 1436810539.5875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1335824, - "inode": 527170, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3904", - "xusr": false, - "atime": 1436810541.1335824, - "isdir": false, - "ctime": 1436810541.1335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7695823, - "inode": 526662, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3396", - "xusr": false, - "atime": 1436810540.7695823, - "isdir": false, - "ctime": 1436810540.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3495822, - "inode": 527450, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4184", - "xusr": false, - "atime": 1436810541.3495822, - "isdir": false, - "ctime": 1436810541.3495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0415823, - "inode": 527041, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3775", - "xusr": false, - "atime": 1436810541.0415823, - "isdir": false, - "ctime": 1436810541.0415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8695824, - "inode": 524320, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1054", - "xusr": false, - "atime": 1436810538.8695824, - "isdir": false, - "ctime": 1436810538.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9405823, - "inode": 525646, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2380", - "xusr": false, - "atime": 1436810539.9405823, - "isdir": false, - "ctime": 1436810539.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4815824, - "inode": 523801, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/535", - "xusr": false, - "atime": 1436810538.4815824, - "isdir": false, - "ctime": 1436810538.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8775823, - "inode": 524331, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1065", - "xusr": false, - "atime": 1436810538.8775823, - "isdir": false, - "ctime": 1436810538.8775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1085823, - "inode": 523327, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/61", - "xusr": false, - "atime": 1436810538.1085823, - "isdir": false, - "ctime": 1436810538.1085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8175824, - "inode": 528066, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4800", - "xusr": false, - "atime": 1436810541.8175824, - "isdir": false, - "ctime": 1436810541.8175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2305822, - "inode": 523500, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/234", - "xusr": false, - "atime": 1436810538.2305822, - "isdir": false, - "ctime": 1436810538.2305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7065823, - "inode": 524109, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/843", - "xusr": false, - "atime": 1436810538.7065823, - "isdir": false, - "ctime": 1436810538.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2035823, - "inode": 525943, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2677", - "xusr": false, - "atime": 1436810540.2035823, - "isdir": false, - "ctime": 1436810540.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7855823, - "inode": 525435, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2169", - "xusr": false, - "atime": 1436810539.7855823, - "isdir": false, - "ctime": 1436810539.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2445824, - "inode": 524849, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1583", - "xusr": false, - "atime": 1436810539.2445824, - "isdir": false, - "ctime": 1436810539.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3275824, - "inode": 523624, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/358", - "xusr": false, - "atime": 1436810538.3275824, - "isdir": false, - "ctime": 1436810538.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1005824, - "inode": 525844, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2578", - "xusr": false, - "atime": 1436810540.1005824, - "isdir": false, - "ctime": 1436810540.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8795824, - "inode": 528151, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4885", - "xusr": false, - "atime": 1436810541.8795824, - "isdir": false, - "ctime": 1436810541.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6225822, - "inode": 525253, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1987", - "xusr": false, - "atime": 1436810539.6225822, - "isdir": false, - "ctime": 1436810539.6225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4355824, - "inode": 523737, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/471", - "xusr": false, - "atime": 1436810538.4355824, - "isdir": false, - "ctime": 1436810538.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5035822, - "inode": 523832, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/566", - "xusr": false, - "atime": 1436810538.5035822, - "isdir": false, - "ctime": 1436810538.5035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4825823, - "inode": 527605, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4339", - "xusr": false, - "atime": 1436810541.4825823, - "isdir": false, - "ctime": 1436810541.4825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4525824, - "inode": 526259, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2993", - "xusr": false, - "atime": 1436810540.4525824, - "isdir": false, - "ctime": 1436810540.4525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0645823, - "inode": 527074, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3808", - "xusr": false, - "atime": 1436810541.0645823, - "isdir": false, - "ctime": 1436810541.0645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0415823, - "inode": 524558, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1292", - "xusr": false, - "atime": 1436810539.0415823, - "isdir": false, - "ctime": 1436810539.0415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4805822, - "inode": 525102, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1836", - "xusr": false, - "atime": 1436810539.4805822, - "isdir": false, - "ctime": 1436810539.4805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7405822, - "inode": 524151, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/885", - "xusr": false, - "atime": 1436810538.7405822, - "isdir": false, - "ctime": 1436810538.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6325824, - "inode": 525267, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2001", - "xusr": false, - "atime": 1436810539.6325824, - "isdir": false, - "ctime": 1436810539.6325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5495822, - "inode": 527697, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4431", - "xusr": false, - "atime": 1436810541.5495822, - "isdir": false, - "ctime": 1436810541.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4155824, - "inode": 527513, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4247", - "xusr": false, - "atime": 1436810541.4155824, - "isdir": false, - "ctime": 1436810541.4155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2815824, - "inode": 523573, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/307", - "xusr": false, - "atime": 1436810538.2815824, - "isdir": false, - "ctime": 1436810538.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8075824, - "inode": 528053, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4787", - "xusr": false, - "atime": 1436810541.8075824, - "isdir": false, - "ctime": 1436810541.8075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6705823, - "inode": 524060, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/794", - "xusr": false, - "atime": 1436810538.6705823, - "isdir": false, - "ctime": 1436810538.6705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6775823, - "inode": 527873, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4607", - "xusr": false, - "atime": 1436810541.6775823, - "isdir": false, - "ctime": 1436810541.6775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7495823, - "inode": 526635, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3369", - "xusr": false, - "atime": 1436810540.7495823, - "isdir": false, - "ctime": 1436810540.7495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1775823, - "inode": 523424, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/158", - "xusr": false, - "atime": 1436810538.1775823, - "isdir": false, - "ctime": 1436810538.1775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4765823, - "inode": 523795, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/529", - "xusr": false, - "atime": 1436810538.4765823, - "isdir": false, - "ctime": 1436810538.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9955823, - "inode": 524493, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1227", - "xusr": false, - "atime": 1436810538.9955823, - "isdir": false, - "ctime": 1436810538.9955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2735822, - "inode": 526023, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2757", - "xusr": false, - "atime": 1436810540.2735822, - "isdir": false, - "ctime": 1436810540.2735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0365822, - "inode": 527034, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3768", - "xusr": false, - "atime": 1436810541.0365822, - "isdir": false, - "ctime": 1436810541.0365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6635823, - "inode": 526513, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3247", - "xusr": false, - "atime": 1436810540.6635823, - "isdir": false, - "ctime": 1436810540.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9775822, - "inode": 525697, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2431", - "xusr": false, - "atime": 1436810539.9775822, - "isdir": false, - "ctime": 1436810539.9775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3245823, - "inode": 526086, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2820", - "xusr": false, - "atime": 1436810540.3245823, - "isdir": false, - "ctime": 1436810540.3245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4015822, - "inode": 527495, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4229", - "xusr": false, - "atime": 1436810541.4015822, - "isdir": false, - "ctime": 1436810541.4015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9525824, - "inode": 526919, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3653", - "xusr": false, - "atime": 1436810540.9525824, - "isdir": false, - "ctime": 1436810540.9525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7415824, - "inode": 525380, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2114", - "xusr": false, - "atime": 1436810539.7415824, - "isdir": false, - "ctime": 1436810539.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2265823, - "inode": 523495, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/229", - "xusr": false, - "atime": 1436810538.2265823, - "isdir": false, - "ctime": 1436810538.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7215824, - "inode": 527934, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4668", - "xusr": false, - "atime": 1436810541.7215824, - "isdir": false, - "ctime": 1436810541.7215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8695824, - "inode": 528136, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4870", - "xusr": false, - "atime": 1436810541.8695824, - "isdir": false, - "ctime": 1436810541.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6745822, - "inode": 526529, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3263", - "xusr": false, - "atime": 1436810540.6745822, - "isdir": false, - "ctime": 1436810540.6745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0585823, - "inode": 524582, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1316", - "xusr": false, - "atime": 1436810539.0585823, - "isdir": false, - "ctime": 1436810539.0585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5165823, - "inode": 523850, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/584", - "xusr": false, - "atime": 1436810538.5165823, - "isdir": false, - "ctime": 1436810538.5165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5425823, - "inode": 526345, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3079", - "xusr": false, - "atime": 1436810540.5425823, - "isdir": false, - "ctime": 1436810540.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3875823, - "inode": 526174, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2908", - "xusr": false, - "atime": 1436810540.3875823, - "isdir": false, - "ctime": 1436810540.3875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0745823, - "inode": 525819, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2553", - "xusr": false, - "atime": 1436810540.0745823, - "isdir": false, - "ctime": 1436810540.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4515824, - "inode": 526257, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2991", - "xusr": false, - "atime": 1436810540.4515824, - "isdir": false, - "ctime": 1436810540.4515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0735824, - "inode": 523281, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/15", - "xusr": false, - "atime": 1436810538.0735824, - "isdir": false, - "ctime": 1436810538.0735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1365824, - "inode": 524694, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1428", - "xusr": false, - "atime": 1436810539.1365824, - "isdir": false, - "ctime": 1436810539.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7685823, - "inode": 524187, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/921", - "xusr": false, - "atime": 1436810538.7685823, - "isdir": false, - "ctime": 1436810538.7685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8735824, - "inode": 524326, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1060", - "xusr": false, - "atime": 1436810538.8735824, - "isdir": false, - "ctime": 1436810538.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0795822, - "inode": 527095, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3829", - "xusr": false, - "atime": 1436810541.0795822, - "isdir": false, - "ctime": 1436810541.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8425822, - "inode": 526764, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3498", - "xusr": false, - "atime": 1436810540.8425822, - "isdir": false, - "ctime": 1436810540.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5115824, - "inode": 526308, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3042", - "xusr": false, - "atime": 1436810540.5115824, - "isdir": false, - "ctime": 1436810540.5115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6015823, - "inode": 526427, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3161", - "xusr": false, - "atime": 1436810540.6015823, - "isdir": false, - "ctime": 1436810540.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3465824, - "inode": 523645, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/379", - "xusr": false, - "atime": 1436810538.3465824, - "isdir": false, - "ctime": 1436810538.3465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6745822, - "inode": 527869, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4603", - "xusr": false, - "atime": 1436810541.6745822, - "isdir": false, - "ctime": 1436810541.6745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7925823, - "inode": 526694, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3428", - "xusr": false, - "atime": 1436810540.7925823, - "isdir": false, - "ctime": 1436810540.7925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5395823, - "inode": 527683, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4417", - "xusr": false, - "atime": 1436810541.5395823, - "isdir": false, - "ctime": 1436810541.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5715823, - "inode": 526385, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3119", - "xusr": false, - "atime": 1436810540.5715823, - "isdir": false, - "ctime": 1436810540.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1665823, - "inode": 525905, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2639", - "xusr": false, - "atime": 1436810540.1665823, - "isdir": false, - "ctime": 1436810540.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1755824, - "inode": 524750, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1484", - "xusr": false, - "atime": 1436810539.1755824, - "isdir": false, - "ctime": 1436810539.1755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0645823, - "inode": 527073, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3807", - "xusr": false, - "atime": 1436810541.0645823, - "isdir": false, - "ctime": 1436810541.0645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1535823, - "inode": 527197, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3931", - "xusr": false, - "atime": 1436810541.1535823, - "isdir": false, - "ctime": 1436810541.1535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8945823, - "inode": 524354, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1088", - "xusr": false, - "atime": 1436810538.8945823, - "isdir": false, - "ctime": 1436810538.8945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8745823, - "inode": 526810, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3544", - "xusr": false, - "atime": 1436810540.8745823, - "isdir": false, - "ctime": 1436810540.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5265822, - "inode": 523863, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/597", - "xusr": false, - "atime": 1436810538.5265822, - "isdir": false, - "ctime": 1436810538.5265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6935823, - "inode": 525327, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2061", - "xusr": false, - "atime": 1436810539.6935823, - "isdir": false, - "ctime": 1436810539.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8885822, - "inode": 526829, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3563", - "xusr": false, - "atime": 1436810540.8885822, - "isdir": false, - "ctime": 1436810540.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6865823, - "inode": 524082, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/816", - "xusr": false, - "atime": 1436810538.6865823, - "isdir": false, - "ctime": 1436810538.6865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1685822, - "inode": 525907, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2641", - "xusr": false, - "atime": 1436810540.1685822, - "isdir": false, - "ctime": 1436810540.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7655823, - "inode": 525407, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2141", - "xusr": false, - "atime": 1436810539.7655823, - "isdir": false, - "ctime": 1436810539.7655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6725824, - "inode": 526526, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3260", - "xusr": false, - "atime": 1436810540.6725824, - "isdir": false, - "ctime": 1436810540.6725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4025824, - "inode": 526196, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2930", - "xusr": false, - "atime": 1436810540.4025824, - "isdir": false, - "ctime": 1436810540.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7605822, - "inode": 526650, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3384", - "xusr": false, - "atime": 1436810540.7605822, - "isdir": false, - "ctime": 1436810540.7605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7905824, - "inode": 526692, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3426", - "xusr": false, - "atime": 1436810540.7905824, - "isdir": false, - "ctime": 1436810540.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0325823, - "inode": 525772, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2506", - "xusr": false, - "atime": 1436810540.0325823, - "isdir": false, - "ctime": 1436810540.0325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5235822, - "inode": 527661, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4395", - "xusr": false, - "atime": 1436810541.5235822, - "isdir": false, - "ctime": 1436810541.5235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2705822, - "inode": 527357, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4091", - "xusr": false, - "atime": 1436810541.2705822, - "isdir": false, - "ctime": 1436810541.2705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0995822, - "inode": 527122, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3856", - "xusr": false, - "atime": 1436810541.0995822, - "isdir": false, - "ctime": 1436810541.0995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7835822, - "inode": 526682, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3416", - "xusr": false, - "atime": 1436810540.7835822, - "isdir": false, - "ctime": 1436810540.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5945823, - "inode": 523956, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/690", - "xusr": false, - "atime": 1436810538.5945823, - "isdir": false, - "ctime": 1436810538.5945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9415822, - "inode": 528237, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4971", - "xusr": false, - "atime": 1436810541.9415822, - "isdir": false, - "ctime": 1436810541.9415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0855823, - "inode": 523298, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/32", - "xusr": false, - "atime": 1436810538.0855823, - "isdir": false, - "ctime": 1436810538.0855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4045823, - "inode": 525029, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1763", - "xusr": false, - "atime": 1436810539.4045823, - "isdir": false, - "ctime": 1436810539.4045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0015824, - "inode": 525730, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2464", - "xusr": false, - "atime": 1436810540.0015824, - "isdir": false, - "ctime": 1436810540.0015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3165822, - "inode": 523615, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/349", - "xusr": false, - "atime": 1436810538.3165822, - "isdir": false, - "ctime": 1436810538.3165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1245823, - "inode": 524677, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1411", - "xusr": false, - "atime": 1436810539.1245823, - "isdir": false, - "ctime": 1436810539.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3425822, - "inode": 524972, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1706", - "xusr": false, - "atime": 1436810539.3425822, - "isdir": false, - "ctime": 1436810539.3425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7045822, - "inode": 526571, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3305", - "xusr": false, - "atime": 1436810540.7045822, - "isdir": false, - "ctime": 1436810540.7045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6425824, - "inode": 527825, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4559", - "xusr": false, - "atime": 1436810541.6425824, - "isdir": false, - "ctime": 1436810541.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6835823, - "inode": 524078, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/812", - "xusr": false, - "atime": 1436810538.6835823, - "isdir": false, - "ctime": 1436810538.6835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2955823, - "inode": 523592, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/326", - "xusr": false, - "atime": 1436810538.2955823, - "isdir": false, - "ctime": 1436810538.2955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5175824, - "inode": 523851, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/585", - "xusr": false, - "atime": 1436810538.5175824, - "isdir": false, - "ctime": 1436810538.5175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3315823, - "inode": 523629, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/363", - "xusr": false, - "atime": 1436810538.3315823, - "isdir": false, - "ctime": 1436810538.3315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3425822, - "inode": 527440, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4174", - "xusr": false, - "atime": 1436810541.3425822, - "isdir": false, - "ctime": 1436810541.3425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3715823, - "inode": 526152, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2886", - "xusr": false, - "atime": 1436810540.3715823, - "isdir": false, - "ctime": 1436810540.3715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2545824, - "inode": 524864, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1598", - "xusr": false, - "atime": 1436810539.2545824, - "isdir": false, - "ctime": 1436810539.2545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0265822, - "inode": 525763, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2497", - "xusr": false, - "atime": 1436810540.0265822, - "isdir": false, - "ctime": 1436810540.0265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2205822, - "inode": 525963, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2697", - "xusr": false, - "atime": 1436810540.2205822, - "isdir": false, - "ctime": 1436810540.2205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2265823, - "inode": 525972, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2706", - "xusr": false, - "atime": 1436810540.2265823, - "isdir": false, - "ctime": 1436810540.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5045824, - "inode": 527635, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4369", - "xusr": false, - "atime": 1436810541.5045824, - "isdir": false, - "ctime": 1436810541.5045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6075823, - "inode": 523975, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/709", - "xusr": false, - "atime": 1436810538.6075823, - "isdir": false, - "ctime": 1436810538.6075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0385823, - "inode": 527037, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3771", - "xusr": false, - "atime": 1436810541.0385823, - "isdir": false, - "ctime": 1436810541.0385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5985823, - "inode": 527765, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4499", - "xusr": false, - "atime": 1436810541.5985823, - "isdir": false, - "ctime": 1436810541.5985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7805824, - "inode": 524201, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/935", - "xusr": false, - "atime": 1436810538.7805824, - "isdir": false, - "ctime": 1436810538.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7275822, - "inode": 526604, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3338", - "xusr": false, - "atime": 1436810540.7275822, - "isdir": false, - "ctime": 1436810540.7275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4515824, - "inode": 526258, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2992", - "xusr": false, - "atime": 1436810540.4515824, - "isdir": false, - "ctime": 1436810540.4515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8915823, - "inode": 528168, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4902", - "xusr": false, - "atime": 1436810541.8915823, - "isdir": false, - "ctime": 1436810541.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1775823, - "inode": 525916, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2650", - "xusr": false, - "atime": 1436810540.1775823, - "isdir": false, - "ctime": 1436810540.1775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6685822, - "inode": 524057, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/791", - "xusr": false, - "atime": 1436810538.6685822, - "isdir": false, - "ctime": 1436810538.6685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5875823, - "inode": 527750, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4484", - "xusr": false, - "atime": 1436810541.5875823, - "isdir": false, - "ctime": 1436810541.5875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2565823, - "inode": 523537, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/271", - "xusr": false, - "atime": 1436810538.2565823, - "isdir": false, - "ctime": 1436810538.2565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1555824, - "inode": 523393, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/127", - "xusr": false, - "atime": 1436810538.1555824, - "isdir": false, - "ctime": 1436810538.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5825822, - "inode": 523940, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/674", - "xusr": false, - "atime": 1436810538.5825822, - "isdir": false, - "ctime": 1436810538.5825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8065822, - "inode": 525459, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2193", - "xusr": false, - "atime": 1436810539.8065822, - "isdir": false, - "ctime": 1436810539.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8525822, - "inode": 528113, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4847", - "xusr": false, - "atime": 1436810541.8525822, - "isdir": false, - "ctime": 1436810541.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7045822, - "inode": 527911, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4645", - "xusr": false, - "atime": 1436810541.7045822, - "isdir": false, - "ctime": 1436810541.7045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3545823, - "inode": 526128, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2862", - "xusr": false, - "atime": 1436810540.3545823, - "isdir": false, - "ctime": 1436810540.3545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3395822, - "inode": 524971, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1705", - "xusr": false, - "atime": 1436810539.3395822, - "isdir": false, - "ctime": 1436810539.3395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9175823, - "inode": 526871, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3605", - "xusr": false, - "atime": 1436810540.9175823, - "isdir": false, - "ctime": 1436810540.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5105822, - "inode": 527643, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4377", - "xusr": false, - "atime": 1436810541.5105822, - "isdir": false, - "ctime": 1436810541.5105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7345824, - "inode": 524143, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/877", - "xusr": false, - "atime": 1436810538.7345824, - "isdir": false, - "ctime": 1436810538.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8185823, - "inode": 524251, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/985", - "xusr": false, - "atime": 1436810538.8185823, - "isdir": false, - "ctime": 1436810538.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5685823, - "inode": 523920, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/654", - "xusr": false, - "atime": 1436810538.5685823, - "isdir": false, - "ctime": 1436810538.5685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7105823, - "inode": 527919, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4653", - "xusr": false, - "atime": 1436810541.7105823, - "isdir": false, - "ctime": 1436810541.7105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9625823, - "inode": 526933, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3667", - "xusr": false, - "atime": 1436810540.9625823, - "isdir": false, - "ctime": 1436810540.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2615824, - "inode": 524874, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1608", - "xusr": false, - "atime": 1436810539.2615824, - "isdir": false, - "ctime": 1436810539.2615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7555823, - "inode": 524171, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/905", - "xusr": false, - "atime": 1436810538.7555823, - "isdir": false, - "ctime": 1436810538.7555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1555824, - "inode": 527200, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3934", - "xusr": false, - "atime": 1436810541.1555824, - "isdir": false, - "ctime": 1436810541.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2285824, - "inode": 524826, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1560", - "xusr": false, - "atime": 1436810539.2285824, - "isdir": false, - "ctime": 1436810539.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7595823, - "inode": 526649, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3383", - "xusr": false, - "atime": 1436810540.7595823, - "isdir": false, - "ctime": 1436810540.7595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8655822, - "inode": 524315, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1049", - "xusr": false, - "atime": 1436810538.8655822, - "isdir": false, - "ctime": 1436810538.8655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7155824, - "inode": 524120, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/854", - "xusr": false, - "atime": 1436810538.7155824, - "isdir": false, - "ctime": 1436810538.7155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3885822, - "inode": 525015, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1749", - "xusr": false, - "atime": 1436810539.3885822, - "isdir": false, - "ctime": 1436810539.3885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2605822, - "inode": 524872, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1606", - "xusr": false, - "atime": 1436810539.2605822, - "isdir": false, - "ctime": 1436810539.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2615824, - "inode": 526009, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2743", - "xusr": false, - "atime": 1436810540.2615824, - "isdir": false, - "ctime": 1436810540.2615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0465822, - "inode": 524565, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1299", - "xusr": false, - "atime": 1436810539.0465822, - "isdir": false, - "ctime": 1436810539.0465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6555824, - "inode": 525292, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2026", - "xusr": false, - "atime": 1436810539.6555824, - "isdir": false, - "ctime": 1436810539.6555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7805824, - "inode": 525428, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2162", - "xusr": false, - "atime": 1436810539.7805824, - "isdir": false, - "ctime": 1436810539.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4645822, - "inode": 525081, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1815", - "xusr": false, - "atime": 1436810539.4645822, - "isdir": false, - "ctime": 1436810539.4645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4795823, - "inode": 523798, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/532", - "xusr": false, - "atime": 1436810538.4795823, - "isdir": false, - "ctime": 1436810538.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2135823, - "inode": 525956, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2690", - "xusr": false, - "atime": 1436810540.2135823, - "isdir": false, - "ctime": 1436810540.2135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4205823, - "inode": 525049, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1783", - "xusr": false, - "atime": 1436810539.4205823, - "isdir": false, - "ctime": 1436810539.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8015823, - "inode": 528045, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4779", - "xusr": false, - "atime": 1436810541.8015823, - "isdir": false, - "ctime": 1436810541.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0835824, - "inode": 524618, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1352", - "xusr": false, - "atime": 1436810539.0835824, - "isdir": false, - "ctime": 1436810539.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6505823, - "inode": 524033, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/767", - "xusr": false, - "atime": 1436810538.6505823, - "isdir": false, - "ctime": 1436810538.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7665823, - "inode": 527995, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4729", - "xusr": false, - "atime": 1436810541.7665823, - "isdir": false, - "ctime": 1436810541.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7465823, - "inode": 525384, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2118", - "xusr": false, - "atime": 1436810539.7465823, - "isdir": false, - "ctime": 1436810539.7465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6985824, - "inode": 527902, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4636", - "xusr": false, - "atime": 1436810541.6985824, - "isdir": false, - "ctime": 1436810541.6985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0765822, - "inode": 527090, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3824", - "xusr": false, - "atime": 1436810541.0765822, - "isdir": false, - "ctime": 1436810541.0765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1505823, - "inode": 525889, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2623", - "xusr": false, - "atime": 1436810540.1505823, - "isdir": false, - "ctime": 1436810540.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8995824, - "inode": 524361, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1095", - "xusr": false, - "atime": 1436810538.8995824, - "isdir": false, - "ctime": 1436810538.8995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0565822, - "inode": 525800, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2534", - "xusr": false, - "atime": 1436810540.0565822, - "isdir": false, - "ctime": 1436810540.0565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1525824, - "inode": 527196, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3930", - "xusr": false, - "atime": 1436810541.1525824, - "isdir": false, - "ctime": 1436810541.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5075824, - "inode": 526304, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3038", - "xusr": false, - "atime": 1436810540.5075824, - "isdir": false, - "ctime": 1436810540.5075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8915823, - "inode": 524350, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1084", - "xusr": false, - "atime": 1436810538.8915823, - "isdir": false, - "ctime": 1436810538.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3755822, - "inode": 523667, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/401", - "xusr": false, - "atime": 1436810538.3755822, - "isdir": false, - "ctime": 1436810538.3755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5095823, - "inode": 525130, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1864", - "xusr": false, - "atime": 1436810539.5095823, - "isdir": false, - "ctime": 1436810539.5095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3345823, - "inode": 523633, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/367", - "xusr": false, - "atime": 1436810538.3345823, - "isdir": false, - "ctime": 1436810538.3345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9645822, - "inode": 524450, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1184", - "xusr": false, - "atime": 1436810538.9645822, - "isdir": false, - "ctime": 1436810538.9645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6825824, - "inode": 526541, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3275", - "xusr": false, - "atime": 1436810540.6825824, - "isdir": false, - "ctime": 1436810540.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5445824, - "inode": 527690, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4424", - "xusr": false, - "atime": 1436810541.5445824, - "isdir": false, - "ctime": 1436810541.5445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8765824, - "inode": 528146, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4880", - "xusr": false, - "atime": 1436810541.8765824, - "isdir": false, - "ctime": 1436810541.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7335823, - "inode": 526612, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3346", - "xusr": false, - "atime": 1436810540.7335823, - "isdir": false, - "ctime": 1436810540.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6815822, - "inode": 524075, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/809", - "xusr": false, - "atime": 1436810538.6815822, - "isdir": false, - "ctime": 1436810538.6815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4205823, - "inode": 523724, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/458", - "xusr": false, - "atime": 1436810538.4205823, - "isdir": false, - "ctime": 1436810538.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5625823, - "inode": 523913, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/647", - "xusr": false, - "atime": 1436810538.5625823, - "isdir": false, - "ctime": 1436810538.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3045824, - "inode": 527403, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4137", - "xusr": false, - "atime": 1436810541.3045824, - "isdir": false, - "ctime": 1436810541.3045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2635822, - "inode": 524877, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1611", - "xusr": false, - "atime": 1436810539.2635822, - "isdir": false, - "ctime": 1436810539.2635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3835824, - "inode": 527477, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4211", - "xusr": false, - "atime": 1436810541.3835824, - "isdir": false, - "ctime": 1436810541.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4965823, - "inode": 525117, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1851", - "xusr": false, - "atime": 1436810539.4965823, - "isdir": false, - "ctime": 1436810539.4965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2035823, - "inode": 523463, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/197", - "xusr": false, - "atime": 1436810538.2035823, - "isdir": false, - "ctime": 1436810538.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3585823, - "inode": 526133, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2867", - "xusr": false, - "atime": 1436810540.3585823, - "isdir": false, - "ctime": 1436810540.3585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1285822, - "inode": 523354, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/88", - "xusr": false, - "atime": 1436810538.1285822, - "isdir": false, - "ctime": 1436810538.1285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3285823, - "inode": 527426, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4160", - "xusr": false, - "atime": 1436810541.3285823, - "isdir": false, - "ctime": 1436810541.3285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1345823, - "inode": 523363, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/97", - "xusr": false, - "atime": 1436810538.1345823, - "isdir": false, - "ctime": 1436810538.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0265822, - "inode": 525764, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2498", - "xusr": false, - "atime": 1436810540.0265822, - "isdir": false, - "ctime": 1436810540.0265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2545824, - "inode": 526003, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2737", - "xusr": false, - "atime": 1436810540.2545824, - "isdir": false, - "ctime": 1436810540.2545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5475824, - "inode": 527694, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4428", - "xusr": false, - "atime": 1436810541.5475824, - "isdir": false, - "ctime": 1436810541.5475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0835824, - "inode": 527101, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3835", - "xusr": false, - "atime": 1436810541.0835824, - "isdir": false, - "ctime": 1436810541.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4035823, - "inode": 525028, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1762", - "xusr": false, - "atime": 1436810539.4035823, - "isdir": false, - "ctime": 1436810539.4035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8155823, - "inode": 526728, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3462", - "xusr": false, - "atime": 1436810540.8155823, - "isdir": false, - "ctime": 1436810540.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1505823, - "inode": 527193, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3927", - "xusr": false, - "atime": 1436810541.1505823, - "isdir": false, - "ctime": 1436810541.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2895823, - "inode": 524914, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1648", - "xusr": false, - "atime": 1436810539.2895823, - "isdir": false, - "ctime": 1436810539.2895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6625824, - "inode": 524049, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/783", - "xusr": false, - "atime": 1436810538.6625824, - "isdir": false, - "ctime": 1436810538.6625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3295822, - "inode": 524958, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1692", - "xusr": false, - "atime": 1436810539.3295822, - "isdir": false, - "ctime": 1436810539.3295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8755822, - "inode": 528145, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4879", - "xusr": false, - "atime": 1436810541.8755822, - "isdir": false, - "ctime": 1436810541.8755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1205823, - "inode": 523343, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/77", - "xusr": false, - "atime": 1436810538.1205823, - "isdir": false, - "ctime": 1436810538.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0865824, - "inode": 527104, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3838", - "xusr": false, - "atime": 1436810541.0865824, - "isdir": false, - "ctime": 1436810541.0865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8985822, - "inode": 526844, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3578", - "xusr": false, - "atime": 1436810540.8985822, - "isdir": false, - "ctime": 1436810540.8985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4115822, - "inode": 523712, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/446", - "xusr": false, - "atime": 1436810538.4115822, - "isdir": false, - "ctime": 1436810538.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6125822, - "inode": 523981, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/715", - "xusr": false, - "atime": 1436810538.6125822, - "isdir": false, - "ctime": 1436810538.6125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7865822, - "inode": 524209, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/943", - "xusr": false, - "atime": 1436810538.7865822, - "isdir": false, - "ctime": 1436810538.7865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7085824, - "inode": 527917, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4651", - "xusr": false, - "atime": 1436810541.7085824, - "isdir": false, - "ctime": 1436810541.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0485823, - "inode": 527052, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3786", - "xusr": false, - "atime": 1436810541.0485823, - "isdir": false, - "ctime": 1436810541.0485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9955823, - "inode": 525722, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2456", - "xusr": false, - "atime": 1436810539.9955823, - "isdir": false, - "ctime": 1436810539.9955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3835824, - "inode": 525009, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1743", - "xusr": false, - "atime": 1436810539.3835824, - "isdir": false, - "ctime": 1436810539.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3475823, - "inode": 527447, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4181", - "xusr": false, - "atime": 1436810541.3475823, - "isdir": false, - "ctime": 1436810541.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8505824, - "inode": 526776, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3510", - "xusr": false, - "atime": 1436810540.8505824, - "isdir": false, - "ctime": 1436810540.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1475823, - "inode": 523382, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/116", - "xusr": false, - "atime": 1436810538.1475823, - "isdir": false, - "ctime": 1436810538.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5675824, - "inode": 525191, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1925", - "xusr": false, - "atime": 1436810539.5675824, - "isdir": false, - "ctime": 1436810539.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6355822, - "inode": 527816, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4550", - "xusr": false, - "atime": 1436810541.6355822, - "isdir": false, - "ctime": 1436810541.6355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0655823, - "inode": 524592, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1326", - "xusr": false, - "atime": 1436810539.0655823, - "isdir": false, - "ctime": 1436810539.0655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4305823, - "inode": 526235, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2969", - "xusr": false, - "atime": 1436810540.4305823, - "isdir": false, - "ctime": 1436810540.4305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3805823, - "inode": 526165, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2899", - "xusr": false, - "atime": 1436810540.3805823, - "isdir": false, - "ctime": 1436810540.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2455823, - "inode": 527322, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4056", - "xusr": false, - "atime": 1436810541.2455823, - "isdir": false, - "ctime": 1436810541.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8155823, - "inode": 525472, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2206", - "xusr": false, - "atime": 1436810539.8155823, - "isdir": false, - "ctime": 1436810539.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1025822, - "inode": 523320, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/54", - "xusr": false, - "atime": 1436810538.1025822, - "isdir": false, - "ctime": 1436810538.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7385824, - "inode": 524149, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/883", - "xusr": false, - "atime": 1436810538.7385824, - "isdir": false, - "ctime": 1436810538.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5575824, - "inode": 523905, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/639", - "xusr": false, - "atime": 1436810538.5575824, - "isdir": false, - "ctime": 1436810538.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4935822, - "inode": 523818, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/552", - "xusr": false, - "atime": 1436810538.4935822, - "isdir": false, - "ctime": 1436810538.4935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7325823, - "inode": 525368, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2102", - "xusr": false, - "atime": 1436810539.7325823, - "isdir": false, - "ctime": 1436810539.7325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1285822, - "inode": 527162, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3896", - "xusr": false, - "atime": 1436810541.1285822, - "isdir": false, - "ctime": 1436810541.1285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2955823, - "inode": 527392, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4126", - "xusr": false, - "atime": 1436810541.2955823, - "isdir": false, - "ctime": 1436810541.2955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0535824, - "inode": 524575, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1309", - "xusr": false, - "atime": 1436810539.0535824, - "isdir": false, - "ctime": 1436810539.0535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1205823, - "inode": 527152, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3886", - "xusr": false, - "atime": 1436810541.1205823, - "isdir": false, - "ctime": 1436810541.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3615823, - "inode": 526138, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2872", - "xusr": false, - "atime": 1436810540.3615823, - "isdir": false, - "ctime": 1436810540.3615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6255822, - "inode": 527803, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4537", - "xusr": false, - "atime": 1436810541.6255822, - "isdir": false, - "ctime": 1436810541.6255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6575823, - "inode": 526504, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3238", - "xusr": false, - "atime": 1436810540.6575823, - "isdir": false, - "ctime": 1436810540.6575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1805823, - "inode": 524757, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1491", - "xusr": false, - "atime": 1436810539.1805823, - "isdir": false, - "ctime": 1436810539.1805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6705823, - "inode": 526523, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3257", - "xusr": false, - "atime": 1436810540.6705823, - "isdir": false, - "ctime": 1436810540.6705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4605823, - "inode": 527573, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4307", - "xusr": false, - "atime": 1436810541.4605823, - "isdir": false, - "ctime": 1436810541.4605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2765822, - "inode": 527366, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4100", - "xusr": false, - "atime": 1436810541.2765822, - "isdir": false, - "ctime": 1436810541.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0455823, - "inode": 524564, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1298", - "xusr": false, - "atime": 1436810539.0455823, - "isdir": false, - "ctime": 1436810539.0455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8645823, - "inode": 524314, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1048", - "xusr": false, - "atime": 1436810538.8645823, - "isdir": false, - "ctime": 1436810538.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6535823, - "inode": 525290, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2024", - "xusr": false, - "atime": 1436810539.6535823, - "isdir": false, - "ctime": 1436810539.6535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0965824, - "inode": 525841, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2575", - "xusr": false, - "atime": 1436810540.0965824, - "isdir": false, - "ctime": 1436810540.0965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8755822, - "inode": 524328, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1062", - "xusr": false, - "atime": 1436810538.8755822, - "isdir": false, - "ctime": 1436810538.8755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2165823, - "inode": 523481, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/215", - "xusr": false, - "atime": 1436810538.2165823, - "isdir": false, - "ctime": 1436810538.2165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0955822, - "inode": 523311, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/45", - "xusr": false, - "atime": 1436810538.0955822, - "isdir": false, - "ctime": 1436810538.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9015822, - "inode": 528182, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4916", - "xusr": false, - "atime": 1436810541.9015822, - "isdir": false, - "ctime": 1436810541.9015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4645822, - "inode": 523778, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/512", - "xusr": false, - "atime": 1436810538.4645822, - "isdir": false, - "ctime": 1436810538.4645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0705824, - "inode": 523276, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/10", - "xusr": false, - "atime": 1436810538.0705824, - "isdir": false, - "ctime": 1436810538.0705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2825823, - "inode": 523574, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/308", - "xusr": false, - "atime": 1436810538.2825823, - "isdir": false, - "ctime": 1436810538.2825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4925823, - "inode": 527619, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4353", - "xusr": false, - "atime": 1436810541.4925823, - "isdir": false, - "ctime": 1436810541.4925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1165824, - "inode": 523338, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/72", - "xusr": false, - "atime": 1436810538.1165824, - "isdir": false, - "ctime": 1436810538.1165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0015824, - "inode": 524502, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1236", - "xusr": false, - "atime": 1436810539.0015824, - "isdir": false, - "ctime": 1436810539.0015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6205823, - "inode": 523991, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/725", - "xusr": false, - "atime": 1436810538.6205823, - "isdir": false, - "ctime": 1436810538.6205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4265823, - "inode": 527527, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4261", - "xusr": false, - "atime": 1436810541.4265823, - "isdir": false, - "ctime": 1436810541.4265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1445823, - "inode": 523377, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/111", - "xusr": false, - "atime": 1436810538.1445823, - "isdir": false, - "ctime": 1436810538.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8255823, - "inode": 528077, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4811", - "xusr": false, - "atime": 1436810541.8255823, - "isdir": false, - "ctime": 1436810541.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6085823, - "inode": 525234, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1968", - "xusr": false, - "atime": 1436810539.6085823, - "isdir": false, - "ctime": 1436810539.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0865824, - "inode": 523299, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/33", - "xusr": false, - "atime": 1436810538.0865824, - "isdir": false, - "ctime": 1436810538.0865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8945823, - "inode": 528172, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4906", - "xusr": false, - "atime": 1436810541.8945823, - "isdir": false, - "ctime": 1436810541.8945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2655823, - "inode": 527350, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4084", - "xusr": false, - "atime": 1436810541.2655823, - "isdir": false, - "ctime": 1436810541.2655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3395822, - "inode": 527436, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4170", - "xusr": false, - "atime": 1436810541.3395822, - "isdir": false, - "ctime": 1436810541.3395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4325824, - "inode": 527535, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4269", - "xusr": false, - "atime": 1436810541.4325824, - "isdir": false, - "ctime": 1436810541.4325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5105822, - "inode": 526307, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3041", - "xusr": false, - "atime": 1436810540.5105822, - "isdir": false, - "ctime": 1436810540.5105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2355824, - "inode": 527307, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4041", - "xusr": false, - "atime": 1436810541.2355824, - "isdir": false, - "ctime": 1436810541.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6035824, - "inode": 527772, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4506", - "xusr": false, - "atime": 1436810541.6035824, - "isdir": false, - "ctime": 1436810541.6035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2455823, - "inode": 527321, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4055", - "xusr": false, - "atime": 1436810541.2455823, - "isdir": false, - "ctime": 1436810541.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1895823, - "inode": 523442, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/176", - "xusr": false, - "atime": 1436810538.1895823, - "isdir": false, - "ctime": 1436810538.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5655823, - "inode": 523917, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/651", - "xusr": false, - "atime": 1436810538.5655823, - "isdir": false, - "ctime": 1436810538.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0145824, - "inode": 527005, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3739", - "xusr": false, - "atime": 1436810541.0145824, - "isdir": false, - "ctime": 1436810541.0145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3785822, - "inode": 527470, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4204", - "xusr": false, - "atime": 1436810541.3785822, - "isdir": false, - "ctime": 1436810541.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8445823, - "inode": 526767, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3501", - "xusr": false, - "atime": 1436810540.8445823, - "isdir": false, - "ctime": 1436810540.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0245824, - "inode": 524534, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1268", - "xusr": false, - "atime": 1436810539.0245824, - "isdir": false, - "ctime": 1436810539.0245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3765824, - "inode": 527467, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4201", - "xusr": false, - "atime": 1436810541.3765824, - "isdir": false, - "ctime": 1436810541.3765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3155823, - "inode": 523614, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/348", - "xusr": false, - "atime": 1436810538.3155823, - "isdir": false, - "ctime": 1436810538.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3575823, - "inode": 526132, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2866", - "xusr": false, - "atime": 1436810540.3575823, - "isdir": false, - "ctime": 1436810540.3575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3115823, - "inode": 524942, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1676", - "xusr": false, - "atime": 1436810539.3115823, - "isdir": false, - "ctime": 1436810539.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4175823, - "inode": 525046, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1780", - "xusr": false, - "atime": 1436810539.4175823, - "isdir": false, - "ctime": 1436810539.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7445824, - "inode": 527966, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4700", - "xusr": false, - "atime": 1436810541.7445824, - "isdir": false, - "ctime": 1436810541.7445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2535822, - "inode": 526002, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2736", - "xusr": false, - "atime": 1436810540.2535822, - "isdir": false, - "ctime": 1436810540.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2365823, - "inode": 523508, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/242", - "xusr": false, - "atime": 1436810538.2365823, - "isdir": false, - "ctime": 1436810538.2365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6035824, - "inode": 526430, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3164", - "xusr": false, - "atime": 1436810540.6035824, - "isdir": false, - "ctime": 1436810540.6035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1035824, - "inode": 524647, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1381", - "xusr": false, - "atime": 1436810539.1035824, - "isdir": false, - "ctime": 1436810539.1035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2425823, - "inode": 527318, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4052", - "xusr": false, - "atime": 1436810541.2425823, - "isdir": false, - "ctime": 1436810541.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7015824, - "inode": 524102, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/836", - "xusr": false, - "atime": 1436810538.7015824, - "isdir": false, - "ctime": 1436810538.7015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6665823, - "inode": 524055, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/789", - "xusr": false, - "atime": 1436810538.6665823, - "isdir": false, - "ctime": 1436810538.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1985824, - "inode": 525938, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2672", - "xusr": false, - "atime": 1436810540.1985824, - "isdir": false, - "ctime": 1436810540.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2865822, - "inode": 526036, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2770", - "xusr": false, - "atime": 1436810540.2865822, - "isdir": false, - "ctime": 1436810540.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3675823, - "inode": 524995, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1729", - "xusr": false, - "atime": 1436810539.3675823, - "isdir": false, - "ctime": 1436810539.3675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6285822, - "inode": 526465, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3199", - "xusr": false, - "atime": 1436810540.6285822, - "isdir": false, - "ctime": 1436810540.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9755824, - "inode": 526952, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3686", - "xusr": false, - "atime": 1436810540.9755824, - "isdir": false, - "ctime": 1436810540.9755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0645823, - "inode": 524591, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1325", - "xusr": false, - "atime": 1436810539.0645823, - "isdir": false, - "ctime": 1436810539.0645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5605824, - "inode": 527712, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4446", - "xusr": false, - "atime": 1436810541.5605824, - "isdir": false, - "ctime": 1436810541.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5065823, - "inode": 525127, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1861", - "xusr": false, - "atime": 1436810539.5065823, - "isdir": false, - "ctime": 1436810539.5065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2025824, - "inode": 525942, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2676", - "xusr": false, - "atime": 1436810540.2025824, - "isdir": false, - "ctime": 1436810540.2025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2075822, - "inode": 524797, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1531", - "xusr": false, - "atime": 1436810539.2075822, - "isdir": false, - "ctime": 1436810539.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2245822, - "inode": 523491, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/225", - "xusr": false, - "atime": 1436810538.2245822, - "isdir": false, - "ctime": 1436810538.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6075823, - "inode": 525233, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1967", - "xusr": false, - "atime": 1436810539.6075823, - "isdir": false, - "ctime": 1436810539.6075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1475823, - "inode": 523383, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/117", - "xusr": false, - "atime": 1436810538.1475823, - "isdir": false, - "ctime": 1436810538.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1785824, - "inode": 524754, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1488", - "xusr": false, - "atime": 1436810539.1785824, - "isdir": false, - "ctime": 1436810539.1785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6715822, - "inode": 524061, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/795", - "xusr": false, - "atime": 1436810538.6715822, - "isdir": false, - "ctime": 1436810538.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6445823, - "inode": 524024, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/758", - "xusr": false, - "atime": 1436810538.6445823, - "isdir": false, - "ctime": 1436810538.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9965823, - "inode": 526980, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3714", - "xusr": false, - "atime": 1436810540.9965823, - "isdir": false, - "ctime": 1436810540.9965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4445822, - "inode": 526249, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2983", - "xusr": false, - "atime": 1436810540.4445822, - "isdir": false, - "ctime": 1436810540.4445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3975823, - "inode": 527490, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4224", - "xusr": false, - "atime": 1436810541.3975823, - "isdir": false, - "ctime": 1436810541.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5995822, - "inode": 525223, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1957", - "xusr": false, - "atime": 1436810539.5995822, - "isdir": false, - "ctime": 1436810539.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6035824, - "inode": 523969, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/703", - "xusr": false, - "atime": 1436810538.6035824, - "isdir": false, - "ctime": 1436810538.6035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1135824, - "inode": 523334, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/68", - "xusr": false, - "atime": 1436810538.1135824, - "isdir": false, - "ctime": 1436810538.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2515824, - "inode": 527329, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4063", - "xusr": false, - "atime": 1436810541.2515824, - "isdir": false, - "ctime": 1436810541.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5745823, - "inode": 527732, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4466", - "xusr": false, - "atime": 1436810541.5745823, - "isdir": false, - "ctime": 1436810541.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5755823, - "inode": 523930, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/664", - "xusr": false, - "atime": 1436810538.5755823, - "isdir": false, - "ctime": 1436810538.5755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5835824, - "inode": 523941, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/675", - "xusr": false, - "atime": 1436810538.5835824, - "isdir": false, - "ctime": 1436810538.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6055822, - "inode": 525231, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1965", - "xusr": false, - "atime": 1436810539.6055822, - "isdir": false, - "ctime": 1436810539.6055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2075822, - "inode": 523468, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/202", - "xusr": false, - "atime": 1436810538.2075822, - "isdir": false, - "ctime": 1436810538.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7845824, - "inode": 526683, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3417", - "xusr": false, - "atime": 1436810540.7845824, - "isdir": false, - "ctime": 1436810540.7845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0495822, - "inode": 525794, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2528", - "xusr": false, - "atime": 1436810540.0495822, - "isdir": false, - "ctime": 1436810540.0495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4355824, - "inode": 523736, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/470", - "xusr": false, - "atime": 1436810538.4355824, - "isdir": false, - "ctime": 1436810538.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9355824, - "inode": 526896, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3630", - "xusr": false, - "atime": 1436810540.9355824, - "isdir": false, - "ctime": 1436810540.9355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9875822, - "inode": 525711, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2445", - "xusr": false, - "atime": 1436810539.9875822, - "isdir": false, - "ctime": 1436810539.9875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6555824, - "inode": 524040, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/774", - "xusr": false, - "atime": 1436810538.6555824, - "isdir": false, - "ctime": 1436810538.6555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6215823, - "inode": 526454, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3188", - "xusr": false, - "atime": 1436810540.6215823, - "isdir": false, - "ctime": 1436810540.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7205822, - "inode": 524125, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/859", - "xusr": false, - "atime": 1436810538.7205822, - "isdir": false, - "ctime": 1436810538.7205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7735822, - "inode": 526668, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3402", - "xusr": false, - "atime": 1436810540.7735822, - "isdir": false, - "ctime": 1436810540.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3815823, - "inode": 526166, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2900", - "xusr": false, - "atime": 1436810540.3815823, - "isdir": false, - "ctime": 1436810540.3815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5645823, - "inode": 523915, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/649", - "xusr": false, - "atime": 1436810538.5645823, - "isdir": false, - "ctime": 1436810538.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8535824, - "inode": 524298, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1032", - "xusr": false, - "atime": 1436810538.8535824, - "isdir": false, - "ctime": 1436810538.8535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6395824, - "inode": 524018, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/752", - "xusr": false, - "atime": 1436810538.6395824, - "isdir": false, - "ctime": 1436810538.6395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8225822, - "inode": 526736, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3470", - "xusr": false, - "atime": 1436810540.8225822, - "isdir": false, - "ctime": 1436810540.8225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5155823, - "inode": 526314, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3048", - "xusr": false, - "atime": 1436810540.5155823, - "isdir": false, - "ctime": 1436810540.5155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5015824, - "inode": 525122, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1856", - "xusr": false, - "atime": 1436810539.5015824, - "isdir": false, - "ctime": 1436810539.5015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7585824, - "inode": 525398, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2132", - "xusr": false, - "atime": 1436810539.7585824, - "isdir": false, - "ctime": 1436810539.7585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1105824, - "inode": 523330, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/64", - "xusr": false, - "atime": 1436810538.1105824, - "isdir": false, - "ctime": 1436810538.1105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2625823, - "inode": 527346, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4080", - "xusr": false, - "atime": 1436810541.2625823, - "isdir": false, - "ctime": 1436810541.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5205822, - "inode": 526320, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3054", - "xusr": false, - "atime": 1436810540.5205822, - "isdir": false, - "ctime": 1436810540.5205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3855822, - "inode": 526172, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2906", - "xusr": false, - "atime": 1436810540.3855822, - "isdir": false, - "ctime": 1436810540.3855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8365824, - "inode": 528092, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4826", - "xusr": false, - "atime": 1436810541.8365824, - "isdir": false, - "ctime": 1436810541.8365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1565824, - "inode": 524724, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1458", - "xusr": false, - "atime": 1436810539.1565824, - "isdir": false, - "ctime": 1436810539.1565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6515822, - "inode": 527837, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4571", - "xusr": false, - "atime": 1436810541.6515822, - "isdir": false, - "ctime": 1436810541.6515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4135823, - "inode": 527510, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4244", - "xusr": false, - "atime": 1436810541.4135823, - "isdir": false, - "ctime": 1436810541.4135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6105824, - "inode": 525237, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1971", - "xusr": false, - "atime": 1436810539.6105824, - "isdir": false, - "ctime": 1436810539.6105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8895824, - "inode": 524347, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1081", - "xusr": false, - "atime": 1436810538.8895824, - "isdir": false, - "ctime": 1436810538.8895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2695823, - "inode": 524885, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1619", - "xusr": false, - "atime": 1436810539.2695823, - "isdir": false, - "ctime": 1436810539.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8425822, - "inode": 526765, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3499", - "xusr": false, - "atime": 1436810540.8425822, - "isdir": false, - "ctime": 1436810540.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7115824, - "inode": 525347, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2081", - "xusr": false, - "atime": 1436810539.7115824, - "isdir": false, - "ctime": 1436810539.7115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7975824, - "inode": 526701, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3435", - "xusr": false, - "atime": 1436810540.7975824, - "isdir": false, - "ctime": 1436810540.7975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4565823, - "inode": 523767, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/501", - "xusr": false, - "atime": 1436810538.4565823, - "isdir": false, - "ctime": 1436810538.4565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0345824, - "inode": 525775, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2509", - "xusr": false, - "atime": 1436810540.0345824, - "isdir": false, - "ctime": 1436810540.0345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3555822, - "inode": 526130, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2864", - "xusr": false, - "atime": 1436810540.3555822, - "isdir": false, - "ctime": 1436810540.3555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6145823, - "inode": 527788, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4522", - "xusr": false, - "atime": 1436810541.6145823, - "isdir": false, - "ctime": 1436810541.6145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4035823, - "inode": 523701, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/435", - "xusr": false, - "atime": 1436810538.4035823, - "isdir": false, - "ctime": 1436810538.4035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7705822, - "inode": 528001, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4735", - "xusr": false, - "atime": 1436810541.7705822, - "isdir": false, - "ctime": 1436810541.7705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2065823, - "inode": 527267, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4001", - "xusr": false, - "atime": 1436810541.2065823, - "isdir": false, - "ctime": 1436810541.2065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4815824, - "inode": 523802, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/536", - "xusr": false, - "atime": 1436810538.4815824, - "isdir": false, - "ctime": 1436810538.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3495822, - "inode": 527449, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4183", - "xusr": false, - "atime": 1436810541.3495822, - "isdir": false, - "ctime": 1436810541.3495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1815822, - "inode": 523430, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/164", - "xusr": false, - "atime": 1436810538.1815822, - "isdir": false, - "ctime": 1436810538.1815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7255824, - "inode": 524132, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/866", - "xusr": false, - "atime": 1436810538.7255824, - "isdir": false, - "ctime": 1436810538.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5475824, - "inode": 526352, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3086", - "xusr": false, - "atime": 1436810540.5475824, - "isdir": false, - "ctime": 1436810540.5475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5885823, - "inode": 526409, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3143", - "xusr": false, - "atime": 1436810540.5885823, - "isdir": false, - "ctime": 1436810540.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0515823, - "inode": 524572, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1306", - "xusr": false, - "atime": 1436810539.0515823, - "isdir": false, - "ctime": 1436810539.0515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6605823, - "inode": 525298, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2032", - "xusr": false, - "atime": 1436810539.6605823, - "isdir": false, - "ctime": 1436810539.6605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3305824, - "inode": 526095, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2829", - "xusr": false, - "atime": 1436810540.3305824, - "isdir": false, - "ctime": 1436810540.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7435822, - "inode": 527964, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4698", - "xusr": false, - "atime": 1436810541.7435822, - "isdir": false, - "ctime": 1436810541.7435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2515824, - "inode": 524860, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1594", - "xusr": false, - "atime": 1436810539.2515824, - "isdir": false, - "ctime": 1436810539.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4515824, - "inode": 525070, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1804", - "xusr": false, - "atime": 1436810539.4515824, - "isdir": false, - "ctime": 1436810539.4515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9285824, - "inode": 528219, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4953", - "xusr": false, - "atime": 1436810541.9285824, - "isdir": false, - "ctime": 1436810541.9285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3515823, - "inode": 523651, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/385", - "xusr": false, - "atime": 1436810538.3515823, - "isdir": false, - "ctime": 1436810538.3515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2915823, - "inode": 527387, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4121", - "xusr": false, - "atime": 1436810541.2915823, - "isdir": false, - "ctime": 1436810541.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3365824, - "inode": 526103, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2837", - "xusr": false, - "atime": 1436810540.3365824, - "isdir": false, - "ctime": 1436810540.3365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9815824, - "inode": 524475, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1209", - "xusr": false, - "atime": 1436810538.9815824, - "isdir": false, - "ctime": 1436810538.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3425822, - "inode": 523639, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/373", - "xusr": false, - "atime": 1436810538.3425822, - "isdir": false, - "ctime": 1436810538.3425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2765822, - "inode": 524896, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1630", - "xusr": false, - "atime": 1436810539.2765822, - "isdir": false, - "ctime": 1436810539.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1295824, - "inode": 527164, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3898", - "xusr": false, - "atime": 1436810541.1295824, - "isdir": false, - "ctime": 1436810541.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4435823, - "inode": 523748, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/482", - "xusr": false, - "atime": 1436810538.4435823, - "isdir": false, - "ctime": 1436810538.4435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2375822, - "inode": 527311, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4045", - "xusr": false, - "atime": 1436810541.2375822, - "isdir": false, - "ctime": 1436810541.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1235824, - "inode": 527155, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3889", - "xusr": false, - "atime": 1436810541.1235824, - "isdir": false, - "ctime": 1436810541.1235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9365823, - "inode": 524411, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1145", - "xusr": false, - "atime": 1436810538.9365823, - "isdir": false, - "ctime": 1436810538.9365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1415823, - "inode": 523373, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/107", - "xusr": false, - "atime": 1436810538.1415823, - "isdir": false, - "ctime": 1436810538.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8585823, - "inode": 528121, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4855", - "xusr": false, - "atime": 1436810541.8585823, - "isdir": false, - "ctime": 1436810541.8585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7005823, - "inode": 526565, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3299", - "xusr": false, - "atime": 1436810540.7005823, - "isdir": false, - "ctime": 1436810540.7005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8915823, - "inode": 526834, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3568", - "xusr": false, - "atime": 1436810540.8915823, - "isdir": false, - "ctime": 1436810540.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9465823, - "inode": 528244, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4978", - "xusr": false, - "atime": 1436810541.9465823, - "isdir": false, - "ctime": 1436810541.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2095823, - "inode": 527272, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4006", - "xusr": false, - "atime": 1436810541.2095823, - "isdir": false, - "ctime": 1436810541.2095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2005823, - "inode": 524786, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1520", - "xusr": false, - "atime": 1436810539.2005823, - "isdir": false, - "ctime": 1436810539.2005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1875823, - "inode": 525926, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2660", - "xusr": false, - "atime": 1436810540.1875823, - "isdir": false, - "ctime": 1436810540.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2925823, - "inode": 524918, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1652", - "xusr": false, - "atime": 1436810539.2925823, - "isdir": false, - "ctime": 1436810539.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4085822, - "inode": 527504, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4238", - "xusr": false, - "atime": 1436810541.4085822, - "isdir": false, - "ctime": 1436810541.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6435823, - "inode": 526486, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3220", - "xusr": false, - "atime": 1436810540.6435823, - "isdir": false, - "ctime": 1436810540.6435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0995822, - "inode": 523316, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/50", - "xusr": false, - "atime": 1436810538.0995822, - "isdir": false, - "ctime": 1436810538.0995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9795823, - "inode": 524472, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1206", - "xusr": false, - "atime": 1436810538.9795823, - "isdir": false, - "ctime": 1436810538.9795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6945822, - "inode": 525328, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2062", - "xusr": false, - "atime": 1436810539.6945822, - "isdir": false, - "ctime": 1436810539.6945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2785823, - "inode": 526030, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2764", - "xusr": false, - "atime": 1436810540.2785823, - "isdir": false, - "ctime": 1436810540.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6395824, - "inode": 525275, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2009", - "xusr": false, - "atime": 1436810539.6395824, - "isdir": false, - "ctime": 1436810539.6395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3945823, - "inode": 526184, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2918", - "xusr": false, - "atime": 1436810540.3945823, - "isdir": false, - "ctime": 1436810540.3945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7945824, - "inode": 524219, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/953", - "xusr": false, - "atime": 1436810538.7945824, - "isdir": false, - "ctime": 1436810538.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1645823, - "inode": 527211, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3945", - "xusr": false, - "atime": 1436810541.1645823, - "isdir": false, - "ctime": 1436810541.1645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2035823, - "inode": 527263, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3997", - "xusr": false, - "atime": 1436810541.2035823, - "isdir": false, - "ctime": 1436810541.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9425824, - "inode": 528239, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4973", - "xusr": false, - "atime": 1436810541.9425824, - "isdir": false, - "ctime": 1436810541.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1265824, - "inode": 523352, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/86", - "xusr": false, - "atime": 1436810538.1265824, - "isdir": false, - "ctime": 1436810538.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9075823, - "inode": 525602, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2336", - "xusr": false, - "atime": 1436810539.9075823, - "isdir": false, - "ctime": 1436810539.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1315823, - "inode": 527167, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3901", - "xusr": false, - "atime": 1436810541.1315823, - "isdir": false, - "ctime": 1436810541.1315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6355822, - "inode": 526475, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3209", - "xusr": false, - "atime": 1436810540.6355822, - "isdir": false, - "ctime": 1436810540.6355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4625823, - "inode": 526265, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2999", - "xusr": false, - "atime": 1436810540.4625823, - "isdir": false, - "ctime": 1436810540.4625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0675824, - "inode": 523272, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/6", - "xusr": false, - "atime": 1436810538.0675824, - "isdir": false, - "ctime": 1436810538.0675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7665823, - "inode": 525409, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2143", - "xusr": false, - "atime": 1436810539.7665823, - "isdir": false, - "ctime": 1436810539.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4495823, - "inode": 526255, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2989", - "xusr": false, - "atime": 1436810540.4495823, - "isdir": false, - "ctime": 1436810540.4495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9505823, - "inode": 525660, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2394", - "xusr": false, - "atime": 1436810539.9505823, - "isdir": false, - "ctime": 1436810539.9505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9475822, - "inode": 526912, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3646", - "xusr": false, - "atime": 1436810540.9475822, - "isdir": false, - "ctime": 1436810540.9475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9545822, - "inode": 525666, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2400", - "xusr": false, - "atime": 1436810539.9545822, - "isdir": false, - "ctime": 1436810539.9545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6445823, - "inode": 527828, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4562", - "xusr": false, - "atime": 1436810541.6445823, - "isdir": false, - "ctime": 1436810541.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1465824, - "inode": 525886, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2620", - "xusr": false, - "atime": 1436810540.1465824, - "isdir": false, - "ctime": 1436810540.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2475822, - "inode": 527324, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4058", - "xusr": false, - "atime": 1436810541.2475822, - "isdir": false, - "ctime": 1436810541.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5615823, - "inode": 527713, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4447", - "xusr": false, - "atime": 1436810541.5615823, - "isdir": false, - "ctime": 1436810541.5615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3245823, - "inode": 527421, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4155", - "xusr": false, - "atime": 1436810541.3245823, - "isdir": false, - "ctime": 1436810541.3245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8475823, - "inode": 525518, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2252", - "xusr": false, - "atime": 1436810539.8475823, - "isdir": false, - "ctime": 1436810539.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3485823, - "inode": 526119, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2853", - "xusr": false, - "atime": 1436810540.3485823, - "isdir": false, - "ctime": 1436810540.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2215824, - "inode": 524816, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1550", - "xusr": false, - "atime": 1436810539.2215824, - "isdir": false, - "ctime": 1436810539.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8545823, - "inode": 528116, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4850", - "xusr": false, - "atime": 1436810541.8545823, - "isdir": false, - "ctime": 1436810541.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2755823, - "inode": 527364, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4098", - "xusr": false, - "atime": 1436810541.2755823, - "isdir": false, - "ctime": 1436810541.2755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6215823, - "inode": 525252, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1986", - "xusr": false, - "atime": 1436810539.6215823, - "isdir": false, - "ctime": 1436810539.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8005824, - "inode": 528043, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4777", - "xusr": false, - "atime": 1436810541.8005824, - "isdir": false, - "ctime": 1436810541.8005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0975823, - "inode": 525842, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2576", - "xusr": false, - "atime": 1436810540.0975823, - "isdir": false, - "ctime": 1436810540.0975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6925824, - "inode": 526554, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3288", - "xusr": false, - "atime": 1436810540.6925824, - "isdir": false, - "ctime": 1436810540.6925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1175823, - "inode": 527148, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3882", - "xusr": false, - "atime": 1436810541.1175823, - "isdir": false, - "ctime": 1436810541.1175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4055824, - "inode": 523703, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/437", - "xusr": false, - "atime": 1436810538.4055824, - "isdir": false, - "ctime": 1436810538.4055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1295824, - "inode": 523356, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/90", - "xusr": false, - "atime": 1436810538.1295824, - "isdir": false, - "ctime": 1436810538.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2005823, - "inode": 525940, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2674", - "xusr": false, - "atime": 1436810540.2005823, - "isdir": false, - "ctime": 1436810540.2005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4085822, - "inode": 523708, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/442", - "xusr": false, - "atime": 1436810538.4085822, - "isdir": false, - "ctime": 1436810538.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3205824, - "inode": 523620, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/354", - "xusr": false, - "atime": 1436810538.3205824, - "isdir": false, - "ctime": 1436810538.3205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1395824, - "inode": 525879, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2613", - "xusr": false, - "atime": 1436810540.1395824, - "isdir": false, - "ctime": 1436810540.1395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8895824, - "inode": 528165, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4899", - "xusr": false, - "atime": 1436810541.8895824, - "isdir": false, - "ctime": 1436810541.8895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2125823, - "inode": 525955, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2689", - "xusr": false, - "atime": 1436810540.2125823, - "isdir": false, - "ctime": 1436810540.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8935823, - "inode": 528171, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4905", - "xusr": false, - "atime": 1436810541.8935823, - "isdir": false, - "ctime": 1436810541.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6845822, - "inode": 525318, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2052", - "xusr": false, - "atime": 1436810539.6845822, - "isdir": false, - "ctime": 1436810539.6845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0035822, - "inode": 525733, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2467", - "xusr": false, - "atime": 1436810540.0035822, - "isdir": false, - "ctime": 1436810540.0035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6485822, - "inode": 524030, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/764", - "xusr": false, - "atime": 1436810538.6485822, - "isdir": false, - "ctime": 1436810538.6485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7615824, - "inode": 526651, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3385", - "xusr": false, - "atime": 1436810540.7615824, - "isdir": false, - "ctime": 1436810540.7615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2765822, - "inode": 524895, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1629", - "xusr": false, - "atime": 1436810539.2765822, - "isdir": false, - "ctime": 1436810539.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6455822, - "inode": 526488, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3222", - "xusr": false, - "atime": 1436810540.6455822, - "isdir": false, - "ctime": 1436810540.6455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8415823, - "inode": 528099, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4833", - "xusr": false, - "atime": 1436810541.8415823, - "isdir": false, - "ctime": 1436810541.8415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0685823, - "inode": 523273, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/7", - "xusr": false, - "atime": 1436810538.0685823, - "isdir": false, - "ctime": 1436810538.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8325822, - "inode": 525496, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2230", - "xusr": false, - "atime": 1436810539.8325822, - "isdir": false, - "ctime": 1436810539.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5195823, - "inode": 525138, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1872", - "xusr": false, - "atime": 1436810539.5195823, - "isdir": false, - "ctime": 1436810539.5195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1245823, - "inode": 523348, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/82", - "xusr": false, - "atime": 1436810538.1245823, - "isdir": false, - "ctime": 1436810538.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9345822, - "inode": 528228, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4962", - "xusr": false, - "atime": 1436810541.9345822, - "isdir": false, - "ctime": 1436810541.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2015824, - "inode": 523459, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/193", - "xusr": false, - "atime": 1436810538.2015824, - "isdir": false, - "ctime": 1436810538.2015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0135822, - "inode": 527003, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3737", - "xusr": false, - "atime": 1436810541.0135822, - "isdir": false, - "ctime": 1436810541.0135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0965824, - "inode": 523312, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/46", - "xusr": false, - "atime": 1436810538.0965824, - "isdir": false, - "ctime": 1436810538.0965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2845824, - "inode": 523577, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/311", - "xusr": false, - "atime": 1436810538.2845824, - "isdir": false, - "ctime": 1436810538.2845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4175823, - "inode": 525045, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1779", - "xusr": false, - "atime": 1436810539.4175823, - "isdir": false, - "ctime": 1436810539.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9835823, - "inode": 525705, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2439", - "xusr": false, - "atime": 1436810539.9835823, - "isdir": false, - "ctime": 1436810539.9835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2515824, - "inode": 523530, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/264", - "xusr": false, - "atime": 1436810538.2515824, - "isdir": false, - "ctime": 1436810538.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2715824, - "inode": 527359, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4093", - "xusr": false, - "atime": 1436810541.2715824, - "isdir": false, - "ctime": 1436810541.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8085823, - "inode": 526717, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3451", - "xusr": false, - "atime": 1436810540.8085823, - "isdir": false, - "ctime": 1436810540.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5005822, - "inode": 523828, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/562", - "xusr": false, - "atime": 1436810538.5005822, - "isdir": false, - "ctime": 1436810538.5005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8995824, - "inode": 524360, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1094", - "xusr": false, - "atime": 1436810538.8995824, - "isdir": false, - "ctime": 1436810538.8995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5885823, - "inode": 526408, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3142", - "xusr": false, - "atime": 1436810540.5885823, - "isdir": false, - "ctime": 1436810540.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4635823, - "inode": 525080, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1814", - "xusr": false, - "atime": 1436810539.4635823, - "isdir": false, - "ctime": 1436810539.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9885824, - "inode": 526971, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3705", - "xusr": false, - "atime": 1436810540.9885824, - "isdir": false, - "ctime": 1436810540.9885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7785823, - "inode": 526674, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3408", - "xusr": false, - "atime": 1436810540.7785823, - "isdir": false, - "ctime": 1436810540.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9585824, - "inode": 528261, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4995", - "xusr": false, - "atime": 1436810541.9585824, - "isdir": false, - "ctime": 1436810541.9585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2645824, - "inode": 524878, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1612", - "xusr": false, - "atime": 1436810539.2645824, - "isdir": false, - "ctime": 1436810539.2645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9575822, - "inode": 524440, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1174", - "xusr": false, - "atime": 1436810538.9575822, - "isdir": false, - "ctime": 1436810538.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0115824, - "inode": 527001, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3735", - "xusr": false, - "atime": 1436810541.0115824, - "isdir": false, - "ctime": 1436810541.0115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8255823, - "inode": 526740, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3474", - "xusr": false, - "atime": 1436810540.8255823, - "isdir": false, - "ctime": 1436810540.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5605824, - "inode": 526369, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3103", - "xusr": false, - "atime": 1436810540.5605824, - "isdir": false, - "ctime": 1436810540.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3235824, - "inode": 524955, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1689", - "xusr": false, - "atime": 1436810539.3235824, - "isdir": false, - "ctime": 1436810539.3235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5625823, - "inode": 523912, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/646", - "xusr": false, - "atime": 1436810538.5625823, - "isdir": false, - "ctime": 1436810538.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4825823, - "inode": 526287, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3021", - "xusr": false, - "atime": 1436810540.4825823, - "isdir": false, - "ctime": 1436810540.4825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4545822, - "inode": 523764, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/498", - "xusr": false, - "atime": 1436810538.4545822, - "isdir": false, - "ctime": 1436810538.4545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3405824, - "inode": 523637, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/371", - "xusr": false, - "atime": 1436810538.3405824, - "isdir": false, - "ctime": 1436810538.3405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3775823, - "inode": 527469, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4203", - "xusr": false, - "atime": 1436810541.3775823, - "isdir": false, - "ctime": 1436810541.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9975822, - "inode": 526982, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3716", - "xusr": false, - "atime": 1436810540.9975822, - "isdir": false, - "ctime": 1436810540.9975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1005824, - "inode": 524643, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1377", - "xusr": false, - "atime": 1436810539.1005824, - "isdir": false, - "ctime": 1436810539.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0725822, - "inode": 523279, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/13", - "xusr": false, - "atime": 1436810538.0725822, - "isdir": false, - "ctime": 1436810538.0725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9595823, - "inode": 525673, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2407", - "xusr": false, - "atime": 1436810539.9595823, - "isdir": false, - "ctime": 1436810539.9595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6655824, - "inode": 526516, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3250", - "xusr": false, - "atime": 1436810540.6655824, - "isdir": false, - "ctime": 1436810540.6655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2575824, - "inode": 526006, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2740", - "xusr": false, - "atime": 1436810540.2575824, - "isdir": false, - "ctime": 1436810540.2575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6935823, - "inode": 527896, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4630", - "xusr": false, - "atime": 1436810541.6935823, - "isdir": false, - "ctime": 1436810541.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1045823, - "inode": 523322, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/56", - "xusr": false, - "atime": 1436810538.1045823, - "isdir": false, - "ctime": 1436810538.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5095823, - "inode": 523841, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/575", - "xusr": false, - "atime": 1436810538.5095823, - "isdir": false, - "ctime": 1436810538.5095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5395823, - "inode": 523880, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/614", - "xusr": false, - "atime": 1436810538.5395823, - "isdir": false, - "ctime": 1436810538.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4055824, - "inode": 525030, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1764", - "xusr": false, - "atime": 1436810539.4055824, - "isdir": false, - "ctime": 1436810539.4055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7785823, - "inode": 528012, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4746", - "xusr": false, - "atime": 1436810541.7785823, - "isdir": false, - "ctime": 1436810541.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3455822, - "inode": 524975, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1709", - "xusr": false, - "atime": 1436810539.3455822, - "isdir": false, - "ctime": 1436810539.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4575822, - "inode": 525075, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1809", - "xusr": false, - "atime": 1436810539.4575822, - "isdir": false, - "ctime": 1436810539.4575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2075822, - "inode": 527268, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4002", - "xusr": false, - "atime": 1436810541.2075822, - "isdir": false, - "ctime": 1436810541.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2045822, - "inode": 525945, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2679", - "xusr": false, - "atime": 1436810540.2045822, - "isdir": false, - "ctime": 1436810540.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4535823, - "inode": 523763, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/497", - "xusr": false, - "atime": 1436810538.4535823, - "isdir": false, - "ctime": 1436810538.4535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7515824, - "inode": 525389, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2123", - "xusr": false, - "atime": 1436810539.7515824, - "isdir": false, - "ctime": 1436810539.7515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6635823, - "inode": 524051, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/785", - "xusr": false, - "atime": 1436810538.6635823, - "isdir": false, - "ctime": 1436810538.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0935824, - "inode": 523308, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/42", - "xusr": false, - "atime": 1436810538.0935824, - "isdir": false, - "ctime": 1436810538.0935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2675824, - "inode": 524883, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1617", - "xusr": false, - "atime": 1436810539.2675824, - "isdir": false, - "ctime": 1436810539.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9995823, - "inode": 525727, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2461", - "xusr": false, - "atime": 1436810539.9995823, - "isdir": false, - "ctime": 1436810539.9995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1305823, - "inode": 524686, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1420", - "xusr": false, - "atime": 1436810539.1305823, - "isdir": false, - "ctime": 1436810539.1305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3905823, - "inode": 523683, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/417", - "xusr": false, - "atime": 1436810538.3905823, - "isdir": false, - "ctime": 1436810538.3905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1675823, - "inode": 524739, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1473", - "xusr": false, - "atime": 1436810539.1675823, - "isdir": false, - "ctime": 1436810539.1675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7055824, - "inode": 527912, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4646", - "xusr": false, - "atime": 1436810541.7055824, - "isdir": false, - "ctime": 1436810541.7055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4485824, - "inode": 527557, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4291", - "xusr": false, - "atime": 1436810541.4485824, - "isdir": false, - "ctime": 1436810541.4485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8825824, - "inode": 528155, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4889", - "xusr": false, - "atime": 1436810541.8825824, - "isdir": false, - "ctime": 1436810541.8825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1645823, - "inode": 523406, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/140", - "xusr": false, - "atime": 1436810538.1645823, - "isdir": false, - "ctime": 1436810538.1645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8015823, - "inode": 525453, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2187", - "xusr": false, - "atime": 1436810539.8015823, - "isdir": false, - "ctime": 1436810539.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8035824, - "inode": 525456, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2190", - "xusr": false, - "atime": 1436810539.8035824, - "isdir": false, - "ctime": 1436810539.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3755822, - "inode": 527466, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4200", - "xusr": false, - "atime": 1436810541.3755822, - "isdir": false, - "ctime": 1436810541.3755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7785823, - "inode": 525426, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2160", - "xusr": false, - "atime": 1436810539.7785823, - "isdir": false, - "ctime": 1436810539.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1505823, - "inode": 524715, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1449", - "xusr": false, - "atime": 1436810539.1505823, - "isdir": false, - "ctime": 1436810539.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9315822, - "inode": 526891, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3625", - "xusr": false, - "atime": 1436810540.9315822, - "isdir": false, - "ctime": 1436810540.9315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8015823, - "inode": 526708, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3442", - "xusr": false, - "atime": 1436810540.8015823, - "isdir": false, - "ctime": 1436810540.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0315824, - "inode": 524544, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1278", - "xusr": false, - "atime": 1436810539.0315824, - "isdir": false, - "ctime": 1436810539.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0185823, - "inode": 525754, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2488", - "xusr": false, - "atime": 1436810540.0185823, - "isdir": false, - "ctime": 1436810540.0185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3305824, - "inode": 524959, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1693", - "xusr": false, - "atime": 1436810539.3305824, - "isdir": false, - "ctime": 1436810539.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8845823, - "inode": 524340, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1074", - "xusr": false, - "atime": 1436810538.8845823, - "isdir": false, - "ctime": 1436810538.8845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1855824, - "inode": 523436, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/170", - "xusr": false, - "atime": 1436810538.1855824, - "isdir": false, - "ctime": 1436810538.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5055823, - "inode": 523835, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/569", - "xusr": false, - "atime": 1436810538.5055823, - "isdir": false, - "ctime": 1436810538.5055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8665824, - "inode": 528132, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4866", - "xusr": false, - "atime": 1436810541.8665824, - "isdir": false, - "ctime": 1436810541.8665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8865824, - "inode": 525573, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2307", - "xusr": false, - "atime": 1436810539.8865824, - "isdir": false, - "ctime": 1436810539.8865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3175824, - "inode": 527418, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4152", - "xusr": false, - "atime": 1436810541.3175824, - "isdir": false, - "ctime": 1436810541.3175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4565823, - "inode": 527568, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4302", - "xusr": false, - "atime": 1436810541.4565823, - "isdir": false, - "ctime": 1436810541.4565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9255824, - "inode": 526882, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3616", - "xusr": false, - "atime": 1436810540.9255824, - "isdir": false, - "ctime": 1436810540.9255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7825823, - "inode": 528018, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4752", - "xusr": false, - "atime": 1436810541.7825823, - "isdir": false, - "ctime": 1436810541.7825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3075824, - "inode": 527406, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4140", - "xusr": false, - "atime": 1436810541.3075824, - "isdir": false, - "ctime": 1436810541.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9905822, - "inode": 525715, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2449", - "xusr": false, - "atime": 1436810539.9905822, - "isdir": false, - "ctime": 1436810539.9905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1455822, - "inode": 523379, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/113", - "xusr": false, - "atime": 1436810538.1455822, - "isdir": false, - "ctime": 1436810538.1455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0785823, - "inode": 527093, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3827", - "xusr": false, - "atime": 1436810541.0785823, - "isdir": false, - "ctime": 1436810541.0785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5465822, - "inode": 523890, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/624", - "xusr": false, - "atime": 1436810538.5465822, - "isdir": false, - "ctime": 1436810538.5465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7345824, - "inode": 525371, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2105", - "xusr": false, - "atime": 1436810539.7345824, - "isdir": false, - "ctime": 1436810539.7345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5215824, - "inode": 525140, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1874", - "xusr": false, - "atime": 1436810539.5215824, - "isdir": false, - "ctime": 1436810539.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4295824, - "inode": 527532, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4266", - "xusr": false, - "atime": 1436810541.4295824, - "isdir": false, - "ctime": 1436810541.4295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0205822, - "inode": 527013, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3747", - "xusr": false, - "atime": 1436810541.0205822, - "isdir": false, - "ctime": 1436810541.0205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2755823, - "inode": 526026, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2760", - "xusr": false, - "atime": 1436810540.2755823, - "isdir": false, - "ctime": 1436810540.2755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1875823, - "inode": 524768, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1502", - "xusr": false, - "atime": 1436810539.1875823, - "isdir": false, - "ctime": 1436810539.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7225823, - "inode": 524128, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/862", - "xusr": false, - "atime": 1436810538.7225823, - "isdir": false, - "ctime": 1436810538.7225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1215823, - "inode": 523345, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/79", - "xusr": false, - "atime": 1436810538.1215823, - "isdir": false, - "ctime": 1436810538.1215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2565823, - "inode": 527337, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4071", - "xusr": false, - "atime": 1436810541.2565823, - "isdir": false, - "ctime": 1436810541.2565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5415823, - "inode": 527686, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4420", - "xusr": false, - "atime": 1436810541.5415823, - "isdir": false, - "ctime": 1436810541.5415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8055823, - "inode": 528050, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4784", - "xusr": false, - "atime": 1436810541.8055823, - "isdir": false, - "ctime": 1436810541.8055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6855824, - "inode": 524080, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/814", - "xusr": false, - "atime": 1436810538.6855824, - "isdir": false, - "ctime": 1436810538.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4385824, - "inode": 527543, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4277", - "xusr": false, - "atime": 1436810541.4385824, - "isdir": false, - "ctime": 1436810541.4385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0695822, - "inode": 523275, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/9", - "xusr": false, - "atime": 1436810538.0695822, - "isdir": false, - "ctime": 1436810538.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4045823, - "inode": 526198, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2932", - "xusr": false, - "atime": 1436810540.4045823, - "isdir": false, - "ctime": 1436810540.4045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9495823, - "inode": 525659, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2393", - "xusr": false, - "atime": 1436810539.9495823, - "isdir": false, - "ctime": 1436810539.9495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0235822, - "inode": 527017, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3751", - "xusr": false, - "atime": 1436810541.0235822, - "isdir": false, - "ctime": 1436810541.0235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0225823, - "inode": 527015, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3749", - "xusr": false, - "atime": 1436810541.0225823, - "isdir": false, - "ctime": 1436810541.0225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5705824, - "inode": 523923, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/657", - "xusr": false, - "atime": 1436810538.5705824, - "isdir": false, - "ctime": 1436810538.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8915823, - "inode": 525580, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2314", - "xusr": false, - "atime": 1436810539.8915823, - "isdir": false, - "ctime": 1436810539.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3805823, - "inode": 527473, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4207", - "xusr": false, - "atime": 1436810541.3805823, - "isdir": false, - "ctime": 1436810541.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5275824, - "inode": 525147, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1881", - "xusr": false, - "atime": 1436810539.5275824, - "isdir": false, - "ctime": 1436810539.5275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2625823, - "inode": 526010, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2744", - "xusr": false, - "atime": 1436810540.2625823, - "isdir": false, - "ctime": 1436810540.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5705824, - "inode": 526384, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3118", - "xusr": false, - "atime": 1436810540.5705824, - "isdir": false, - "ctime": 1436810540.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0555823, - "inode": 525799, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2533", - "xusr": false, - "atime": 1436810540.0555823, - "isdir": false, - "ctime": 1436810540.0555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8425822, - "inode": 525510, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2244", - "xusr": false, - "atime": 1436810539.8425822, - "isdir": false, - "ctime": 1436810539.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6365824, - "inode": 527818, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4552", - "xusr": false, - "atime": 1436810541.6365824, - "isdir": false, - "ctime": 1436810541.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2105823, - "inode": 524801, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1535", - "xusr": false, - "atime": 1436810539.2105823, - "isdir": false, - "ctime": 1436810539.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0715823, - "inode": 527084, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3818", - "xusr": false, - "atime": 1436810541.0715823, - "isdir": false, - "ctime": 1436810541.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8555822, - "inode": 524301, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1035", - "xusr": false, - "atime": 1436810538.8555822, - "isdir": false, - "ctime": 1436810538.8555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1335824, - "inode": 527169, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3903", - "xusr": false, - "atime": 1436810541.1335824, - "isdir": false, - "ctime": 1436810541.1335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3845823, - "inode": 526170, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2904", - "xusr": false, - "atime": 1436810540.3845823, - "isdir": false, - "ctime": 1436810540.3845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5795822, - "inode": 523936, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/670", - "xusr": false, - "atime": 1436810538.5795822, - "isdir": false, - "ctime": 1436810538.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0765824, - "inode": 525820, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2554", - "xusr": false, - "atime": 1436810540.0765824, - "isdir": false, - "ctime": 1436810540.0765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3725822, - "inode": 523663, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/397", - "xusr": false, - "atime": 1436810538.3725822, - "isdir": false, - "ctime": 1436810538.3725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3925824, - "inode": 527483, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4217", - "xusr": false, - "atime": 1436810541.3925824, - "isdir": false, - "ctime": 1436810541.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9335823, - "inode": 525637, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2371", - "xusr": false, - "atime": 1436810539.9335823, - "isdir": false, - "ctime": 1436810539.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5965824, - "inode": 525219, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1953", - "xusr": false, - "atime": 1436810539.5965824, - "isdir": false, - "ctime": 1436810539.5965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2495823, - "inode": 525996, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2730", - "xusr": false, - "atime": 1436810540.2495823, - "isdir": false, - "ctime": 1436810540.2495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4605823, - "inode": 527574, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4308", - "xusr": false, - "atime": 1436810541.4605823, - "isdir": false, - "ctime": 1436810541.4605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1545823, - "inode": 524721, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1455", - "xusr": false, - "atime": 1436810539.1545823, - "isdir": false, - "ctime": 1436810539.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1535823, - "inode": 523391, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/125", - "xusr": false, - "atime": 1436810538.1535823, - "isdir": false, - "ctime": 1436810538.1535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6645823, - "inode": 526515, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3249", - "xusr": false, - "atime": 1436810540.6645823, - "isdir": false, - "ctime": 1436810540.6645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4505823, - "inode": 527560, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4294", - "xusr": false, - "atime": 1436810541.4505823, - "isdir": false, - "ctime": 1436810541.4505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0695822, - "inode": 524598, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1332", - "xusr": false, - "atime": 1436810539.0695822, - "isdir": false, - "ctime": 1436810539.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5255823, - "inode": 527664, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4398", - "xusr": false, - "atime": 1436810541.5255823, - "isdir": false, - "ctime": 1436810541.5255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1925824, - "inode": 524775, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1509", - "xusr": false, - "atime": 1436810539.1925824, - "isdir": false, - "ctime": 1436810539.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2995822, - "inode": 523598, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/332", - "xusr": false, - "atime": 1436810538.2995822, - "isdir": false, - "ctime": 1436810538.2995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2305822, - "inode": 524830, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1564", - "xusr": false, - "atime": 1436810539.2305822, - "isdir": false, - "ctime": 1436810539.2305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3845823, - "inode": 523679, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/413", - "xusr": false, - "atime": 1436810538.3845823, - "isdir": false, - "ctime": 1436810538.3845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7205822, - "inode": 525357, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2091", - "xusr": false, - "atime": 1436810539.7205822, - "isdir": false, - "ctime": 1436810539.7205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0045824, - "inode": 525735, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2469", - "xusr": false, - "atime": 1436810540.0045824, - "isdir": false, - "ctime": 1436810540.0045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9235823, - "inode": 528212, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4946", - "xusr": false, - "atime": 1436810541.9235823, - "isdir": false, - "ctime": 1436810541.9235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7535822, - "inode": 526640, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3374", - "xusr": false, - "atime": 1436810540.7535822, - "isdir": false, - "ctime": 1436810540.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2795823, - "inode": 523570, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/304", - "xusr": false, - "atime": 1436810538.2795823, - "isdir": false, - "ctime": 1436810538.2795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3965824, - "inode": 526187, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2921", - "xusr": false, - "atime": 1436810540.3965824, - "isdir": false, - "ctime": 1436810540.3965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0415823, - "inode": 525785, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2519", - "xusr": false, - "atime": 1436810540.0415823, - "isdir": false, - "ctime": 1436810540.0415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9085822, - "inode": 525604, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2338", - "xusr": false, - "atime": 1436810539.9085822, - "isdir": false, - "ctime": 1436810539.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7765822, - "inode": 524196, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/930", - "xusr": false, - "atime": 1436810538.7765822, - "isdir": false, - "ctime": 1436810538.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7735822, - "inode": 525418, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2152", - "xusr": false, - "atime": 1436810539.7735822, - "isdir": false, - "ctime": 1436810539.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6665823, - "inode": 524054, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/788", - "xusr": false, - "atime": 1436810538.6665823, - "isdir": false, - "ctime": 1436810538.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1305823, - "inode": 527165, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3899", - "xusr": false, - "atime": 1436810541.1305823, - "isdir": false, - "ctime": 1436810541.1305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5145824, - "inode": 527649, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4383", - "xusr": false, - "atime": 1436810541.5145824, - "isdir": false, - "ctime": 1436810541.5145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2435822, - "inode": 523518, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/252", - "xusr": false, - "atime": 1436810538.2435822, - "isdir": false, - "ctime": 1436810538.2435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2915823, - "inode": 523587, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/321", - "xusr": false, - "atime": 1436810538.2915823, - "isdir": false, - "ctime": 1436810538.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7335823, - "inode": 525369, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2103", - "xusr": false, - "atime": 1436810539.7335823, - "isdir": false, - "ctime": 1436810539.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7545824, - "inode": 526641, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3375", - "xusr": false, - "atime": 1436810540.7545824, - "isdir": false, - "ctime": 1436810540.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2495823, - "inode": 523527, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/261", - "xusr": false, - "atime": 1436810538.2495823, - "isdir": false, - "ctime": 1436810538.2495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1205823, - "inode": 527151, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3885", - "xusr": false, - "atime": 1436810541.1205823, - "isdir": false, - "ctime": 1436810541.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1675823, - "inode": 527215, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3949", - "xusr": false, - "atime": 1436810541.1675823, - "isdir": false, - "ctime": 1436810541.1675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5995822, - "inode": 526425, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3159", - "xusr": false, - "atime": 1436810540.5995822, - "isdir": false, - "ctime": 1436810540.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4895823, - "inode": 526292, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3026", - "xusr": false, - "atime": 1436810540.4895823, - "isdir": false, - "ctime": 1436810540.4895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3455822, - "inode": 523643, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/377", - "xusr": false, - "atime": 1436810538.3455822, - "isdir": false, - "ctime": 1436810538.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5375824, - "inode": 525157, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1891", - "xusr": false, - "atime": 1436810539.5375824, - "isdir": false, - "ctime": 1436810539.5375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9005823, - "inode": 524362, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1096", - "xusr": false, - "atime": 1436810538.9005823, - "isdir": false, - "ctime": 1436810538.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7055824, - "inode": 527913, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4647", - "xusr": false, - "atime": 1436810541.7055824, - "isdir": false, - "ctime": 1436810541.7055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5225823, - "inode": 527660, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4394", - "xusr": false, - "atime": 1436810541.5225823, - "isdir": false, - "ctime": 1436810541.5225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8445823, - "inode": 528102, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4836", - "xusr": false, - "atime": 1436810541.8445823, - "isdir": false, - "ctime": 1436810541.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2375822, - "inode": 527310, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4044", - "xusr": false, - "atime": 1436810541.2375822, - "isdir": false, - "ctime": 1436810541.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4675822, - "inode": 527584, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4318", - "xusr": false, - "atime": 1436810541.4675822, - "isdir": false, - "ctime": 1436810541.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5575824, - "inode": 527708, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4442", - "xusr": false, - "atime": 1436810541.5575824, - "isdir": false, - "ctime": 1436810541.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8515823, - "inode": 526777, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3511", - "xusr": false, - "atime": 1436810540.8515823, - "isdir": false, - "ctime": 1436810540.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2415824, - "inode": 525987, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2721", - "xusr": false, - "atime": 1436810540.2415824, - "isdir": false, - "ctime": 1436810540.2415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9435823, - "inode": 524420, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1154", - "xusr": false, - "atime": 1436810538.9435823, - "isdir": false, - "ctime": 1436810538.9435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8235824, - "inode": 525483, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2217", - "xusr": false, - "atime": 1436810539.8235824, - "isdir": false, - "ctime": 1436810539.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8485823, - "inode": 528107, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4841", - "xusr": false, - "atime": 1436810541.8485823, - "isdir": false, - "ctime": 1436810541.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0095823, - "inode": 525741, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2475", - "xusr": false, - "atime": 1436810540.0095823, - "isdir": false, - "ctime": 1436810540.0095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6215823, - "inode": 525251, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1985", - "xusr": false, - "atime": 1436810539.6215823, - "isdir": false, - "ctime": 1436810539.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4795823, - "inode": 527601, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4335", - "xusr": false, - "atime": 1436810541.4795823, - "isdir": false, - "ctime": 1436810541.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9415822, - "inode": 524417, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1151", - "xusr": false, - "atime": 1436810538.9415822, - "isdir": false, - "ctime": 1436810538.9415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8395822, - "inode": 525506, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2240", - "xusr": false, - "atime": 1436810539.8395822, - "isdir": false, - "ctime": 1436810539.8395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2235823, - "inode": 525968, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2702", - "xusr": false, - "atime": 1436810540.2235823, - "isdir": false, - "ctime": 1436810540.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4125824, - "inode": 526210, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2944", - "xusr": false, - "atime": 1436810540.4125824, - "isdir": false, - "ctime": 1436810540.4125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7985823, - "inode": 524224, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/958", - "xusr": false, - "atime": 1436810538.7985823, - "isdir": false, - "ctime": 1436810538.7985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5705824, - "inode": 527726, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4460", - "xusr": false, - "atime": 1436810541.5705824, - "isdir": false, - "ctime": 1436810541.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3975823, - "inode": 526188, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2922", - "xusr": false, - "atime": 1436810540.3975823, - "isdir": false, - "ctime": 1436810540.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9475822, - "inode": 524426, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1160", - "xusr": false, - "atime": 1436810538.9475822, - "isdir": false, - "ctime": 1436810538.9475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9465823, - "inode": 525654, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2388", - "xusr": false, - "atime": 1436810539.9465823, - "isdir": false, - "ctime": 1436810539.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1855824, - "inode": 524765, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1499", - "xusr": false, - "atime": 1436810539.1855824, - "isdir": false, - "ctime": 1436810539.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5785823, - "inode": 523934, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/668", - "xusr": false, - "atime": 1436810538.5785823, - "isdir": false, - "ctime": 1436810538.5785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6555824, - "inode": 524039, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/773", - "xusr": false, - "atime": 1436810538.6555824, - "isdir": false, - "ctime": 1436810538.6555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3845823, - "inode": 527478, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4212", - "xusr": false, - "atime": 1436810541.3845823, - "isdir": false, - "ctime": 1436810541.3845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7265823, - "inode": 526603, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3337", - "xusr": false, - "atime": 1436810540.7265823, - "isdir": false, - "ctime": 1436810540.7265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2675824, - "inode": 524882, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1616", - "xusr": false, - "atime": 1436810539.2675824, - "isdir": false, - "ctime": 1436810539.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1445823, - "inode": 525885, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2619", - "xusr": false, - "atime": 1436810540.1445823, - "isdir": false, - "ctime": 1436810540.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7185824, - "inode": 525356, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2090", - "xusr": false, - "atime": 1436810539.7185824, - "isdir": false, - "ctime": 1436810539.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3035824, - "inode": 526057, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2791", - "xusr": false, - "atime": 1436810540.3035824, - "isdir": false, - "ctime": 1436810540.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1795824, - "inode": 523427, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/161", - "xusr": false, - "atime": 1436810538.1795824, - "isdir": false, - "ctime": 1436810538.1795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5615823, - "inode": 527714, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4448", - "xusr": false, - "atime": 1436810541.5615823, - "isdir": false, - "ctime": 1436810541.5615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5975823, - "inode": 527764, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4498", - "xusr": false, - "atime": 1436810541.5975823, - "isdir": false, - "ctime": 1436810541.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4075823, - "inode": 527503, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4237", - "xusr": false, - "atime": 1436810541.4075823, - "isdir": false, - "ctime": 1436810541.4075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7685823, - "inode": 526660, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3394", - "xusr": false, - "atime": 1436810540.7685823, - "isdir": false, - "ctime": 1436810540.7685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9015822, - "inode": 526848, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3582", - "xusr": false, - "atime": 1436810540.9015822, - "isdir": false, - "ctime": 1436810540.9015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1105824, - "inode": 524657, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1391", - "xusr": false, - "atime": 1436810539.1105824, - "isdir": false, - "ctime": 1436810539.1105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1965823, - "inode": 523453, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/187", - "xusr": false, - "atime": 1436810538.1965823, - "isdir": false, - "ctime": 1436810538.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3635824, - "inode": 526141, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2875", - "xusr": false, - "atime": 1436810540.3635824, - "isdir": false, - "ctime": 1436810540.3635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5535824, - "inode": 525173, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1907", - "xusr": false, - "atime": 1436810539.5535824, - "isdir": false, - "ctime": 1436810539.5535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1855824, - "inode": 524764, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1498", - "xusr": false, - "atime": 1436810539.1855824, - "isdir": false, - "ctime": 1436810539.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2685823, - "inode": 526016, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2750", - "xusr": false, - "atime": 1436810540.2685823, - "isdir": false, - "ctime": 1436810540.2685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6415823, - "inode": 524021, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/755", - "xusr": false, - "atime": 1436810538.6415823, - "isdir": false, - "ctime": 1436810538.6415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0215824, - "inode": 524529, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1263", - "xusr": false, - "atime": 1436810539.0215824, - "isdir": false, - "ctime": 1436810539.0215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2365823, - "inode": 524838, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1572", - "xusr": false, - "atime": 1436810539.2365823, - "isdir": false, - "ctime": 1436810539.2365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2345824, - "inode": 523505, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/239", - "xusr": false, - "atime": 1436810538.2345824, - "isdir": false, - "ctime": 1436810538.2345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7755823, - "inode": 528008, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4742", - "xusr": false, - "atime": 1436810541.7755823, - "isdir": false, - "ctime": 1436810541.7755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8095822, - "inode": 524240, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/974", - "xusr": false, - "atime": 1436810538.8095822, - "isdir": false, - "ctime": 1436810538.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2815824, - "inode": 523572, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/306", - "xusr": false, - "atime": 1436810538.2815824, - "isdir": false, - "ctime": 1436810538.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8675823, - "inode": 526800, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3534", - "xusr": false, - "atime": 1436810540.8675823, - "isdir": false, - "ctime": 1436810540.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0665822, - "inode": 525809, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2543", - "xusr": false, - "atime": 1436810540.0665822, - "isdir": false, - "ctime": 1436810540.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4955823, - "inode": 527623, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4357", - "xusr": false, - "atime": 1436810541.4955823, - "isdir": false, - "ctime": 1436810541.4955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4855824, - "inode": 525107, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1841", - "xusr": false, - "atime": 1436810539.4855824, - "isdir": false, - "ctime": 1436810539.4855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2545824, - "inode": 527334, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4068", - "xusr": false, - "atime": 1436810541.2545824, - "isdir": false, - "ctime": 1436810541.2545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2595823, - "inode": 526007, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2741", - "xusr": false, - "atime": 1436810540.2595823, - "isdir": false, - "ctime": 1436810540.2595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1825824, - "inode": 525920, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2654", - "xusr": false, - "atime": 1436810540.1825824, - "isdir": false, - "ctime": 1436810540.1825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7735822, - "inode": 524193, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/927", - "xusr": false, - "atime": 1436810538.7735822, - "isdir": false, - "ctime": 1436810538.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1635823, - "inode": 523404, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/138", - "xusr": false, - "atime": 1436810538.1635823, - "isdir": false, - "ctime": 1436810538.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6265824, - "inode": 524000, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/734", - "xusr": false, - "atime": 1436810538.6265824, - "isdir": false, - "ctime": 1436810538.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8915823, - "inode": 528167, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4901", - "xusr": false, - "atime": 1436810541.8915823, - "isdir": false, - "ctime": 1436810541.8915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4255824, - "inode": 526227, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2961", - "xusr": false, - "atime": 1436810540.4255824, - "isdir": false, - "ctime": 1436810540.4255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3725822, - "inode": 526153, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2887", - "xusr": false, - "atime": 1436810540.3725822, - "isdir": false, - "ctime": 1436810540.3725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4435823, - "inode": 527550, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4284", - "xusr": false, - "atime": 1436810541.4435823, - "isdir": false, - "ctime": 1436810541.4435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0405824, - "inode": 524556, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1290", - "xusr": false, - "atime": 1436810539.0405824, - "isdir": false, - "ctime": 1436810539.0405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3195822, - "inode": 524952, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1686", - "xusr": false, - "atime": 1436810539.3195822, - "isdir": false, - "ctime": 1436810539.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6175823, - "inode": 523988, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/722", - "xusr": false, - "atime": 1436810538.6175823, - "isdir": false, - "ctime": 1436810538.6175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8445823, - "inode": 524286, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1020", - "xusr": false, - "atime": 1436810538.8445823, - "isdir": false, - "ctime": 1436810538.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2795823, - "inode": 527370, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4104", - "xusr": false, - "atime": 1436810541.2795823, - "isdir": false, - "ctime": 1436810541.2795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5165823, - "inode": 527652, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4386", - "xusr": false, - "atime": 1436810541.5165823, - "isdir": false, - "ctime": 1436810541.5165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5335822, - "inode": 525154, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1888", - "xusr": false, - "atime": 1436810539.5335822, - "isdir": false, - "ctime": 1436810539.5335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6165824, - "inode": 526447, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3181", - "xusr": false, - "atime": 1436810540.6165824, - "isdir": false, - "ctime": 1436810540.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8975823, - "inode": 526843, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3577", - "xusr": false, - "atime": 1436810540.8975823, - "isdir": false, - "ctime": 1436810540.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8735824, - "inode": 525555, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2289", - "xusr": false, - "atime": 1436810539.8735824, - "isdir": false, - "ctime": 1436810539.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7495823, - "inode": 526634, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3368", - "xusr": false, - "atime": 1436810540.7495823, - "isdir": false, - "ctime": 1436810540.7495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7675824, - "inode": 525410, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2144", - "xusr": false, - "atime": 1436810539.7675824, - "isdir": false, - "ctime": 1436810539.7675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6405823, - "inode": 526481, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3215", - "xusr": false, - "atime": 1436810540.6405823, - "isdir": false, - "ctime": 1436810540.6405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1745822, - "inode": 527224, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3958", - "xusr": false, - "atime": 1436810541.1745822, - "isdir": false, - "ctime": 1436810541.1745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6925824, - "inode": 527894, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4628", - "xusr": false, - "atime": 1436810541.6925824, - "isdir": false, - "ctime": 1436810541.6925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7125823, - "inode": 524117, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/851", - "xusr": false, - "atime": 1436810538.7125823, - "isdir": false, - "ctime": 1436810538.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0615823, - "inode": 525804, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2538", - "xusr": false, - "atime": 1436810540.0615823, - "isdir": false, - "ctime": 1436810540.0615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2675824, - "inode": 527353, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4087", - "xusr": false, - "atime": 1436810541.2675824, - "isdir": false, - "ctime": 1436810541.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2295823, - "inode": 525976, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2710", - "xusr": false, - "atime": 1436810540.2295823, - "isdir": false, - "ctime": 1436810540.2295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8285823, - "inode": 526745, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3479", - "xusr": false, - "atime": 1436810540.8285823, - "isdir": false, - "ctime": 1436810540.8285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2885823, - "inode": 523583, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/317", - "xusr": false, - "atime": 1436810538.2885823, - "isdir": false, - "ctime": 1436810538.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6095824, - "inode": 526438, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3172", - "xusr": false, - "atime": 1436810540.6095824, - "isdir": false, - "ctime": 1436810540.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6385822, - "inode": 526478, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3212", - "xusr": false, - "atime": 1436810540.6385822, - "isdir": false, - "ctime": 1436810540.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7495823, - "inode": 525387, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2121", - "xusr": false, - "atime": 1436810539.7495823, - "isdir": false, - "ctime": 1436810539.7495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0095823, - "inode": 524513, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1247", - "xusr": false, - "atime": 1436810539.0095823, - "isdir": false, - "ctime": 1436810539.0095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9075823, - "inode": 525603, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2337", - "xusr": false, - "atime": 1436810539.9075823, - "isdir": false, - "ctime": 1436810539.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9275823, - "inode": 526885, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3619", - "xusr": false, - "atime": 1436810540.9275823, - "isdir": false, - "ctime": 1436810540.9275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1305823, - "inode": 523357, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/91", - "xusr": false, - "atime": 1436810538.1305823, - "isdir": false, - "ctime": 1436810538.1305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0285823, - "inode": 524540, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1274", - "xusr": false, - "atime": 1436810539.0285823, - "isdir": false, - "ctime": 1436810539.0285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5515823, - "inode": 523898, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/632", - "xusr": false, - "atime": 1436810538.5515823, - "isdir": false, - "ctime": 1436810538.5515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1245823, - "inode": 527156, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3890", - "xusr": false, - "atime": 1436810541.1245823, - "isdir": false, - "ctime": 1436810541.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5275824, - "inode": 523865, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/599", - "xusr": false, - "atime": 1436810538.5275824, - "isdir": false, - "ctime": 1436810538.5275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0945823, - "inode": 524634, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1368", - "xusr": false, - "atime": 1436810539.0945823, - "isdir": false, - "ctime": 1436810539.0945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4695823, - "inode": 523784, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/518", - "xusr": false, - "atime": 1436810538.4695823, - "isdir": false, - "ctime": 1436810538.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5735824, - "inode": 527730, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4464", - "xusr": false, - "atime": 1436810541.5735824, - "isdir": false, - "ctime": 1436810541.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9075823, - "inode": 524372, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1106", - "xusr": false, - "atime": 1436810538.9075823, - "isdir": false, - "ctime": 1436810538.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2785823, - "inode": 524898, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1632", - "xusr": false, - "atime": 1436810539.2785823, - "isdir": false, - "ctime": 1436810539.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8635824, - "inode": 526794, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3528", - "xusr": false, - "atime": 1436810540.8635824, - "isdir": false, - "ctime": 1436810540.8635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8105824, - "inode": 528057, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4791", - "xusr": false, - "atime": 1436810541.8105824, - "isdir": false, - "ctime": 1436810541.8105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2485824, - "inode": 524856, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1590", - "xusr": false, - "atime": 1436810539.2485824, - "isdir": false, - "ctime": 1436810539.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0155823, - "inode": 525750, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2484", - "xusr": false, - "atime": 1436810540.0155823, - "isdir": false, - "ctime": 1436810540.0155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6485822, - "inode": 526492, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3226", - "xusr": false, - "atime": 1436810540.6485822, - "isdir": false, - "ctime": 1436810540.6485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9375823, - "inode": 528232, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4966", - "xusr": false, - "atime": 1436810541.9375823, - "isdir": false, - "ctime": 1436810541.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8965824, - "inode": 528175, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4909", - "xusr": false, - "atime": 1436810541.8965824, - "isdir": false, - "ctime": 1436810541.8965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0045824, - "inode": 525734, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2468", - "xusr": false, - "atime": 1436810540.0045824, - "isdir": false, - "ctime": 1436810540.0045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3195822, - "inode": 523618, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/352", - "xusr": false, - "atime": 1436810538.3195822, - "isdir": false, - "ctime": 1436810538.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9815824, - "inode": 524474, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1208", - "xusr": false, - "atime": 1436810538.9815824, - "isdir": false, - "ctime": 1436810538.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7575824, - "inode": 526645, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3379", - "xusr": false, - "atime": 1436810540.7575824, - "isdir": false, - "ctime": 1436810540.7575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4585824, - "inode": 527571, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4305", - "xusr": false, - "atime": 1436810541.4585824, - "isdir": false, - "ctime": 1436810541.4585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3615823, - "inode": 527455, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4189", - "xusr": false, - "atime": 1436810541.3615823, - "isdir": false, - "ctime": 1436810541.3615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4265823, - "inode": 525057, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1791", - "xusr": false, - "atime": 1436810539.4265823, - "isdir": false, - "ctime": 1436810539.4265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2125823, - "inode": 524803, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1537", - "xusr": false, - "atime": 1436810539.2125823, - "isdir": false, - "ctime": 1436810539.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0155823, - "inode": 524522, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1256", - "xusr": false, - "atime": 1436810539.0155823, - "isdir": false, - "ctime": 1436810539.0155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0625823, - "inode": 525805, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2539", - "xusr": false, - "atime": 1436810540.0625823, - "isdir": false, - "ctime": 1436810540.0625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5655823, - "inode": 523916, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/650", - "xusr": false, - "atime": 1436810538.5655823, - "isdir": false, - "ctime": 1436810538.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5955822, - "inode": 527762, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4496", - "xusr": false, - "atime": 1436810541.5955822, - "isdir": false, - "ctime": 1436810541.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2465823, - "inode": 523523, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/257", - "xusr": false, - "atime": 1436810538.2465823, - "isdir": false, - "ctime": 1436810538.2465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1685822, - "inode": 527216, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3950", - "xusr": false, - "atime": 1436810541.1685822, - "isdir": false, - "ctime": 1436810541.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2245822, - "inode": 527292, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4026", - "xusr": false, - "atime": 1436810541.2245822, - "isdir": false, - "ctime": 1436810541.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0955822, - "inode": 525840, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2574", - "xusr": false, - "atime": 1436810540.0955822, - "isdir": false, - "ctime": 1436810540.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5195823, - "inode": 526319, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3053", - "xusr": false, - "atime": 1436810540.5195823, - "isdir": false, - "ctime": 1436810540.5195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3645823, - "inode": 526142, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2876", - "xusr": false, - "atime": 1436810540.3645823, - "isdir": false, - "ctime": 1436810540.3645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8565824, - "inode": 524302, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1036", - "xusr": false, - "atime": 1436810538.8565824, - "isdir": false, - "ctime": 1436810538.8565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5695822, - "inode": 527724, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4458", - "xusr": false, - "atime": 1436810541.5695822, - "isdir": false, - "ctime": 1436810541.5695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3385823, - "inode": 524970, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1704", - "xusr": false, - "atime": 1436810539.3385823, - "isdir": false, - "ctime": 1436810539.3385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0325823, - "inode": 527029, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3763", - "xusr": false, - "atime": 1436810541.0325823, - "isdir": false, - "ctime": 1436810541.0325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6245823, - "inode": 526459, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3193", - "xusr": false, - "atime": 1436810540.6245823, - "isdir": false, - "ctime": 1436810540.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3285823, - "inode": 526092, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2826", - "xusr": false, - "atime": 1436810540.3285823, - "isdir": false, - "ctime": 1436810540.3285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8865824, - "inode": 524343, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1077", - "xusr": false, - "atime": 1436810538.8865824, - "isdir": false, - "ctime": 1436810538.8865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2065823, - "inode": 523467, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/201", - "xusr": false, - "atime": 1436810538.2065823, - "isdir": false, - "ctime": 1436810538.2065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5375824, - "inode": 523878, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/612", - "xusr": false, - "atime": 1436810538.5375824, - "isdir": false, - "ctime": 1436810538.5375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4565823, - "inode": 526262, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2996", - "xusr": false, - "atime": 1436810540.4565823, - "isdir": false, - "ctime": 1436810540.4565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0535824, - "inode": 527058, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3792", - "xusr": false, - "atime": 1436810541.0535824, - "isdir": false, - "ctime": 1436810541.0535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5075824, - "inode": 525128, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1862", - "xusr": false, - "atime": 1436810539.5075824, - "isdir": false, - "ctime": 1436810539.5075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8705823, - "inode": 528138, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4872", - "xusr": false, - "atime": 1436810541.8705823, - "isdir": false, - "ctime": 1436810541.8705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8965824, - "inode": 524357, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1091", - "xusr": false, - "atime": 1436810538.8965824, - "isdir": false, - "ctime": 1436810538.8965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4375823, - "inode": 523739, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/473", - "xusr": false, - "atime": 1436810538.4375823, - "isdir": false, - "ctime": 1436810538.4375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5675824, - "inode": 527722, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4456", - "xusr": false, - "atime": 1436810541.5675824, - "isdir": false, - "ctime": 1436810541.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5905824, - "inode": 526411, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3145", - "xusr": false, - "atime": 1436810540.5905824, - "isdir": false, - "ctime": 1436810540.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2435822, - "inode": 527319, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4053", - "xusr": false, - "atime": 1436810541.2435822, - "isdir": false, - "ctime": 1436810541.2435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6955824, - "inode": 524094, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/828", - "xusr": false, - "atime": 1436810538.6955824, - "isdir": false, - "ctime": 1436810538.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4645822, - "inode": 526268, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3002", - "xusr": false, - "atime": 1436810540.4645822, - "isdir": false, - "ctime": 1436810540.4645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0095823, - "inode": 525742, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2476", - "xusr": false, - "atime": 1436810540.0095823, - "isdir": false, - "ctime": 1436810540.0095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3195822, - "inode": 524951, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1685", - "xusr": false, - "atime": 1436810539.3195822, - "isdir": false, - "ctime": 1436810539.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7295823, - "inode": 527945, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4679", - "xusr": false, - "atime": 1436810541.7295823, - "isdir": false, - "ctime": 1436810541.7295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0735824, - "inode": 525817, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2551", - "xusr": false, - "atime": 1436810540.0735824, - "isdir": false, - "ctime": 1436810540.0735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5815823, - "inode": 523938, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/672", - "xusr": false, - "atime": 1436810538.5815823, - "isdir": false, - "ctime": 1436810538.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1985824, - "inode": 524784, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1518", - "xusr": false, - "atime": 1436810539.1985824, - "isdir": false, - "ctime": 1436810539.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8315823, - "inode": 524269, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1003", - "xusr": false, - "atime": 1436810538.8315823, - "isdir": false, - "ctime": 1436810538.8315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2025824, - "inode": 527262, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3996", - "xusr": false, - "atime": 1436810541.2025824, - "isdir": false, - "ctime": 1436810541.2025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4755824, - "inode": 525095, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1829", - "xusr": false, - "atime": 1436810539.4755824, - "isdir": false, - "ctime": 1436810539.4755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9765823, - "inode": 526954, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3688", - "xusr": false, - "atime": 1436810540.9765823, - "isdir": false, - "ctime": 1436810540.9765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3785822, - "inode": 525002, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1736", - "xusr": false, - "atime": 1436810539.3785822, - "isdir": false, - "ctime": 1436810539.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5645823, - "inode": 527718, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4452", - "xusr": false, - "atime": 1436810541.5645823, - "isdir": false, - "ctime": 1436810541.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4885824, - "inode": 525109, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1843", - "xusr": false, - "atime": 1436810539.4885824, - "isdir": false, - "ctime": 1436810539.4885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2595823, - "inode": 527341, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4075", - "xusr": false, - "atime": 1436810541.2595823, - "isdir": false, - "ctime": 1436810541.2595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5935824, - "inode": 525217, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1951", - "xusr": false, - "atime": 1436810539.5935824, - "isdir": false, - "ctime": 1436810539.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2255824, - "inode": 525971, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2705", - "xusr": false, - "atime": 1436810540.2255824, - "isdir": false, - "ctime": 1436810540.2255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0945823, - "inode": 527116, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3850", - "xusr": false, - "atime": 1436810541.0945823, - "isdir": false, - "ctime": 1436810541.0945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1375823, - "inode": 527175, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3909", - "xusr": false, - "atime": 1436810541.1375823, - "isdir": false, - "ctime": 1436810541.1375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7825823, - "inode": 524204, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/938", - "xusr": false, - "atime": 1436810538.7825823, - "isdir": false, - "ctime": 1436810538.7825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4025824, - "inode": 523700, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/434", - "xusr": false, - "atime": 1436810538.4025824, - "isdir": false, - "ctime": 1436810538.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0305824, - "inode": 524542, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1276", - "xusr": false, - "atime": 1436810539.0305824, - "isdir": false, - "ctime": 1436810539.0305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2035823, - "inode": 524791, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1525", - "xusr": false, - "atime": 1436810539.2035823, - "isdir": false, - "ctime": 1436810539.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1985824, - "inode": 523455, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/189", - "xusr": false, - "atime": 1436810538.1985824, - "isdir": false, - "ctime": 1436810538.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2725823, - "inode": 527360, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4094", - "xusr": false, - "atime": 1436810541.2725823, - "isdir": false, - "ctime": 1436810541.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8975823, - "inode": 525588, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2322", - "xusr": false, - "atime": 1436810539.8975823, - "isdir": false, - "ctime": 1436810539.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5445824, - "inode": 523887, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/621", - "xusr": false, - "atime": 1436810538.5445824, - "isdir": false, - "ctime": 1436810538.5445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5525823, - "inode": 527701, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4435", - "xusr": false, - "atime": 1436810541.5525823, - "isdir": false, - "ctime": 1436810541.5525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6035824, - "inode": 525228, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1962", - "xusr": false, - "atime": 1436810539.6035824, - "isdir": false, - "ctime": 1436810539.6035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0545824, - "inode": 527060, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3794", - "xusr": false, - "atime": 1436810541.0545824, - "isdir": false, - "ctime": 1436810541.0545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2835822, - "inode": 527375, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4109", - "xusr": false, - "atime": 1436810541.2835822, - "isdir": false, - "ctime": 1436810541.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0475824, - "inode": 524566, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1300", - "xusr": false, - "atime": 1436810539.0475824, - "isdir": false, - "ctime": 1436810539.0475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4245822, - "inode": 525054, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1788", - "xusr": false, - "atime": 1436810539.4245822, - "isdir": false, - "ctime": 1436810539.4245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2425823, - "inode": 524847, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1581", - "xusr": false, - "atime": 1436810539.2425823, - "isdir": false, - "ctime": 1436810539.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7545824, - "inode": 526642, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3376", - "xusr": false, - "atime": 1436810540.7545824, - "isdir": false, - "ctime": 1436810540.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4845824, - "inode": 527608, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4342", - "xusr": false, - "atime": 1436810541.4845824, - "isdir": false, - "ctime": 1436810541.4845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2725823, - "inode": 523559, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/293", - "xusr": false, - "atime": 1436810538.2725823, - "isdir": false, - "ctime": 1436810538.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6545823, - "inode": 525291, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2025", - "xusr": false, - "atime": 1436810539.6545823, - "isdir": false, - "ctime": 1436810539.6545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8635824, - "inode": 525540, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2274", - "xusr": false, - "atime": 1436810539.8635824, - "isdir": false, - "ctime": 1436810539.8635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0945823, - "inode": 525839, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2573", - "xusr": false, - "atime": 1436810540.0945823, - "isdir": false, - "ctime": 1436810540.0945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8825824, - "inode": 524338, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1072", - "xusr": false, - "atime": 1436810538.8825824, - "isdir": false, - "ctime": 1436810538.8825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6545823, - "inode": 527841, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4575", - "xusr": false, - "atime": 1436810541.6545823, - "isdir": false, - "ctime": 1436810541.6545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2255824, - "inode": 525970, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2704", - "xusr": false, - "atime": 1436810540.2255824, - "isdir": false, - "ctime": 1436810540.2255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1055822, - "inode": 523323, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/57", - "xusr": false, - "atime": 1436810538.1055822, - "isdir": false, - "ctime": 1436810538.1055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7565823, - "inode": 525396, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2130", - "xusr": false, - "atime": 1436810539.7565823, - "isdir": false, - "ctime": 1436810539.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9605823, - "inode": 526930, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3664", - "xusr": false, - "atime": 1436810540.9605823, - "isdir": false, - "ctime": 1436810540.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0425823, - "inode": 527043, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3777", - "xusr": false, - "atime": 1436810541.0425823, - "isdir": false, - "ctime": 1436810541.0425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6915822, - "inode": 525325, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2059", - "xusr": false, - "atime": 1436810539.6915822, - "isdir": false, - "ctime": 1436810539.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2365823, - "inode": 525983, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2717", - "xusr": false, - "atime": 1436810540.2365823, - "isdir": false, - "ctime": 1436810540.2365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5965824, - "inode": 523959, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/693", - "xusr": false, - "atime": 1436810538.5965824, - "isdir": false, - "ctime": 1436810538.5965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0445824, - "inode": 524562, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1296", - "xusr": false, - "atime": 1436810539.0445824, - "isdir": false, - "ctime": 1436810539.0445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1525824, - "inode": 525891, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2625", - "xusr": false, - "atime": 1436810540.1525824, - "isdir": false, - "ctime": 1436810540.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2295823, - "inode": 527299, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4033", - "xusr": false, - "atime": 1436810541.2295823, - "isdir": false, - "ctime": 1436810541.2295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6945822, - "inode": 526557, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3291", - "xusr": false, - "atime": 1436810540.6945822, - "isdir": false, - "ctime": 1436810540.6945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7455823, - "inode": 526630, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3364", - "xusr": false, - "atime": 1436810540.7455823, - "isdir": false, - "ctime": 1436810540.7455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7675824, - "inode": 526659, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3393", - "xusr": false, - "atime": 1436810540.7675824, - "isdir": false, - "ctime": 1436810540.7675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7135823, - "inode": 524118, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/852", - "xusr": false, - "atime": 1436810538.7135823, - "isdir": false, - "ctime": 1436810538.7135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3255823, - "inode": 526088, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2822", - "xusr": false, - "atime": 1436810540.3255823, - "isdir": false, - "ctime": 1436810540.3255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6955824, - "inode": 525330, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2064", - "xusr": false, - "atime": 1436810539.6955824, - "isdir": false, - "ctime": 1436810539.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1815822, - "inode": 527232, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3966", - "xusr": false, - "atime": 1436810541.1815822, - "isdir": false, - "ctime": 1436810541.1815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1325824, - "inode": 525872, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2606", - "xusr": false, - "atime": 1436810540.1325824, - "isdir": false, - "ctime": 1436810540.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1175823, - "inode": 523339, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/73", - "xusr": false, - "atime": 1436810538.1175823, - "isdir": false, - "ctime": 1436810538.1175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4795823, - "inode": 526283, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3017", - "xusr": false, - "atime": 1436810540.4795823, - "isdir": false, - "ctime": 1436810540.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5185823, - "inode": 526318, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3052", - "xusr": false, - "atime": 1436810540.5185823, - "isdir": false, - "ctime": 1436810540.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1705823, - "inode": 523415, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/149", - "xusr": false, - "atime": 1436810538.1705823, - "isdir": false, - "ctime": 1436810538.1705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9745822, - "inode": 525692, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2426", - "xusr": false, - "atime": 1436810539.9745822, - "isdir": false, - "ctime": 1436810539.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0785823, - "inode": 523288, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/22", - "xusr": false, - "atime": 1436810538.0785823, - "isdir": false, - "ctime": 1436810538.0785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9825823, - "inode": 524476, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1210", - "xusr": false, - "atime": 1436810538.9825823, - "isdir": false, - "ctime": 1436810538.9825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7665823, - "inode": 526658, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3392", - "xusr": false, - "atime": 1436810540.7665823, - "isdir": false, - "ctime": 1436810540.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7625823, - "inode": 526652, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3386", - "xusr": false, - "atime": 1436810540.7625823, - "isdir": false, - "ctime": 1436810540.7625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5065823, - "inode": 526303, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3037", - "xusr": false, - "atime": 1436810540.5065823, - "isdir": false, - "ctime": 1436810540.5065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5725822, - "inode": 523926, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/660", - "xusr": false, - "atime": 1436810538.5725822, - "isdir": false, - "ctime": 1436810538.5725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9035823, - "inode": 526851, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3585", - "xusr": false, - "atime": 1436810540.9035823, - "isdir": false, - "ctime": 1436810540.9035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0805824, - "inode": 523291, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/25", - "xusr": false, - "atime": 1436810538.0805824, - "isdir": false, - "ctime": 1436810538.0805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0785823, - "inode": 524611, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1345", - "xusr": false, - "atime": 1436810539.0785823, - "isdir": false, - "ctime": 1436810539.0785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5985823, - "inode": 523962, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/696", - "xusr": false, - "atime": 1436810538.5985823, - "isdir": false, - "ctime": 1436810538.5985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0995822, - "inode": 525843, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2577", - "xusr": false, - "atime": 1436810540.0995822, - "isdir": false, - "ctime": 1436810540.0995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5455823, - "inode": 523889, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/623", - "xusr": false, - "atime": 1436810538.5455823, - "isdir": false, - "ctime": 1436810538.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4085822, - "inode": 525033, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1767", - "xusr": false, - "atime": 1436810539.4085822, - "isdir": false, - "ctime": 1436810539.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3765824, - "inode": 525000, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1734", - "xusr": false, - "atime": 1436810539.3765824, - "isdir": false, - "ctime": 1436810539.3765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4765823, - "inode": 526279, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3013", - "xusr": false, - "atime": 1436810540.4765823, - "isdir": false, - "ctime": 1436810540.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1255822, - "inode": 527158, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3892", - "xusr": false, - "atime": 1436810541.1255822, - "isdir": false, - "ctime": 1436810541.1255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9615824, - "inode": 524446, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1180", - "xusr": false, - "atime": 1436810538.9615824, - "isdir": false, - "ctime": 1436810538.9615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9425824, - "inode": 528238, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4972", - "xusr": false, - "atime": 1436810541.9425824, - "isdir": false, - "ctime": 1436810541.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5945823, - "inode": 525218, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1952", - "xusr": false, - "atime": 1436810539.5945823, - "isdir": false, - "ctime": 1436810539.5945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7745824, - "inode": 528007, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4741", - "xusr": false, - "atime": 1436810541.7745824, - "isdir": false, - "ctime": 1436810541.7745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3795824, - "inode": 526163, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2897", - "xusr": false, - "atime": 1436810540.3795824, - "isdir": false, - "ctime": 1436810540.3795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0135822, - "inode": 527004, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3738", - "xusr": false, - "atime": 1436810541.0135822, - "isdir": false, - "ctime": 1436810541.0135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0405824, - "inode": 524557, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1291", - "xusr": false, - "atime": 1436810539.0405824, - "isdir": false, - "ctime": 1436810539.0405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5765824, - "inode": 523931, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/665", - "xusr": false, - "atime": 1436810538.5765824, - "isdir": false, - "ctime": 1436810538.5765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1735823, - "inode": 527222, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3956", - "xusr": false, - "atime": 1436810541.1735823, - "isdir": false, - "ctime": 1436810541.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9225824, - "inode": 528210, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4944", - "xusr": false, - "atime": 1436810541.9225824, - "isdir": false, - "ctime": 1436810541.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9605823, - "inode": 524444, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1178", - "xusr": false, - "atime": 1436810538.9605823, - "isdir": false, - "ctime": 1436810538.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1765823, - "inode": 523423, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/157", - "xusr": false, - "atime": 1436810538.1765823, - "isdir": false, - "ctime": 1436810538.1765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9335823, - "inode": 526893, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3627", - "xusr": false, - "atime": 1436810540.9335823, - "isdir": false, - "ctime": 1436810540.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1445823, - "inode": 523378, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/112", - "xusr": false, - "atime": 1436810538.1445823, - "isdir": false, - "ctime": 1436810538.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0985823, - "inode": 524640, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1374", - "xusr": false, - "atime": 1436810539.0985823, - "isdir": false, - "ctime": 1436810539.0985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0045824, - "inode": 524506, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1240", - "xusr": false, - "atime": 1436810539.0045824, - "isdir": false, - "ctime": 1436810539.0045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1935823, - "inode": 525933, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2667", - "xusr": false, - "atime": 1436810540.1935823, - "isdir": false, - "ctime": 1436810540.1935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0275824, - "inode": 527021, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3755", - "xusr": false, - "atime": 1436810541.0275824, - "isdir": false, - "ctime": 1436810541.0275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0655823, - "inode": 523269, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3", - "xusr": false, - "atime": 1436810538.0655823, - "isdir": false, - "ctime": 1436810538.0655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3745823, - "inode": 524999, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1733", - "xusr": false, - "atime": 1436810539.3745823, - "isdir": false, - "ctime": 1436810539.3745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6795824, - "inode": 526536, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3270", - "xusr": false, - "atime": 1436810540.6795824, - "isdir": false, - "ctime": 1436810540.6795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3035824, - "inode": 527402, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4136", - "xusr": false, - "atime": 1436810541.3035824, - "isdir": false, - "ctime": 1436810541.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4885824, - "inode": 523811, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/545", - "xusr": false, - "atime": 1436810538.4885824, - "isdir": false, - "ctime": 1436810538.4885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5585823, - "inode": 525179, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1913", - "xusr": false, - "atime": 1436810539.5585823, - "isdir": false, - "ctime": 1436810539.5585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7835822, - "inode": 528020, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4754", - "xusr": false, - "atime": 1436810541.7835822, - "isdir": false, - "ctime": 1436810541.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3635824, - "inode": 526140, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2874", - "xusr": false, - "atime": 1436810540.3635824, - "isdir": false, - "ctime": 1436810540.3635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7205822, - "inode": 527933, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4667", - "xusr": false, - "atime": 1436810541.7205822, - "isdir": false, - "ctime": 1436810541.7205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7445824, - "inode": 526628, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3362", - "xusr": false, - "atime": 1436810540.7445824, - "isdir": false, - "ctime": 1436810540.7445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5755823, - "inode": 525202, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1936", - "xusr": false, - "atime": 1436810539.5755823, - "isdir": false, - "ctime": 1436810539.5755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9935822, - "inode": 525719, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2453", - "xusr": false, - "atime": 1436810539.9935822, - "isdir": false, - "ctime": 1436810539.9935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0795822, - "inode": 524612, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1346", - "xusr": false, - "atime": 1436810539.0795822, - "isdir": false, - "ctime": 1436810539.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9435823, - "inode": 525651, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2385", - "xusr": false, - "atime": 1436810539.9435823, - "isdir": false, - "ctime": 1436810539.9435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8715823, - "inode": 526806, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3540", - "xusr": false, - "atime": 1436810540.8715823, - "isdir": false, - "ctime": 1436810540.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5445824, - "inode": 526348, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3082", - "xusr": false, - "atime": 1436810540.5445824, - "isdir": false, - "ctime": 1436810540.5445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3605824, - "inode": 526136, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2870", - "xusr": false, - "atime": 1436810540.3605824, - "isdir": false, - "ctime": 1436810540.3605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4315822, - "inode": 526236, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2970", - "xusr": false, - "atime": 1436810540.4315822, - "isdir": false, - "ctime": 1436810540.4315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7375822, - "inode": 527956, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4690", - "xusr": false, - "atime": 1436810541.7375822, - "isdir": false, - "ctime": 1436810541.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9065824, - "inode": 524370, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1104", - "xusr": false, - "atime": 1436810538.9065824, - "isdir": false, - "ctime": 1436810538.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8425822, - "inode": 525511, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2245", - "xusr": false, - "atime": 1436810539.8425822, - "isdir": false, - "ctime": 1436810539.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7365823, - "inode": 527954, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4688", - "xusr": false, - "atime": 1436810541.7365823, - "isdir": false, - "ctime": 1436810541.7365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0665822, - "inode": 527077, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3811", - "xusr": false, - "atime": 1436810541.0665822, - "isdir": false, - "ctime": 1436810541.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3525822, - "inode": 524985, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1719", - "xusr": false, - "atime": 1436810539.3525822, - "isdir": false, - "ctime": 1436810539.3525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2705822, - "inode": 523556, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/290", - "xusr": false, - "atime": 1436810538.2705822, - "isdir": false, - "ctime": 1436810538.2705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3425822, - "inode": 526112, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2846", - "xusr": false, - "atime": 1436810540.3425822, - "isdir": false, - "ctime": 1436810540.3425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5625823, - "inode": 526373, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3107", - "xusr": false, - "atime": 1436810540.5625823, - "isdir": false, - "ctime": 1436810540.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0315824, - "inode": 524543, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1277", - "xusr": false, - "atime": 1436810539.0315824, - "isdir": false, - "ctime": 1436810539.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0355823, - "inode": 524550, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1284", - "xusr": false, - "atime": 1436810539.0355823, - "isdir": false, - "ctime": 1436810539.0355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6525824, - "inode": 525289, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2023", - "xusr": false, - "atime": 1436810539.6525824, - "isdir": false, - "ctime": 1436810539.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4135823, - "inode": 525040, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1774", - "xusr": false, - "atime": 1436810539.4135823, - "isdir": false, - "ctime": 1436810539.4135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7295823, - "inode": 524137, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/871", - "xusr": false, - "atime": 1436810538.7295823, - "isdir": false, - "ctime": 1436810538.7295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0395823, - "inode": 524555, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1289", - "xusr": false, - "atime": 1436810539.0395823, - "isdir": false, - "ctime": 1436810539.0395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2745824, - "inode": 523562, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/296", - "xusr": false, - "atime": 1436810538.2745824, - "isdir": false, - "ctime": 1436810538.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7495823, - "inode": 524163, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/897", - "xusr": false, - "atime": 1436810538.7495823, - "isdir": false, - "ctime": 1436810538.7495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4985824, - "inode": 526299, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3033", - "xusr": false, - "atime": 1436810540.4985824, - "isdir": false, - "ctime": 1436810540.4985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2905824, - "inode": 523585, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/319", - "xusr": false, - "atime": 1436810538.2905824, - "isdir": false, - "ctime": 1436810538.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3375823, - "inode": 523636, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/370", - "xusr": false, - "atime": 1436810538.3375823, - "isdir": false, - "ctime": 1436810538.3375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1325824, - "inode": 527168, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3902", - "xusr": false, - "atime": 1436810541.1325824, - "isdir": false, - "ctime": 1436810541.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5065823, - "inode": 527638, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4372", - "xusr": false, - "atime": 1436810541.5065823, - "isdir": false, - "ctime": 1436810541.5065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0885823, - "inode": 527108, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3842", - "xusr": false, - "atime": 1436810541.0885823, - "isdir": false, - "ctime": 1436810541.0885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9695823, - "inode": 526944, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3678", - "xusr": false, - "atime": 1436810540.9695823, - "isdir": false, - "ctime": 1436810540.9695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7265823, - "inode": 524133, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/867", - "xusr": false, - "atime": 1436810538.7265823, - "isdir": false, - "ctime": 1436810538.7265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8045824, - "inode": 525457, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2191", - "xusr": false, - "atime": 1436810539.8045824, - "isdir": false, - "ctime": 1436810539.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0555823, - "inode": 524578, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1312", - "xusr": false, - "atime": 1436810539.0555823, - "isdir": false, - "ctime": 1436810539.0555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6935823, - "inode": 527895, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4629", - "xusr": false, - "atime": 1436810541.6935823, - "isdir": false, - "ctime": 1436810541.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3505824, - "inode": 523650, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/384", - "xusr": false, - "atime": 1436810538.3505824, - "isdir": false, - "ctime": 1436810538.3505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9315822, - "inode": 524405, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1139", - "xusr": false, - "atime": 1436810538.9315822, - "isdir": false, - "ctime": 1436810538.9315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9975822, - "inode": 525725, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2459", - "xusr": false, - "atime": 1436810539.9975822, - "isdir": false, - "ctime": 1436810539.9975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0145824, - "inode": 525749, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2483", - "xusr": false, - "atime": 1436810540.0145824, - "isdir": false, - "ctime": 1436810540.0145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3905823, - "inode": 527481, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4215", - "xusr": false, - "atime": 1436810541.3905823, - "isdir": false, - "ctime": 1436810541.3905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4105823, - "inode": 523710, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/444", - "xusr": false, - "atime": 1436810538.4105823, - "isdir": false, - "ctime": 1436810538.4105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5635824, - "inode": 527716, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4450", - "xusr": false, - "atime": 1436810541.5635824, - "isdir": false, - "ctime": 1436810541.5635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6085823, - "inode": 527779, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4513", - "xusr": false, - "atime": 1436810541.6085823, - "isdir": false, - "ctime": 1436810541.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6185822, - "inode": 523989, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/723", - "xusr": false, - "atime": 1436810538.6185822, - "isdir": false, - "ctime": 1436810538.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0515823, - "inode": 527056, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3790", - "xusr": false, - "atime": 1436810541.0515823, - "isdir": false, - "ctime": 1436810541.0515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1595824, - "inode": 524728, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1462", - "xusr": false, - "atime": 1436810539.1595824, - "isdir": false, - "ctime": 1436810539.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1135824, - "inode": 523333, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/67", - "xusr": false, - "atime": 1436810538.1135824, - "isdir": false, - "ctime": 1436810538.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6255822, - "inode": 523999, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/733", - "xusr": false, - "atime": 1436810538.6255822, - "isdir": false, - "ctime": 1436810538.6255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9965823, - "inode": 524495, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1229", - "xusr": false, - "atime": 1436810538.9965823, - "isdir": false, - "ctime": 1436810538.9965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1605823, - "inode": 524729, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1463", - "xusr": false, - "atime": 1436810539.1605823, - "isdir": false, - "ctime": 1436810539.1605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4505823, - "inode": 523758, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/492", - "xusr": false, - "atime": 1436810538.4505823, - "isdir": false, - "ctime": 1436810538.4505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1095824, - "inode": 524655, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1389", - "xusr": false, - "atime": 1436810539.1095824, - "isdir": false, - "ctime": 1436810539.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7475822, - "inode": 525385, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2119", - "xusr": false, - "atime": 1436810539.7475822, - "isdir": false, - "ctime": 1436810539.7475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2455823, - "inode": 523521, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/255", - "xusr": false, - "atime": 1436810538.2455823, - "isdir": false, - "ctime": 1436810538.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5245824, - "inode": 526322, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3056", - "xusr": false, - "atime": 1436810540.5245824, - "isdir": false, - "ctime": 1436810540.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1705823, - "inode": 523414, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/148", - "xusr": false, - "atime": 1436810538.1705823, - "isdir": false, - "ctime": 1436810538.1705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4845824, - "inode": 523806, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/540", - "xusr": false, - "atime": 1436810538.4845824, - "isdir": false, - "ctime": 1436810538.4845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0385823, - "inode": 524554, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1288", - "xusr": false, - "atime": 1436810539.0385823, - "isdir": false, - "ctime": 1436810539.0385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4005823, - "inode": 527493, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4227", - "xusr": false, - "atime": 1436810541.4005823, - "isdir": false, - "ctime": 1436810541.4005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3145823, - "inode": 527414, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4148", - "xusr": false, - "atime": 1436810541.3145823, - "isdir": false, - "ctime": 1436810541.3145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4935822, - "inode": 526293, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3027", - "xusr": false, - "atime": 1436810540.4935822, - "isdir": false, - "ctime": 1436810540.4935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7925823, - "inode": 526695, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3429", - "xusr": false, - "atime": 1436810540.7925823, - "isdir": false, - "ctime": 1436810540.7925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6145823, - "inode": 526446, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3180", - "xusr": false, - "atime": 1436810540.6145823, - "isdir": false, - "ctime": 1436810540.6145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2475822, - "inode": 525993, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2727", - "xusr": false, - "atime": 1436810540.2475822, - "isdir": false, - "ctime": 1436810540.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0515823, - "inode": 527055, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3789", - "xusr": false, - "atime": 1436810541.0515823, - "isdir": false, - "ctime": 1436810541.0515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1695824, - "inode": 527218, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3952", - "xusr": false, - "atime": 1436810541.1695824, - "isdir": false, - "ctime": 1436810541.1695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0765824, - "inode": 524609, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1343", - "xusr": false, - "atime": 1436810539.0765824, - "isdir": false, - "ctime": 1436810539.0765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8595824, - "inode": 528122, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4856", - "xusr": false, - "atime": 1436810541.8595824, - "isdir": false, - "ctime": 1436810541.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2575824, - "inode": 527338, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4072", - "xusr": false, - "atime": 1436810541.2575824, - "isdir": false, - "ctime": 1436810541.2575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4335823, - "inode": 527537, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4271", - "xusr": false, - "atime": 1436810541.4335823, - "isdir": false, - "ctime": 1436810541.4335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7945824, - "inode": 528035, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4769", - "xusr": false, - "atime": 1436810541.7945824, - "isdir": false, - "ctime": 1436810541.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9095824, - "inode": 526859, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3593", - "xusr": false, - "atime": 1436810540.9095824, - "isdir": false, - "ctime": 1436810540.9095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6315823, - "inode": 525265, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1999", - "xusr": false, - "atime": 1436810539.6315823, - "isdir": false, - "ctime": 1436810539.6315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2725823, - "inode": 523560, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/294", - "xusr": false, - "atime": 1436810538.2725823, - "isdir": false, - "ctime": 1436810538.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8045824, - "inode": 528048, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4782", - "xusr": false, - "atime": 1436810541.8045824, - "isdir": false, - "ctime": 1436810541.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3955822, - "inode": 523689, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/423", - "xusr": false, - "atime": 1436810538.3955822, - "isdir": false, - "ctime": 1436810538.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1475823, - "inode": 524710, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1444", - "xusr": false, - "atime": 1436810539.1475823, - "isdir": false, - "ctime": 1436810539.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1945822, - "inode": 527250, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3984", - "xusr": false, - "atime": 1436810541.1945822, - "isdir": false, - "ctime": 1436810541.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4025824, - "inode": 526195, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2929", - "xusr": false, - "atime": 1436810540.4025824, - "isdir": false, - "ctime": 1436810540.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9315822, - "inode": 525634, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2368", - "xusr": false, - "atime": 1436810539.9315822, - "isdir": false, - "ctime": 1436810539.9315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8815823, - "inode": 528153, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4887", - "xusr": false, - "atime": 1436810541.8815823, - "isdir": false, - "ctime": 1436810541.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3475823, - "inode": 524978, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1712", - "xusr": false, - "atime": 1436810539.3475823, - "isdir": false, - "ctime": 1436810539.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6295824, - "inode": 525263, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1997", - "xusr": false, - "atime": 1436810539.6295824, - "isdir": false, - "ctime": 1436810539.6295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8165822, - "inode": 526729, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3463", - "xusr": false, - "atime": 1436810540.8165822, - "isdir": false, - "ctime": 1436810540.8165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7975824, - "inode": 524223, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/957", - "xusr": false, - "atime": 1436810538.7975824, - "isdir": false, - "ctime": 1436810538.7975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8735824, - "inode": 524325, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1059", - "xusr": false, - "atime": 1436810538.8735824, - "isdir": false, - "ctime": 1436810538.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8425822, - "inode": 528100, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4834", - "xusr": false, - "atime": 1436810541.8425822, - "isdir": false, - "ctime": 1436810541.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5685823, - "inode": 525193, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1927", - "xusr": false, - "atime": 1436810539.5685823, - "isdir": false, - "ctime": 1436810539.5685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8335824, - "inode": 528088, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4822", - "xusr": false, - "atime": 1436810541.8335824, - "isdir": false, - "ctime": 1436810541.8335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1175823, - "inode": 524668, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1402", - "xusr": false, - "atime": 1436810539.1175823, - "isdir": false, - "ctime": 1436810539.1175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0195823, - "inode": 525755, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2489", - "xusr": false, - "atime": 1436810540.0195823, - "isdir": false, - "ctime": 1436810540.0195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3915823, - "inode": 523684, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/418", - "xusr": false, - "atime": 1436810538.3915823, - "isdir": false, - "ctime": 1436810538.3915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5955822, - "inode": 526418, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3152", - "xusr": false, - "atime": 1436810540.5955822, - "isdir": false, - "ctime": 1436810540.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2355824, - "inode": 524836, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1570", - "xusr": false, - "atime": 1436810539.2355824, - "isdir": false, - "ctime": 1436810539.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3015823, - "inode": 524931, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1665", - "xusr": false, - "atime": 1436810539.3015823, - "isdir": false, - "ctime": 1436810539.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1615822, - "inode": 525901, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2635", - "xusr": false, - "atime": 1436810540.1615822, - "isdir": false, - "ctime": 1436810540.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2375822, - "inode": 523510, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/244", - "xusr": false, - "atime": 1436810538.2375822, - "isdir": false, - "ctime": 1436810538.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6075823, - "inode": 527778, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4512", - "xusr": false, - "atime": 1436810541.6075823, - "isdir": false, - "ctime": 1436810541.6075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0055823, - "inode": 524507, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1241", - "xusr": false, - "atime": 1436810539.0055823, - "isdir": false, - "ctime": 1436810539.0055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8465824, - "inode": 525516, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2250", - "xusr": false, - "atime": 1436810539.8465824, - "isdir": false, - "ctime": 1436810539.8465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9605823, - "inode": 524445, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1179", - "xusr": false, - "atime": 1436810538.9605823, - "isdir": false, - "ctime": 1436810538.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7385824, - "inode": 524148, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/882", - "xusr": false, - "atime": 1436810538.7385824, - "isdir": false, - "ctime": 1436810538.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5925822, - "inode": 527757, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4491", - "xusr": false, - "atime": 1436810541.5925822, - "isdir": false, - "ctime": 1436810541.5925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5165823, - "inode": 525135, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1869", - "xusr": false, - "atime": 1436810539.5165823, - "isdir": false, - "ctime": 1436810539.5165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4445822, - "inode": 525064, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1798", - "xusr": false, - "atime": 1436810539.4445822, - "isdir": false, - "ctime": 1436810539.4445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0485823, - "inode": 527051, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3785", - "xusr": false, - "atime": 1436810541.0485823, - "isdir": false, - "ctime": 1436810541.0485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6365824, - "inode": 525272, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2006", - "xusr": false, - "atime": 1436810539.6365824, - "isdir": false, - "ctime": 1436810539.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9145823, - "inode": 528200, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4934", - "xusr": false, - "atime": 1436810541.9145823, - "isdir": false, - "ctime": 1436810541.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4825823, - "inode": 525104, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1838", - "xusr": false, - "atime": 1436810539.4825823, - "isdir": false, - "ctime": 1436810539.4825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6435823, - "inode": 524023, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/757", - "xusr": false, - "atime": 1436810538.6435823, - "isdir": false, - "ctime": 1436810538.6435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5285823, - "inode": 527667, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4401", - "xusr": false, - "atime": 1436810541.5285823, - "isdir": false, - "ctime": 1436810541.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1555824, - "inode": 523394, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/128", - "xusr": false, - "atime": 1436810538.1555824, - "isdir": false, - "ctime": 1436810538.1555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1635823, - "inode": 523405, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/139", - "xusr": false, - "atime": 1436810538.1635823, - "isdir": false, - "ctime": 1436810538.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5285823, - "inode": 525149, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1883", - "xusr": false, - "atime": 1436810539.5285823, - "isdir": false, - "ctime": 1436810539.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7905824, - "inode": 525442, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2176", - "xusr": false, - "atime": 1436810539.7905824, - "isdir": false, - "ctime": 1436810539.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9365823, - "inode": 525641, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2375", - "xusr": false, - "atime": 1436810539.9365823, - "isdir": false, - "ctime": 1436810539.9365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9335823, - "inode": 524408, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1142", - "xusr": false, - "atime": 1436810538.9335823, - "isdir": false, - "ctime": 1436810538.9335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1765823, - "inode": 524752, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1486", - "xusr": false, - "atime": 1436810539.1765823, - "isdir": false, - "ctime": 1436810539.1765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1665823, - "inode": 527214, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3948", - "xusr": false, - "atime": 1436810541.1665823, - "isdir": false, - "ctime": 1436810541.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8325822, - "inode": 524270, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1004", - "xusr": false, - "atime": 1436810538.8325822, - "isdir": false, - "ctime": 1436810538.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6055822, - "inode": 527776, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4510", - "xusr": false, - "atime": 1436810541.6055822, - "isdir": false, - "ctime": 1436810541.6055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8785822, - "inode": 526816, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3550", - "xusr": false, - "atime": 1436810540.8785822, - "isdir": false, - "ctime": 1436810540.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6045823, - "inode": 523970, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/704", - "xusr": false, - "atime": 1436810538.6045823, - "isdir": false, - "ctime": 1436810538.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1415823, - "inode": 523374, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/108", - "xusr": false, - "atime": 1436810538.1415823, - "isdir": false, - "ctime": 1436810538.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3015823, - "inode": 526055, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2789", - "xusr": false, - "atime": 1436810540.3015823, - "isdir": false, - "ctime": 1436810540.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8185823, - "inode": 526732, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3466", - "xusr": false, - "atime": 1436810540.8185823, - "isdir": false, - "ctime": 1436810540.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4505823, - "inode": 525069, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1803", - "xusr": false, - "atime": 1436810539.4505823, - "isdir": false, - "ctime": 1436810539.4505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2305822, - "inode": 525977, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2711", - "xusr": false, - "atime": 1436810540.2305822, - "isdir": false, - "ctime": 1436810540.2305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9565823, - "inode": 524439, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1173", - "xusr": false, - "atime": 1436810538.9565823, - "isdir": false, - "ctime": 1436810538.9565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0875823, - "inode": 525830, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2564", - "xusr": false, - "atime": 1436810540.0875823, - "isdir": false, - "ctime": 1436810540.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0675824, - "inode": 527078, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3812", - "xusr": false, - "atime": 1436810541.0675824, - "isdir": false, - "ctime": 1436810541.0675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2715824, - "inode": 526020, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2754", - "xusr": false, - "atime": 1436810540.2715824, - "isdir": false, - "ctime": 1436810540.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4295824, - "inode": 525061, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1795", - "xusr": false, - "atime": 1436810539.4295824, - "isdir": false, - "ctime": 1436810539.4295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4685824, - "inode": 526273, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3007", - "xusr": false, - "atime": 1436810540.4685824, - "isdir": false, - "ctime": 1436810540.4685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2975824, - "inode": 524925, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1659", - "xusr": false, - "atime": 1436810539.2975824, - "isdir": false, - "ctime": 1436810539.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1345823, - "inode": 524692, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1426", - "xusr": false, - "atime": 1436810539.1345823, - "isdir": false, - "ctime": 1436810539.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9425824, - "inode": 525649, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2383", - "xusr": false, - "atime": 1436810539.9425824, - "isdir": false, - "ctime": 1436810539.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2085824, - "inode": 525949, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2683", - "xusr": false, - "atime": 1436810540.2085824, - "isdir": false, - "ctime": 1436810540.2085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8435824, - "inode": 525512, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2246", - "xusr": false, - "atime": 1436810539.8435824, - "isdir": false, - "ctime": 1436810539.8435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7905824, - "inode": 526691, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3425", - "xusr": false, - "atime": 1436810540.7905824, - "isdir": false, - "ctime": 1436810540.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9415822, - "inode": 525648, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2382", - "xusr": false, - "atime": 1436810539.9415822, - "isdir": false, - "ctime": 1436810539.9415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3505824, - "inode": 526122, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2856", - "xusr": false, - "atime": 1436810540.3505824, - "isdir": false, - "ctime": 1436810540.3505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1505823, - "inode": 523387, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/121", - "xusr": false, - "atime": 1436810538.1505823, - "isdir": false, - "ctime": 1436810538.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2835822, - "inode": 527376, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4110", - "xusr": false, - "atime": 1436810541.2835822, - "isdir": false, - "ctime": 1436810541.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8565824, - "inode": 524303, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1037", - "xusr": false, - "atime": 1436810538.8565824, - "isdir": false, - "ctime": 1436810538.8565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8105824, - "inode": 525465, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2199", - "xusr": false, - "atime": 1436810539.8105824, - "isdir": false, - "ctime": 1436810539.8105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9575822, - "inode": 525669, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2403", - "xusr": false, - "atime": 1436810539.9575822, - "isdir": false, - "ctime": 1436810539.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9845824, - "inode": 524479, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1213", - "xusr": false, - "atime": 1436810538.9845824, - "isdir": false, - "ctime": 1436810538.9845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4455824, - "inode": 525065, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1799", - "xusr": false, - "atime": 1436810539.4455824, - "isdir": false, - "ctime": 1436810539.4455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1615822, - "inode": 527208, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3942", - "xusr": false, - "atime": 1436810541.1615822, - "isdir": false, - "ctime": 1436810541.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1585822, - "inode": 523397, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/131", - "xusr": false, - "atime": 1436810538.1585822, - "isdir": false, - "ctime": 1436810538.1585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9645822, - "inode": 525679, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2413", - "xusr": false, - "atime": 1436810539.9645822, - "isdir": false, - "ctime": 1436810539.9645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2425823, - "inode": 523517, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/251", - "xusr": false, - "atime": 1436810538.2425823, - "isdir": false, - "ctime": 1436810538.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1525824, - "inode": 524717, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1451", - "xusr": false, - "atime": 1436810539.1525824, - "isdir": false, - "ctime": 1436810539.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1525824, - "inode": 527195, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3929", - "xusr": false, - "atime": 1436810541.1525824, - "isdir": false, - "ctime": 1436810541.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5425823, - "inode": 527687, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4421", - "xusr": false, - "atime": 1436810541.5425823, - "isdir": false, - "ctime": 1436810541.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6995823, - "inode": 525335, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2069", - "xusr": false, - "atime": 1436810539.6995823, - "isdir": false, - "ctime": 1436810539.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7735822, - "inode": 525419, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2153", - "xusr": false, - "atime": 1436810539.7735822, - "isdir": false, - "ctime": 1436810539.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6025822, - "inode": 527771, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4505", - "xusr": false, - "atime": 1436810541.6025822, - "isdir": false, - "ctime": 1436810541.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9355824, - "inode": 524410, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1144", - "xusr": false, - "atime": 1436810538.9355824, - "isdir": false, - "ctime": 1436810538.9355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8945823, - "inode": 525584, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2318", - "xusr": false, - "atime": 1436810539.8945823, - "isdir": false, - "ctime": 1436810539.8945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3885822, - "inode": 526176, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2910", - "xusr": false, - "atime": 1436810540.3885822, - "isdir": false, - "ctime": 1436810540.3885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6355822, - "inode": 524012, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/746", - "xusr": false, - "atime": 1436810538.6355822, - "isdir": false, - "ctime": 1436810538.6355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1015823, - "inode": 525845, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2579", - "xusr": false, - "atime": 1436810540.1015823, - "isdir": false, - "ctime": 1436810540.1015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7135823, - "inode": 527923, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4657", - "xusr": false, - "atime": 1436810541.7135823, - "isdir": false, - "ctime": 1436810541.7135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7615824, - "inode": 525402, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2136", - "xusr": false, - "atime": 1436810539.7615824, - "isdir": false, - "ctime": 1436810539.7615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9105823, - "inode": 528194, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4928", - "xusr": false, - "atime": 1436810541.9105823, - "isdir": false, - "ctime": 1436810541.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8195822, - "inode": 528069, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4803", - "xusr": false, - "atime": 1436810541.8195822, - "isdir": false, - "ctime": 1436810541.8195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6315823, - "inode": 524007, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/741", - "xusr": false, - "atime": 1436810538.6315823, - "isdir": false, - "ctime": 1436810538.6315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1195824, - "inode": 525859, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2593", - "xusr": false, - "atime": 1436810540.1195824, - "isdir": false, - "ctime": 1436810540.1195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1595824, - "inode": 524727, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1461", - "xusr": false, - "atime": 1436810539.1595824, - "isdir": false, - "ctime": 1436810539.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7575824, - "inode": 526646, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3380", - "xusr": false, - "atime": 1436810540.7575824, - "isdir": false, - "ctime": 1436810540.7575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4685824, - "inode": 525086, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1820", - "xusr": false, - "atime": 1436810539.4685824, - "isdir": false, - "ctime": 1436810539.4685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4885824, - "inode": 527614, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4348", - "xusr": false, - "atime": 1436810541.4885824, - "isdir": false, - "ctime": 1436810541.4885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9045823, - "inode": 524367, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1101", - "xusr": false, - "atime": 1436810538.9045823, - "isdir": false, - "ctime": 1436810538.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5185823, - "inode": 526317, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3051", - "xusr": false, - "atime": 1436810540.5185823, - "isdir": false, - "ctime": 1436810540.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6195824, - "inode": 523990, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/724", - "xusr": false, - "atime": 1436810538.6195824, - "isdir": false, - "ctime": 1436810538.6195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7445824, - "inode": 524156, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/890", - "xusr": false, - "atime": 1436810538.7445824, - "isdir": false, - "ctime": 1436810538.7445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2805824, - "inode": 527371, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4105", - "xusr": false, - "atime": 1436810541.2805824, - "isdir": false, - "ctime": 1436810541.2805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7255824, - "inode": 527939, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4673", - "xusr": false, - "atime": 1436810541.7255824, - "isdir": false, - "ctime": 1436810541.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5715823, - "inode": 523925, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/659", - "xusr": false, - "atime": 1436810538.5715823, - "isdir": false, - "ctime": 1436810538.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3415823, - "inode": 526110, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2844", - "xusr": false, - "atime": 1436810540.3415823, - "isdir": false, - "ctime": 1436810540.3415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2655823, - "inode": 523549, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/283", - "xusr": false, - "atime": 1436810538.2655823, - "isdir": false, - "ctime": 1436810538.2655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3045824, - "inode": 524935, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1669", - "xusr": false, - "atime": 1436810539.3045824, - "isdir": false, - "ctime": 1436810539.3045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6345823, - "inode": 524011, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/745", - "xusr": false, - "atime": 1436810538.6345823, - "isdir": false, - "ctime": 1436810538.6345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4955823, - "inode": 525116, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1850", - "xusr": false, - "atime": 1436810539.4955823, - "isdir": false, - "ctime": 1436810539.4955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5825822, - "inode": 525208, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1942", - "xusr": false, - "atime": 1436810539.5825822, - "isdir": false, - "ctime": 1436810539.5825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1085823, - "inode": 527135, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3869", - "xusr": false, - "atime": 1436810541.1085823, - "isdir": false, - "ctime": 1436810541.1085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2295823, - "inode": 523499, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/233", - "xusr": false, - "atime": 1436810538.2295823, - "isdir": false, - "ctime": 1436810538.2295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2215824, - "inode": 524817, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1551", - "xusr": false, - "atime": 1436810539.2215824, - "isdir": false, - "ctime": 1436810539.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4275823, - "inode": 527529, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4263", - "xusr": false, - "atime": 1436810541.4275823, - "isdir": false, - "ctime": 1436810541.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9095824, - "inode": 524375, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1109", - "xusr": false, - "atime": 1436810538.9095824, - "isdir": false, - "ctime": 1436810538.9095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3785822, - "inode": 523671, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/405", - "xusr": false, - "atime": 1436810538.3785822, - "isdir": false, - "ctime": 1436810538.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1045823, - "inode": 527130, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3864", - "xusr": false, - "atime": 1436810541.1045823, - "isdir": false, - "ctime": 1436810541.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1765823, - "inode": 527226, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3960", - "xusr": false, - "atime": 1436810541.1765823, - "isdir": false, - "ctime": 1436810541.1765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1095824, - "inode": 523328, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/62", - "xusr": false, - "atime": 1436810538.1095824, - "isdir": false, - "ctime": 1436810538.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1265824, - "inode": 527159, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3893", - "xusr": false, - "atime": 1436810541.1265824, - "isdir": false, - "ctime": 1436810541.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5835824, - "inode": 526402, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3136", - "xusr": false, - "atime": 1436810540.5835824, - "isdir": false, - "ctime": 1436810540.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8835824, - "inode": 525568, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2302", - "xusr": false, - "atime": 1436810539.8835824, - "isdir": false, - "ctime": 1436810539.8835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4005823, - "inode": 526193, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2927", - "xusr": false, - "atime": 1436810540.4005823, - "isdir": false, - "ctime": 1436810540.4005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0835824, - "inode": 523295, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/29", - "xusr": false, - "atime": 1436810538.0835824, - "isdir": false, - "ctime": 1436810538.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8905823, - "inode": 524348, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1082", - "xusr": false, - "atime": 1436810538.8905823, - "isdir": false, - "ctime": 1436810538.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2285824, - "inode": 523498, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/232", - "xusr": false, - "atime": 1436810538.2285824, - "isdir": false, - "ctime": 1436810538.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9345822, - "inode": 525638, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2372", - "xusr": false, - "atime": 1436810539.9345822, - "isdir": false, - "ctime": 1436810539.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2945824, - "inode": 526045, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2779", - "xusr": false, - "atime": 1436810540.2945824, - "isdir": false, - "ctime": 1436810540.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5495822, - "inode": 526355, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3089", - "xusr": false, - "atime": 1436810540.5495822, - "isdir": false, - "ctime": 1436810540.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9985824, - "inode": 524497, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1231", - "xusr": false, - "atime": 1436810538.9985824, - "isdir": false, - "ctime": 1436810538.9985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5285823, - "inode": 523866, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/600", - "xusr": false, - "atime": 1436810538.5285823, - "isdir": false, - "ctime": 1436810538.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4425824, - "inode": 523746, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/480", - "xusr": false, - "atime": 1436810538.4425824, - "isdir": false, - "ctime": 1436810538.4425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4945824, - "inode": 523819, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/553", - "xusr": false, - "atime": 1436810538.4945824, - "isdir": false, - "ctime": 1436810538.4945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0955822, - "inode": 523310, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/44", - "xusr": false, - "atime": 1436810538.0955822, - "isdir": false, - "ctime": 1436810538.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1245823, - "inode": 523349, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/83", - "xusr": false, - "atime": 1436810538.1245823, - "isdir": false, - "ctime": 1436810538.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1145823, - "inode": 525855, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2589", - "xusr": false, - "atime": 1436810540.1145823, - "isdir": false, - "ctime": 1436810540.1145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9275823, - "inode": 525629, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2363", - "xusr": false, - "atime": 1436810539.9275823, - "isdir": false, - "ctime": 1436810539.9275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8385823, - "inode": 526759, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3493", - "xusr": false, - "atime": 1436810540.8385823, - "isdir": false, - "ctime": 1436810540.8385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4735823, - "inode": 527592, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4326", - "xusr": false, - "atime": 1436810541.4735823, - "isdir": false, - "ctime": 1436810541.4735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9145823, - "inode": 524382, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1116", - "xusr": false, - "atime": 1436810538.9145823, - "isdir": false, - "ctime": 1436810538.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2465823, - "inode": 524852, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1586", - "xusr": false, - "atime": 1436810539.2465823, - "isdir": false, - "ctime": 1436810539.2465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7715824, - "inode": 524190, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/924", - "xusr": false, - "atime": 1436810538.7715824, - "isdir": false, - "ctime": 1436810538.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6785824, - "inode": 526535, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3269", - "xusr": false, - "atime": 1436810540.6785824, - "isdir": false, - "ctime": 1436810540.6785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2185824, - "inode": 523483, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/217", - "xusr": false, - "atime": 1436810538.2185824, - "isdir": false, - "ctime": 1436810538.2185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8545823, - "inode": 526782, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3516", - "xusr": false, - "atime": 1436810540.8545823, - "isdir": false, - "ctime": 1436810540.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6685822, - "inode": 525305, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2039", - "xusr": false, - "atime": 1436810539.6685822, - "isdir": false, - "ctime": 1436810539.6685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2405822, - "inode": 525986, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2720", - "xusr": false, - "atime": 1436810540.2405822, - "isdir": false, - "ctime": 1436810540.2405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8955822, - "inode": 528174, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4908", - "xusr": false, - "atime": 1436810541.8955822, - "isdir": false, - "ctime": 1436810541.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6335824, - "inode": 525268, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2002", - "xusr": false, - "atime": 1436810539.6335824, - "isdir": false, - "ctime": 1436810539.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8675823, - "inode": 525546, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2280", - "xusr": false, - "atime": 1436810539.8675823, - "isdir": false, - "ctime": 1436810539.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8725822, - "inode": 524324, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1058", - "xusr": false, - "atime": 1436810538.8725822, - "isdir": false, - "ctime": 1436810538.8725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6735823, - "inode": 524064, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/798", - "xusr": false, - "atime": 1436810538.6735823, - "isdir": false, - "ctime": 1436810538.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3055823, - "inode": 523605, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/339", - "xusr": false, - "atime": 1436810538.3055823, - "isdir": false, - "ctime": 1436810538.3055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1265824, - "inode": 524680, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1414", - "xusr": false, - "atime": 1436810539.1265824, - "isdir": false, - "ctime": 1436810539.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9145823, - "inode": 526866, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3600", - "xusr": false, - "atime": 1436810540.9145823, - "isdir": false, - "ctime": 1436810540.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2005823, - "inode": 527259, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3993", - "xusr": false, - "atime": 1436810541.2005823, - "isdir": false, - "ctime": 1436810541.2005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7285824, - "inode": 527943, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4677", - "xusr": false, - "atime": 1436810541.7285824, - "isdir": false, - "ctime": 1436810541.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2865822, - "inode": 523580, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/314", - "xusr": false, - "atime": 1436810538.2865822, - "isdir": false, - "ctime": 1436810538.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9515822, - "inode": 526918, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3652", - "xusr": false, - "atime": 1436810540.9515822, - "isdir": false, - "ctime": 1436810540.9515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9545822, - "inode": 526922, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3656", - "xusr": false, - "atime": 1436810540.9545822, - "isdir": false, - "ctime": 1436810540.9545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1065824, - "inode": 524652, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1386", - "xusr": false, - "atime": 1436810539.1065824, - "isdir": false, - "ctime": 1436810539.1065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1055822, - "inode": 524650, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1384", - "xusr": false, - "atime": 1436810539.1055822, - "isdir": false, - "ctime": 1436810539.1055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5555823, - "inode": 526362, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3096", - "xusr": false, - "atime": 1436810540.5555823, - "isdir": false, - "ctime": 1436810540.5555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2415824, - "inode": 523515, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/249", - "xusr": false, - "atime": 1436810538.2415824, - "isdir": false, - "ctime": 1436810538.2415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7025824, - "inode": 525339, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2073", - "xusr": false, - "atime": 1436810539.7025824, - "isdir": false, - "ctime": 1436810539.7025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7115824, - "inode": 526581, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3315", - "xusr": false, - "atime": 1436810540.7115824, - "isdir": false, - "ctime": 1436810540.7115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9185822, - "inode": 524388, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1122", - "xusr": false, - "atime": 1436810538.9185822, - "isdir": false, - "ctime": 1436810538.9185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1365824, - "inode": 525876, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2610", - "xusr": false, - "atime": 1436810540.1365824, - "isdir": false, - "ctime": 1436810540.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2955823, - "inode": 524923, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1657", - "xusr": false, - "atime": 1436810539.2955823, - "isdir": false, - "ctime": 1436810539.2955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7265823, - "inode": 527940, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4674", - "xusr": false, - "atime": 1436810541.7265823, - "isdir": false, - "ctime": 1436810541.7265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4165823, - "inode": 526215, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2949", - "xusr": false, - "atime": 1436810540.4165823, - "isdir": false, - "ctime": 1436810540.4165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4875822, - "inode": 523810, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/544", - "xusr": false, - "atime": 1436810538.4875822, - "isdir": false, - "ctime": 1436810538.4875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6085823, - "inode": 527780, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4514", - "xusr": false, - "atime": 1436810541.6085823, - "isdir": false, - "ctime": 1436810541.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7195823, - "inode": 527931, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4665", - "xusr": false, - "atime": 1436810541.7195823, - "isdir": false, - "ctime": 1436810541.7195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9775822, - "inode": 526955, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3689", - "xusr": false, - "atime": 1436810540.9775822, - "isdir": false, - "ctime": 1436810540.9775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2585824, - "inode": 524869, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1603", - "xusr": false, - "atime": 1436810539.2585824, - "isdir": false, - "ctime": 1436810539.2585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9405823, - "inode": 525647, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2381", - "xusr": false, - "atime": 1436810539.9405823, - "isdir": false, - "ctime": 1436810539.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5305824, - "inode": 523869, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/603", - "xusr": false, - "atime": 1436810538.5305824, - "isdir": false, - "ctime": 1436810538.5305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8135824, - "inode": 528061, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4795", - "xusr": false, - "atime": 1436810541.8135824, - "isdir": false, - "ctime": 1436810541.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5625823, - "inode": 527715, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4449", - "xusr": false, - "atime": 1436810541.5625823, - "isdir": false, - "ctime": 1436810541.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3065822, - "inode": 526061, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2795", - "xusr": false, - "atime": 1436810540.3065822, - "isdir": false, - "ctime": 1436810540.3065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7455823, - "inode": 524158, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/892", - "xusr": false, - "atime": 1436810538.7455823, - "isdir": false, - "ctime": 1436810538.7455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4755824, - "inode": 526278, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3012", - "xusr": false, - "atime": 1436810540.4755824, - "isdir": false, - "ctime": 1436810540.4755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7135823, - "inode": 526584, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3318", - "xusr": false, - "atime": 1436810540.7135823, - "isdir": false, - "ctime": 1436810540.7135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8625822, - "inode": 528127, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4861", - "xusr": false, - "atime": 1436810541.8625822, - "isdir": false, - "ctime": 1436810541.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1725824, - "inode": 523417, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/151", - "xusr": false, - "atime": 1436810538.1725824, - "isdir": false, - "ctime": 1436810538.1725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5605824, - "inode": 526370, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3104", - "xusr": false, - "atime": 1436810540.5605824, - "isdir": false, - "ctime": 1436810540.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8165822, - "inode": 528065, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4799", - "xusr": false, - "atime": 1436810541.8165822, - "isdir": false, - "ctime": 1436810541.8165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8405824, - "inode": 525508, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2242", - "xusr": false, - "atime": 1436810539.8405824, - "isdir": false, - "ctime": 1436810539.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8575823, - "inode": 526785, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3519", - "xusr": false, - "atime": 1436810540.8575823, - "isdir": false, - "ctime": 1436810540.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6655824, - "inode": 524053, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/787", - "xusr": false, - "atime": 1436810538.6655824, - "isdir": false, - "ctime": 1436810538.6655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4135823, - "inode": 523714, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/448", - "xusr": false, - "atime": 1436810538.4135823, - "isdir": false, - "ctime": 1436810538.4135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6135824, - "inode": 526445, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3179", - "xusr": false, - "atime": 1436810540.6135824, - "isdir": false, - "ctime": 1436810540.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3185823, - "inode": 524950, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1684", - "xusr": false, - "atime": 1436810539.3185823, - "isdir": false, - "ctime": 1436810539.3185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9135823, - "inode": 528198, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4932", - "xusr": false, - "atime": 1436810541.9135823, - "isdir": false, - "ctime": 1436810541.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4725823, - "inode": 525091, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1825", - "xusr": false, - "atime": 1436810539.4725823, - "isdir": false, - "ctime": 1436810539.4725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7355824, - "inode": 524145, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/879", - "xusr": false, - "atime": 1436810538.7355824, - "isdir": false, - "ctime": 1436810538.7355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2495823, - "inode": 527327, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4061", - "xusr": false, - "atime": 1436810541.2495823, - "isdir": false, - "ctime": 1436810541.2495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7695823, - "inode": 525413, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2147", - "xusr": false, - "atime": 1436810539.7695823, - "isdir": false, - "ctime": 1436810539.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7435822, - "inode": 526627, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3361", - "xusr": false, - "atime": 1436810540.7435822, - "isdir": false, - "ctime": 1436810540.7435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4455824, - "inode": 523751, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/485", - "xusr": false, - "atime": 1436810538.4455824, - "isdir": false, - "ctime": 1436810538.4455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7375822, - "inode": 525375, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2109", - "xusr": false, - "atime": 1436810539.7375822, - "isdir": false, - "ctime": 1436810539.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9695823, - "inode": 524457, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1191", - "xusr": false, - "atime": 1436810538.9695823, - "isdir": false, - "ctime": 1436810538.9695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9765823, - "inode": 524468, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1202", - "xusr": false, - "atime": 1436810538.9765823, - "isdir": false, - "ctime": 1436810538.9765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1675823, - "inode": 525906, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2640", - "xusr": false, - "atime": 1436810540.1675823, - "isdir": false, - "ctime": 1436810540.1675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8935823, - "inode": 524352, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1086", - "xusr": false, - "atime": 1436810538.8935823, - "isdir": false, - "ctime": 1436810538.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1605823, - "inode": 525900, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2634", - "xusr": false, - "atime": 1436810540.1605823, - "isdir": false, - "ctime": 1436810540.1605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6495824, - "inode": 525286, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2020", - "xusr": false, - "atime": 1436810539.6495824, - "isdir": false, - "ctime": 1436810539.6495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6905823, - "inode": 524087, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/821", - "xusr": false, - "atime": 1436810538.6905823, - "isdir": false, - "ctime": 1436810538.6905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2535822, - "inode": 524862, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1596", - "xusr": false, - "atime": 1436810539.2535822, - "isdir": false, - "ctime": 1436810539.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2635822, - "inode": 526011, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2745", - "xusr": false, - "atime": 1436810540.2635822, - "isdir": false, - "ctime": 1436810540.2635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8015823, - "inode": 526707, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3441", - "xusr": false, - "atime": 1436810540.8015823, - "isdir": false, - "ctime": 1436810540.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7525823, - "inode": 526638, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3372", - "xusr": false, - "atime": 1436810540.7525823, - "isdir": false, - "ctime": 1436810540.7525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9705822, - "inode": 525686, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2420", - "xusr": false, - "atime": 1436810539.9705822, - "isdir": false, - "ctime": 1436810539.9705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7475822, - "inode": 527970, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4704", - "xusr": false, - "atime": 1436810541.7475822, - "isdir": false, - "ctime": 1436810541.7475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7645824, - "inode": 524182, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/916", - "xusr": false, - "atime": 1436810538.7645824, - "isdir": false, - "ctime": 1436810538.7645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8045824, - "inode": 524233, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/967", - "xusr": false, - "atime": 1436810538.8045824, - "isdir": false, - "ctime": 1436810538.8045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0315824, - "inode": 527028, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3762", - "xusr": false, - "atime": 1436810541.0315824, - "isdir": false, - "ctime": 1436810541.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1315823, - "inode": 524687, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1421", - "xusr": false, - "atime": 1436810539.1315823, - "isdir": false, - "ctime": 1436810539.1315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3355823, - "inode": 524967, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1701", - "xusr": false, - "atime": 1436810539.3355823, - "isdir": false, - "ctime": 1436810539.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7785823, - "inode": 525425, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2159", - "xusr": false, - "atime": 1436810539.7785823, - "isdir": false, - "ctime": 1436810539.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6805823, - "inode": 526538, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3272", - "xusr": false, - "atime": 1436810540.6805823, - "isdir": false, - "ctime": 1436810540.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1685822, - "inode": 524740, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1474", - "xusr": false, - "atime": 1436810539.1685822, - "isdir": false, - "ctime": 1436810539.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5405824, - "inode": 525161, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1895", - "xusr": false, - "atime": 1436810539.5405824, - "isdir": false, - "ctime": 1436810539.5405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0255823, - "inode": 527019, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3753", - "xusr": false, - "atime": 1436810541.0255823, - "isdir": false, - "ctime": 1436810541.0255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9725823, - "inode": 525690, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2424", - "xusr": false, - "atime": 1436810539.9725823, - "isdir": false, - "ctime": 1436810539.9725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9945824, - "inode": 525721, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2455", - "xusr": false, - "atime": 1436810539.9945824, - "isdir": false, - "ctime": 1436810539.9945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9025824, - "inode": 526849, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3583", - "xusr": false, - "atime": 1436810540.9025824, - "isdir": false, - "ctime": 1436810540.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2345824, - "inode": 524835, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1569", - "xusr": false, - "atime": 1436810539.2345824, - "isdir": false, - "ctime": 1436810539.2345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1425824, - "inode": 523375, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/109", - "xusr": false, - "atime": 1436810538.1425824, - "isdir": false, - "ctime": 1436810538.1425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7755823, - "inode": 525421, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2155", - "xusr": false, - "atime": 1436810539.7755823, - "isdir": false, - "ctime": 1436810539.7755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1475823, - "inode": 525887, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2621", - "xusr": false, - "atime": 1436810540.1475823, - "isdir": false, - "ctime": 1436810540.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6565824, - "inode": 526503, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3237", - "xusr": false, - "atime": 1436810540.6565824, - "isdir": false, - "ctime": 1436810540.6565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6855824, - "inode": 527884, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4618", - "xusr": false, - "atime": 1436810541.6855824, - "isdir": false, - "ctime": 1436810541.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6965823, - "inode": 525331, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2065", - "xusr": false, - "atime": 1436810539.6965823, - "isdir": false, - "ctime": 1436810539.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6275823, - "inode": 527805, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4539", - "xusr": false, - "atime": 1436810541.6275823, - "isdir": false, - "ctime": 1436810541.6275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8325822, - "inode": 525497, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2231", - "xusr": false, - "atime": 1436810539.8325822, - "isdir": false, - "ctime": 1436810539.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5885823, - "inode": 527752, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4486", - "xusr": false, - "atime": 1436810541.5885823, - "isdir": false, - "ctime": 1436810541.5885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5215824, - "inode": 523857, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/591", - "xusr": false, - "atime": 1436810538.5215824, - "isdir": false, - "ctime": 1436810538.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7845824, - "inode": 528021, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4755", - "xusr": false, - "atime": 1436810541.7845824, - "isdir": false, - "ctime": 1436810541.7845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4805822, - "inode": 526285, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3019", - "xusr": false, - "atime": 1436810540.4805822, - "isdir": false, - "ctime": 1436810540.4805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3105824, - "inode": 523610, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/344", - "xusr": false, - "atime": 1436810538.3105824, - "isdir": false, - "ctime": 1436810538.3105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7715824, - "inode": 525415, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2149", - "xusr": false, - "atime": 1436810539.7715824, - "isdir": false, - "ctime": 1436810539.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8585823, - "inode": 526787, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3521", - "xusr": false, - "atime": 1436810540.8585823, - "isdir": false, - "ctime": 1436810540.8585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4255824, - "inode": 525056, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1790", - "xusr": false, - "atime": 1436810539.4255824, - "isdir": false, - "ctime": 1436810539.4255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0005822, - "inode": 526986, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3720", - "xusr": false, - "atime": 1436810541.0005822, - "isdir": false, - "ctime": 1436810541.0005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4255824, - "inode": 526228, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2962", - "xusr": false, - "atime": 1436810540.4255824, - "isdir": false, - "ctime": 1436810540.4255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9195824, - "inode": 525618, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2352", - "xusr": false, - "atime": 1436810539.9195824, - "isdir": false, - "ctime": 1436810539.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6105824, - "inode": 523979, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/713", - "xusr": false, - "atime": 1436810538.6105824, - "isdir": false, - "ctime": 1436810538.6105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3415823, - "inode": 523638, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/372", - "xusr": false, - "atime": 1436810538.3415823, - "isdir": false, - "ctime": 1436810538.3415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6725824, - "inode": 527866, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4600", - "xusr": false, - "atime": 1436810541.6725824, - "isdir": false, - "ctime": 1436810541.6725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6575823, - "inode": 527845, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4579", - "xusr": false, - "atime": 1436810541.6575823, - "isdir": false, - "ctime": 1436810541.6575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1585822, - "inode": 525898, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2632", - "xusr": false, - "atime": 1436810540.1585822, - "isdir": false, - "ctime": 1436810540.1585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4015822, - "inode": 526194, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2928", - "xusr": false, - "atime": 1436810540.4015822, - "isdir": false, - "ctime": 1436810540.4015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4675822, - "inode": 523782, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/516", - "xusr": false, - "atime": 1436810538.4675822, - "isdir": false, - "ctime": 1436810538.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9045823, - "inode": 528186, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4920", - "xusr": false, - "atime": 1436810541.9045823, - "isdir": false, - "ctime": 1436810541.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9905822, - "inode": 524487, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1221", - "xusr": false, - "atime": 1436810538.9905822, - "isdir": false, - "ctime": 1436810538.9905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4845824, - "inode": 523805, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/539", - "xusr": false, - "atime": 1436810538.4845824, - "isdir": false, - "ctime": 1436810538.4845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2145822, - "inode": 525958, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2692", - "xusr": false, - "atime": 1436810540.2145822, - "isdir": false, - "ctime": 1436810540.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3875823, - "inode": 525014, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1748", - "xusr": false, - "atime": 1436810539.3875823, - "isdir": false, - "ctime": 1436810539.3875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6745822, - "inode": 524066, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/800", - "xusr": false, - "atime": 1436810538.6745822, - "isdir": false, - "ctime": 1436810538.6745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2625823, - "inode": 524876, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1610", - "xusr": false, - "atime": 1436810539.2625823, - "isdir": false, - "ctime": 1436810539.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2265823, - "inode": 524823, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1557", - "xusr": false, - "atime": 1436810539.2265823, - "isdir": false, - "ctime": 1436810539.2265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4375823, - "inode": 526243, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2977", - "xusr": false, - "atime": 1436810540.4375823, - "isdir": false, - "ctime": 1436810540.4375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8195822, - "inode": 525478, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2212", - "xusr": false, - "atime": 1436810539.8195822, - "isdir": false, - "ctime": 1436810539.8195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3595824, - "inode": 527453, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4187", - "xusr": false, - "atime": 1436810541.3595824, - "isdir": false, - "ctime": 1436810541.3595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3725822, - "inode": 527463, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4197", - "xusr": false, - "atime": 1436810541.3725822, - "isdir": false, - "ctime": 1436810541.3725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3085823, - "inode": 524939, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1673", - "xusr": false, - "atime": 1436810539.3085823, - "isdir": false, - "ctime": 1436810539.3085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7665823, - "inode": 527996, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4730", - "xusr": false, - "atime": 1436810541.7665823, - "isdir": false, - "ctime": 1436810541.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8505824, - "inode": 528110, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4844", - "xusr": false, - "atime": 1436810541.8505824, - "isdir": false, - "ctime": 1436810541.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1485822, - "inode": 524712, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1446", - "xusr": false, - "atime": 1436810539.1485822, - "isdir": false, - "ctime": 1436810539.1485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8545823, - "inode": 524299, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1033", - "xusr": false, - "atime": 1436810538.8545823, - "isdir": false, - "ctime": 1436810538.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4675822, - "inode": 525085, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1819", - "xusr": false, - "atime": 1436810539.4675822, - "isdir": false, - "ctime": 1436810539.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6415823, - "inode": 524020, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/754", - "xusr": false, - "atime": 1436810538.6415823, - "isdir": false, - "ctime": 1436810538.6415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6275823, - "inode": 526463, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3197", - "xusr": false, - "atime": 1436810540.6275823, - "isdir": false, - "ctime": 1436810540.6275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6505823, - "inode": 526495, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3229", - "xusr": false, - "atime": 1436810540.6505823, - "isdir": false, - "ctime": 1436810540.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7195823, - "inode": 524124, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/858", - "xusr": false, - "atime": 1436810538.7195823, - "isdir": false, - "ctime": 1436810538.7195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3445823, - "inode": 527442, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4176", - "xusr": false, - "atime": 1436810541.3445823, - "isdir": false, - "ctime": 1436810541.3445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1535823, - "inode": 525892, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2626", - "xusr": false, - "atime": 1436810540.1535823, - "isdir": false, - "ctime": 1436810540.1535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8175824, - "inode": 526730, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3464", - "xusr": false, - "atime": 1436810540.8175824, - "isdir": false, - "ctime": 1436810540.8175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9875822, - "inode": 524483, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1217", - "xusr": false, - "atime": 1436810538.9875822, - "isdir": false, - "ctime": 1436810538.9875822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6545823, - "inode": 524038, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/772", - "xusr": false, - "atime": 1436810538.6545823, - "isdir": false, - "ctime": 1436810538.6545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1495824, - "inode": 524713, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1447", - "xusr": false, - "atime": 1436810539.1495824, - "isdir": false, - "ctime": 1436810539.1495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5525823, - "inode": 526358, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3092", - "xusr": false, - "atime": 1436810540.5525823, - "isdir": false, - "ctime": 1436810540.5525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7245822, - "inode": 527938, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4672", - "xusr": false, - "atime": 1436810541.7245822, - "isdir": false, - "ctime": 1436810541.7245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8455822, - "inode": 525514, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2248", - "xusr": false, - "atime": 1436810539.8455822, - "isdir": false, - "ctime": 1436810539.8455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7665823, - "inode": 526657, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3391", - "xusr": false, - "atime": 1436810540.7665823, - "isdir": false, - "ctime": 1436810540.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5665822, - "inode": 527720, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4454", - "xusr": false, - "atime": 1436810541.5665822, - "isdir": false, - "ctime": 1436810541.5665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5375824, - "inode": 526338, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3072", - "xusr": false, - "atime": 1436810540.5375824, - "isdir": false, - "ctime": 1436810540.5375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3305824, - "inode": 523627, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/361", - "xusr": false, - "atime": 1436810538.3305824, - "isdir": false, - "ctime": 1436810538.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6995823, - "inode": 527904, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4638", - "xusr": false, - "atime": 1436810541.6995823, - "isdir": false, - "ctime": 1436810541.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9685824, - "inode": 525684, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2418", - "xusr": false, - "atime": 1436810539.9685824, - "isdir": false, - "ctime": 1436810539.9685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2015824, - "inode": 524788, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1522", - "xusr": false, - "atime": 1436810539.2015824, - "isdir": false, - "ctime": 1436810539.2015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2155824, - "inode": 524808, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1542", - "xusr": false, - "atime": 1436810539.2155824, - "isdir": false, - "ctime": 1436810539.2155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5755823, - "inode": 527733, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4467", - "xusr": false, - "atime": 1436810541.5755823, - "isdir": false, - "ctime": 1436810541.5755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2965822, - "inode": 526048, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2782", - "xusr": false, - "atime": 1436810540.2965822, - "isdir": false, - "ctime": 1436810540.2965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6485822, - "inode": 525285, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2019", - "xusr": false, - "atime": 1436810539.6485822, - "isdir": false, - "ctime": 1436810539.6485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5775824, - "inode": 527736, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4470", - "xusr": false, - "atime": 1436810541.5775824, - "isdir": false, - "ctime": 1436810541.5775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3275824, - "inode": 527425, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4159", - "xusr": false, - "atime": 1436810541.3275824, - "isdir": false, - "ctime": 1436810541.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2695823, - "inode": 527356, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4090", - "xusr": false, - "atime": 1436810541.2695823, - "isdir": false, - "ctime": 1436810541.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2985823, - "inode": 526051, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2785", - "xusr": false, - "atime": 1436810540.2985823, - "isdir": false, - "ctime": 1436810540.2985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1015823, - "inode": 524644, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1378", - "xusr": false, - "atime": 1436810539.1015823, - "isdir": false, - "ctime": 1436810539.1015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9765823, - "inode": 524467, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1201", - "xusr": false, - "atime": 1436810538.9765823, - "isdir": false, - "ctime": 1436810538.9765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4655824, - "inode": 523779, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/513", - "xusr": false, - "atime": 1436810538.4655824, - "isdir": false, - "ctime": 1436810538.4655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4595823, - "inode": 523771, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/505", - "xusr": false, - "atime": 1436810538.4595823, - "isdir": false, - "ctime": 1436810538.4595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1795824, - "inode": 524756, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1490", - "xusr": false, - "atime": 1436810539.1795824, - "isdir": false, - "ctime": 1436810539.1795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8805823, - "inode": 525564, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2298", - "xusr": false, - "atime": 1436810539.8805823, - "isdir": false, - "ctime": 1436810539.8805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9935822, - "inode": 524490, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1224", - "xusr": false, - "atime": 1436810538.9935822, - "isdir": false, - "ctime": 1436810538.9935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2465823, - "inode": 527323, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4057", - "xusr": false, - "atime": 1436810541.2465823, - "isdir": false, - "ctime": 1436810541.2465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8115823, - "inode": 526722, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3456", - "xusr": false, - "atime": 1436810540.8115823, - "isdir": false, - "ctime": 1436810540.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8355823, - "inode": 526755, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3489", - "xusr": false, - "atime": 1436810540.8355823, - "isdir": false, - "ctime": 1436810540.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8065822, - "inode": 526715, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3449", - "xusr": false, - "atime": 1436810540.8065822, - "isdir": false, - "ctime": 1436810540.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1145823, - "inode": 527144, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3878", - "xusr": false, - "atime": 1436810541.1145823, - "isdir": false, - "ctime": 1436810541.1145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5325823, - "inode": 525153, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1887", - "xusr": false, - "atime": 1436810539.5325823, - "isdir": false, - "ctime": 1436810539.5325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1875823, - "inode": 523440, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/174", - "xusr": false, - "atime": 1436810538.1875823, - "isdir": false, - "ctime": 1436810538.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3355823, - "inode": 523634, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/368", - "xusr": false, - "atime": 1436810538.3355823, - "isdir": false, - "ctime": 1436810538.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9175823, - "inode": 526870, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3604", - "xusr": false, - "atime": 1436810540.9175823, - "isdir": false, - "ctime": 1436810540.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1685822, - "inode": 523411, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/145", - "xusr": false, - "atime": 1436810538.1685822, - "isdir": false, - "ctime": 1436810538.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1665823, - "inode": 524738, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1472", - "xusr": false, - "atime": 1436810539.1665823, - "isdir": false, - "ctime": 1436810539.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9585824, - "inode": 525671, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2405", - "xusr": false, - "atime": 1436810539.9585824, - "isdir": false, - "ctime": 1436810539.9585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9365823, - "inode": 526898, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3632", - "xusr": false, - "atime": 1436810540.9365823, - "isdir": false, - "ctime": 1436810540.9365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2525823, - "inode": 526000, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2734", - "xusr": false, - "atime": 1436810540.2525823, - "isdir": false, - "ctime": 1436810540.2525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3235824, - "inode": 526084, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2818", - "xusr": false, - "atime": 1436810540.3235824, - "isdir": false, - "ctime": 1436810540.3235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9655824, - "inode": 524452, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1186", - "xusr": false, - "atime": 1436810538.9655824, - "isdir": false, - "ctime": 1436810538.9655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7405822, - "inode": 527961, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4695", - "xusr": false, - "atime": 1436810541.7405822, - "isdir": false, - "ctime": 1436810541.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0635824, - "inode": 524589, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1323", - "xusr": false, - "atime": 1436810539.0635824, - "isdir": false, - "ctime": 1436810539.0635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7155824, - "inode": 527926, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4660", - "xusr": false, - "atime": 1436810541.7155824, - "isdir": false, - "ctime": 1436810541.7155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8805823, - "inode": 526818, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3552", - "xusr": false, - "atime": 1436810540.8805823, - "isdir": false, - "ctime": 1436810540.8805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3385823, - "inode": 526106, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2840", - "xusr": false, - "atime": 1436810540.3385823, - "isdir": false, - "ctime": 1436810540.3385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0285823, - "inode": 524539, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1273", - "xusr": false, - "atime": 1436810539.0285823, - "isdir": false, - "ctime": 1436810539.0285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7365823, - "inode": 526617, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3351", - "xusr": false, - "atime": 1436810540.7365823, - "isdir": false, - "ctime": 1436810540.7365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2965822, - "inode": 527394, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4128", - "xusr": false, - "atime": 1436810541.2965822, - "isdir": false, - "ctime": 1436810541.2965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3445823, - "inode": 527443, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4177", - "xusr": false, - "atime": 1436810541.3445823, - "isdir": false, - "ctime": 1436810541.3445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2085824, - "inode": 525950, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2684", - "xusr": false, - "atime": 1436810540.2085824, - "isdir": false, - "ctime": 1436810540.2085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9495823, - "inode": 526915, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3649", - "xusr": false, - "atime": 1436810540.9495823, - "isdir": false, - "ctime": 1436810540.9495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0345824, - "inode": 525774, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2508", - "xusr": false, - "atime": 1436810540.0345824, - "isdir": false, - "ctime": 1436810540.0345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8295822, - "inode": 525492, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2226", - "xusr": false, - "atime": 1436810539.8295822, - "isdir": false, - "ctime": 1436810539.8295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5775824, - "inode": 526393, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3127", - "xusr": false, - "atime": 1436810540.5775824, - "isdir": false, - "ctime": 1436810540.5775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7595823, - "inode": 527986, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4720", - "xusr": false, - "atime": 1436810541.7595823, - "isdir": false, - "ctime": 1436810541.7595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4205823, - "inode": 526220, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2954", - "xusr": false, - "atime": 1436810540.4205823, - "isdir": false, - "ctime": 1436810540.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0665822, - "inode": 524594, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1328", - "xusr": false, - "atime": 1436810539.0665822, - "isdir": false, - "ctime": 1436810539.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5005822, - "inode": 526301, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3035", - "xusr": false, - "atime": 1436810540.5005822, - "isdir": false, - "ctime": 1436810540.5005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1465824, - "inode": 524709, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1443", - "xusr": false, - "atime": 1436810539.1465824, - "isdir": false, - "ctime": 1436810539.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8155823, - "inode": 524247, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/981", - "xusr": false, - "atime": 1436810538.8155823, - "isdir": false, - "ctime": 1436810538.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3615823, - "inode": 527456, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4190", - "xusr": false, - "atime": 1436810541.3615823, - "isdir": false, - "ctime": 1436810541.3615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3825824, - "inode": 526167, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2901", - "xusr": false, - "atime": 1436810540.3825824, - "isdir": false, - "ctime": 1436810540.3825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9725823, - "inode": 525689, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2423", - "xusr": false, - "atime": 1436810539.9725823, - "isdir": false, - "ctime": 1436810539.9725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3835824, - "inode": 526169, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2903", - "xusr": false, - "atime": 1436810540.3835824, - "isdir": false, - "ctime": 1436810540.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3815823, - "inode": 523675, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/409", - "xusr": false, - "atime": 1436810538.3815823, - "isdir": false, - "ctime": 1436810538.3815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4325824, - "inode": 527536, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4270", - "xusr": false, - "atime": 1436810541.4325824, - "isdir": false, - "ctime": 1436810541.4325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9305823, - "inode": 528222, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4956", - "xusr": false, - "atime": 1436810541.9305823, - "isdir": false, - "ctime": 1436810541.9305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1255822, - "inode": 523350, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/84", - "xusr": false, - "atime": 1436810538.1255822, - "isdir": false, - "ctime": 1436810538.1255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7695823, - "inode": 528000, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4734", - "xusr": false, - "atime": 1436810541.7695823, - "isdir": false, - "ctime": 1436810541.7695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8475823, - "inode": 526771, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3505", - "xusr": false, - "atime": 1436810540.8475823, - "isdir": false, - "ctime": 1436810540.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1865823, - "inode": 525924, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2658", - "xusr": false, - "atime": 1436810540.1865823, - "isdir": false, - "ctime": 1436810540.1865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7975824, - "inode": 528039, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4773", - "xusr": false, - "atime": 1436810541.7975824, - "isdir": false, - "ctime": 1436810541.7975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3155823, - "inode": 527416, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4150", - "xusr": false, - "atime": 1436810541.3155823, - "isdir": false, - "ctime": 1436810541.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3895824, - "inode": 523682, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/416", - "xusr": false, - "atime": 1436810538.3895824, - "isdir": false, - "ctime": 1436810538.3895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0335822, - "inode": 524546, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1280", - "xusr": false, - "atime": 1436810539.0335822, - "isdir": false, - "ctime": 1436810539.0335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4445822, - "inode": 523749, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/483", - "xusr": false, - "atime": 1436810538.4445822, - "isdir": false, - "ctime": 1436810538.4445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5095823, - "inode": 526306, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3040", - "xusr": false, - "atime": 1436810540.5095823, - "isdir": false, - "ctime": 1436810540.5095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8245823, - "inode": 528075, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4809", - "xusr": false, - "atime": 1436810541.8245823, - "isdir": false, - "ctime": 1436810541.8245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9445822, - "inode": 528241, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4975", - "xusr": false, - "atime": 1436810541.9445822, - "isdir": false, - "ctime": 1436810541.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8705823, - "inode": 524322, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1056", - "xusr": false, - "atime": 1436810538.8705823, - "isdir": false, - "ctime": 1436810538.8705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4225824, - "inode": 523726, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/460", - "xusr": false, - "atime": 1436810538.4225824, - "isdir": false, - "ctime": 1436810538.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8355823, - "inode": 526754, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3488", - "xusr": false, - "atime": 1436810540.8355823, - "isdir": false, - "ctime": 1436810540.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4025824, - "inode": 523699, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/433", - "xusr": false, - "atime": 1436810538.4025824, - "isdir": false, - "ctime": 1436810538.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2215824, - "inode": 525965, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2699", - "xusr": false, - "atime": 1436810540.2215824, - "isdir": false, - "ctime": 1436810540.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2355824, - "inode": 524837, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1571", - "xusr": false, - "atime": 1436810539.2355824, - "isdir": false, - "ctime": 1436810539.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5565822, - "inode": 527706, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4440", - "xusr": false, - "atime": 1436810541.5565822, - "isdir": false, - "ctime": 1436810541.5565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3575823, - "inode": 523653, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/387", - "xusr": false, - "atime": 1436810538.3575823, - "isdir": false, - "ctime": 1436810538.3575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4855824, - "inode": 523807, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/541", - "xusr": false, - "atime": 1436810538.4855824, - "isdir": false, - "ctime": 1436810538.4855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0635824, - "inode": 525806, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2540", - "xusr": false, - "atime": 1436810540.0635824, - "isdir": false, - "ctime": 1436810540.0635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0775824, - "inode": 523286, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/20", - "xusr": false, - "atime": 1436810538.0775824, - "isdir": false, - "ctime": 1436810538.0775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1025822, - "inode": 524645, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1379", - "xusr": false, - "atime": 1436810539.1025822, - "isdir": false, - "ctime": 1436810539.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1195824, - "inode": 523342, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/76", - "xusr": false, - "atime": 1436810538.1195824, - "isdir": false, - "ctime": 1436810538.1195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7945824, - "inode": 524218, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/952", - "xusr": false, - "atime": 1436810538.7945824, - "isdir": false, - "ctime": 1436810538.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6235824, - "inode": 527800, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4534", - "xusr": false, - "atime": 1436810541.6235824, - "isdir": false, - "ctime": 1436810541.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0245824, - "inode": 525761, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2495", - "xusr": false, - "atime": 1436810540.0245824, - "isdir": false, - "ctime": 1436810540.0245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1745822, - "inode": 525914, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2648", - "xusr": false, - "atime": 1436810540.1745822, - "isdir": false, - "ctime": 1436810540.1745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3645823, - "inode": 527459, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4193", - "xusr": false, - "atime": 1436810541.3645823, - "isdir": false, - "ctime": 1436810541.3645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6745822, - "inode": 525310, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2044", - "xusr": false, - "atime": 1436810539.6745822, - "isdir": false, - "ctime": 1436810539.6745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4895823, - "inode": 525110, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1844", - "xusr": false, - "atime": 1436810539.4895823, - "isdir": false, - "ctime": 1436810539.4895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4545822, - "inode": 526261, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2995", - "xusr": false, - "atime": 1436810540.4545822, - "isdir": false, - "ctime": 1436810540.4545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4775822, - "inode": 525097, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1831", - "xusr": false, - "atime": 1436810539.4775822, - "isdir": false, - "ctime": 1436810539.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4455824, - "inode": 527554, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4288", - "xusr": false, - "atime": 1436810541.4455824, - "isdir": false, - "ctime": 1436810541.4455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7425823, - "inode": 526626, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3360", - "xusr": false, - "atime": 1436810540.7425823, - "isdir": false, - "ctime": 1436810540.7425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5385823, - "inode": 523879, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/613", - "xusr": false, - "atime": 1436810538.5385823, - "isdir": false, - "ctime": 1436810538.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6295824, - "inode": 525262, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1996", - "xusr": false, - "atime": 1436810539.6295824, - "isdir": false, - "ctime": 1436810539.6295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7495823, - "inode": 527972, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4706", - "xusr": false, - "atime": 1436810541.7495823, - "isdir": false, - "ctime": 1436810541.7495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3335824, - "inode": 527433, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4167", - "xusr": false, - "atime": 1436810541.3335824, - "isdir": false, - "ctime": 1436810541.3335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1795824, - "inode": 525918, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2652", - "xusr": false, - "atime": 1436810540.1795824, - "isdir": false, - "ctime": 1436810540.1795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6585822, - "inode": 527847, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4581", - "xusr": false, - "atime": 1436810541.6585822, - "isdir": false, - "ctime": 1436810541.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4535823, - "inode": 527564, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4298", - "xusr": false, - "atime": 1436810541.4535823, - "isdir": false, - "ctime": 1436810541.4535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2575824, - "inode": 523538, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/272", - "xusr": false, - "atime": 1436810538.2575824, - "isdir": false, - "ctime": 1436810538.2575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6765823, - "inode": 527872, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4606", - "xusr": false, - "atime": 1436810541.6765823, - "isdir": false, - "ctime": 1436810541.6765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3305824, - "inode": 524960, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1694", - "xusr": false, - "atime": 1436810539.3305824, - "isdir": false, - "ctime": 1436810539.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0065823, - "inode": 525737, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2471", - "xusr": false, - "atime": 1436810540.0065823, - "isdir": false, - "ctime": 1436810540.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8855822, - "inode": 525571, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2305", - "xusr": false, - "atime": 1436810539.8855822, - "isdir": false, - "ctime": 1436810539.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8375823, - "inode": 526757, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3491", - "xusr": false, - "atime": 1436810540.8375823, - "isdir": false, - "ctime": 1436810540.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8675823, - "inode": 526799, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3533", - "xusr": false, - "atime": 1436810540.8675823, - "isdir": false, - "ctime": 1436810540.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1095824, - "inode": 524656, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1390", - "xusr": false, - "atime": 1436810539.1095824, - "isdir": false, - "ctime": 1436810539.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3655822, - "inode": 524992, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1726", - "xusr": false, - "atime": 1436810539.3655822, - "isdir": false, - "ctime": 1436810539.3655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6715822, - "inode": 526525, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3259", - "xusr": false, - "atime": 1436810540.6715822, - "isdir": false, - "ctime": 1436810540.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9935822, - "inode": 526976, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3710", - "xusr": false, - "atime": 1436810540.9935822, - "isdir": false, - "ctime": 1436810540.9935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8545823, - "inode": 526781, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3515", - "xusr": false, - "atime": 1436810540.8545823, - "isdir": false, - "ctime": 1436810540.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8575823, - "inode": 525532, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2266", - "xusr": false, - "atime": 1436810539.8575823, - "isdir": false, - "ctime": 1436810539.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9155824, - "inode": 525613, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2347", - "xusr": false, - "atime": 1436810539.9155824, - "isdir": false, - "ctime": 1436810539.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6405823, - "inode": 527822, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4556", - "xusr": false, - "atime": 1436810541.6405823, - "isdir": false, - "ctime": 1436810541.6405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5905824, - "inode": 525215, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1949", - "xusr": false, - "atime": 1436810539.5905824, - "isdir": false, - "ctime": 1436810539.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9535823, - "inode": 526921, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3655", - "xusr": false, - "atime": 1436810540.9535823, - "isdir": false, - "ctime": 1436810540.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4865823, - "inode": 523808, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/542", - "xusr": false, - "atime": 1436810538.4865823, - "isdir": false, - "ctime": 1436810538.4865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5855823, - "inode": 523944, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/678", - "xusr": false, - "atime": 1436810538.5855823, - "isdir": false, - "ctime": 1436810538.5855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4225824, - "inode": 523727, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/461", - "xusr": false, - "atime": 1436810538.4225824, - "isdir": false, - "ctime": 1436810538.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7095823, - "inode": 526578, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3312", - "xusr": false, - "atime": 1436810540.7095823, - "isdir": false, - "ctime": 1436810540.7095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8135824, - "inode": 526724, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3458", - "xusr": false, - "atime": 1436810540.8135824, - "isdir": false, - "ctime": 1436810540.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4965823, - "inode": 523823, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/557", - "xusr": false, - "atime": 1436810538.4965823, - "isdir": false, - "ctime": 1436810538.4965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4425824, - "inode": 526248, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2982", - "xusr": false, - "atime": 1436810540.4425824, - "isdir": false, - "ctime": 1436810540.4425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7085824, - "inode": 527916, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4650", - "xusr": false, - "atime": 1436810541.7085824, - "isdir": false, - "ctime": 1436810541.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2945824, - "inode": 526046, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2780", - "xusr": false, - "atime": 1436810540.2945824, - "isdir": false, - "ctime": 1436810540.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8055823, - "inode": 524234, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/968", - "xusr": false, - "atime": 1436810538.8055823, - "isdir": false, - "ctime": 1436810538.8055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7675824, - "inode": 524186, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/920", - "xusr": false, - "atime": 1436810538.7675824, - "isdir": false, - "ctime": 1436810538.7675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8075824, - "inode": 526716, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3450", - "xusr": false, - "atime": 1436810540.8075824, - "isdir": false, - "ctime": 1436810540.8075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3075824, - "inode": 527407, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4141", - "xusr": false, - "atime": 1436810541.3075824, - "isdir": false, - "ctime": 1436810541.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3515823, - "inode": 526123, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2857", - "xusr": false, - "atime": 1436810540.3515823, - "isdir": false, - "ctime": 1436810540.3515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3595824, - "inode": 526135, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2869", - "xusr": false, - "atime": 1436810540.3595824, - "isdir": false, - "ctime": 1436810540.3595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8885822, - "inode": 526830, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3564", - "xusr": false, - "atime": 1436810540.8885822, - "isdir": false, - "ctime": 1436810540.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6045823, - "inode": 525229, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1963", - "xusr": false, - "atime": 1436810539.6045823, - "isdir": false, - "ctime": 1436810539.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9015822, - "inode": 524364, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1098", - "xusr": false, - "atime": 1436810538.9015822, - "isdir": false, - "ctime": 1436810538.9015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7485824, - "inode": 527971, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4705", - "xusr": false, - "atime": 1436810541.7485824, - "isdir": false, - "ctime": 1436810541.7485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7155824, - "inode": 526587, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3321", - "xusr": false, - "atime": 1436810540.7155824, - "isdir": false, - "ctime": 1436810540.7155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6695824, - "inode": 527862, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4596", - "xusr": false, - "atime": 1436810541.6695824, - "isdir": false, - "ctime": 1436810541.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5345824, - "inode": 526334, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3068", - "xusr": false, - "atime": 1436810540.5345824, - "isdir": false, - "ctime": 1436810540.5345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2155824, - "inode": 525959, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2693", - "xusr": false, - "atime": 1436810540.2155824, - "isdir": false, - "ctime": 1436810540.2155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0855823, - "inode": 524622, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1356", - "xusr": false, - "atime": 1436810539.0855823, - "isdir": false, - "ctime": 1436810539.0855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4685824, - "inode": 527585, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4319", - "xusr": false, - "atime": 1436810541.4685824, - "isdir": false, - "ctime": 1436810541.4685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3335824, - "inode": 523632, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/366", - "xusr": false, - "atime": 1436810538.3335824, - "isdir": false, - "ctime": 1436810538.3335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2945824, - "inode": 524921, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1655", - "xusr": false, - "atime": 1436810539.2945824, - "isdir": false, - "ctime": 1436810539.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4965823, - "inode": 523822, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/556", - "xusr": false, - "atime": 1436810538.4965823, - "isdir": false, - "ctime": 1436810538.4965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8505824, - "inode": 524294, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1028", - "xusr": false, - "atime": 1436810538.8505824, - "isdir": false, - "ctime": 1436810538.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9205823, - "inode": 526875, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3609", - "xusr": false, - "atime": 1436810540.9205823, - "isdir": false, - "ctime": 1436810540.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5215824, - "inode": 526321, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3055", - "xusr": false, - "atime": 1436810540.5215824, - "isdir": false, - "ctime": 1436810540.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7945824, - "inode": 525446, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2180", - "xusr": false, - "atime": 1436810539.7945824, - "isdir": false, - "ctime": 1436810539.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8595824, - "inode": 526788, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3522", - "xusr": false, - "atime": 1436810540.8595824, - "isdir": false, - "ctime": 1436810540.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2975824, - "inode": 523596, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/330", - "xusr": false, - "atime": 1436810538.2975824, - "isdir": false, - "ctime": 1436810538.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0605824, - "inode": 524585, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1319", - "xusr": false, - "atime": 1436810539.0605824, - "isdir": false, - "ctime": 1436810539.0605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8375823, - "inode": 528093, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4827", - "xusr": false, - "atime": 1436810541.8375823, - "isdir": false, - "ctime": 1436810541.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3345823, - "inode": 524965, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1699", - "xusr": false, - "atime": 1436810539.3345823, - "isdir": false, - "ctime": 1436810539.3345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2085824, - "inode": 527270, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4004", - "xusr": false, - "atime": 1436810541.2085824, - "isdir": false, - "ctime": 1436810541.2085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7915823, - "inode": 528031, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4765", - "xusr": false, - "atime": 1436810541.7915823, - "isdir": false, - "ctime": 1436810541.7915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3715823, - "inode": 526151, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2885", - "xusr": false, - "atime": 1436810540.3715823, - "isdir": false, - "ctime": 1436810540.3715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2595823, - "inode": 523540, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/274", - "xusr": false, - "atime": 1436810538.2595823, - "isdir": false, - "ctime": 1436810538.2595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4675822, - "inode": 527583, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4317", - "xusr": false, - "atime": 1436810541.4675822, - "isdir": false, - "ctime": 1436810541.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9455824, - "inode": 528243, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4977", - "xusr": false, - "atime": 1436810541.9455824, - "isdir": false, - "ctime": 1436810541.9455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2975824, - "inode": 523595, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/329", - "xusr": false, - "atime": 1436810538.2975824, - "isdir": false, - "ctime": 1436810538.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5555823, - "inode": 526363, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3097", - "xusr": false, - "atime": 1436810540.5555823, - "isdir": false, - "ctime": 1436810540.5555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7145822, - "inode": 526586, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3320", - "xusr": false, - "atime": 1436810540.7145822, - "isdir": false, - "ctime": 1436810540.7145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0025823, - "inode": 524503, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1237", - "xusr": false, - "atime": 1436810539.0025823, - "isdir": false, - "ctime": 1436810539.0025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9995823, - "inode": 526984, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3718", - "xusr": false, - "atime": 1436810540.9995823, - "isdir": false, - "ctime": 1436810540.9995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5795822, - "inode": 527739, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4473", - "xusr": false, - "atime": 1436810541.5795822, - "isdir": false, - "ctime": 1436810541.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5025823, - "inode": 525123, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1857", - "xusr": false, - "atime": 1436810539.5025823, - "isdir": false, - "ctime": 1436810539.5025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8885822, - "inode": 525576, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2310", - "xusr": false, - "atime": 1436810539.8885822, - "isdir": false, - "ctime": 1436810539.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0935824, - "inode": 527114, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3848", - "xusr": false, - "atime": 1436810541.0935824, - "isdir": false, - "ctime": 1436810541.0935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0685823, - "inode": 523274, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/8", - "xusr": false, - "atime": 1436810538.0685823, - "isdir": false, - "ctime": 1436810538.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0795822, - "inode": 523290, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/24", - "xusr": false, - "atime": 1436810538.0795822, - "isdir": false, - "ctime": 1436810538.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3475823, - "inode": 527446, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4180", - "xusr": false, - "atime": 1436810541.3475823, - "isdir": false, - "ctime": 1436810541.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2325823, - "inode": 527303, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4037", - "xusr": false, - "atime": 1436810541.2325823, - "isdir": false, - "ctime": 1436810541.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1245823, - "inode": 525865, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2599", - "xusr": false, - "atime": 1436810540.1245823, - "isdir": false, - "ctime": 1436810540.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8215823, - "inode": 525481, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2215", - "xusr": false, - "atime": 1436810539.8215823, - "isdir": false, - "ctime": 1436810539.8215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6795824, - "inode": 525314, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2048", - "xusr": false, - "atime": 1436810539.6795824, - "isdir": false, - "ctime": 1436810539.6795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2215824, - "inode": 523487, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/221", - "xusr": false, - "atime": 1436810538.2215824, - "isdir": false, - "ctime": 1436810538.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0715823, - "inode": 524602, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1336", - "xusr": false, - "atime": 1436810539.0715823, - "isdir": false, - "ctime": 1436810539.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1695824, - "inode": 524742, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1476", - "xusr": false, - "atime": 1436810539.1695824, - "isdir": false, - "ctime": 1436810539.1695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6055822, - "inode": 527775, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4509", - "xusr": false, - "atime": 1436810541.6055822, - "isdir": false, - "ctime": 1436810541.6055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3025823, - "inode": 524933, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1667", - "xusr": false, - "atime": 1436810539.3025823, - "isdir": false, - "ctime": 1436810539.3025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3985822, - "inode": 526190, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2924", - "xusr": false, - "atime": 1436810540.3985822, - "isdir": false, - "ctime": 1436810540.3985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9995823, - "inode": 525728, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2462", - "xusr": false, - "atime": 1436810539.9995823, - "isdir": false, - "ctime": 1436810539.9995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0805824, - "inode": 524614, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1348", - "xusr": false, - "atime": 1436810539.0805824, - "isdir": false, - "ctime": 1436810539.0805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1425824, - "inode": 527182, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3916", - "xusr": false, - "atime": 1436810541.1425824, - "isdir": false, - "ctime": 1436810541.1425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1685822, - "inode": 523412, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/146", - "xusr": false, - "atime": 1436810538.1685822, - "isdir": false, - "ctime": 1436810538.1685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3445823, - "inode": 524974, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1708", - "xusr": false, - "atime": 1436810539.3445823, - "isdir": false, - "ctime": 1436810539.3445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4665823, - "inode": 523780, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/514", - "xusr": false, - "atime": 1436810538.4665823, - "isdir": false, - "ctime": 1436810538.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7995822, - "inode": 526705, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3439", - "xusr": false, - "atime": 1436810540.7995822, - "isdir": false, - "ctime": 1436810540.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4965823, - "inode": 526296, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3030", - "xusr": false, - "atime": 1436810540.4965823, - "isdir": false, - "ctime": 1436810540.4965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6305823, - "inode": 524006, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/740", - "xusr": false, - "atime": 1436810538.6305823, - "isdir": false, - "ctime": 1436810538.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9965823, - "inode": 525724, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2458", - "xusr": false, - "atime": 1436810539.9965823, - "isdir": false, - "ctime": 1436810539.9965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0405824, - "inode": 525783, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2517", - "xusr": false, - "atime": 1436810540.0405824, - "isdir": false, - "ctime": 1436810540.0405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1455822, - "inode": 524708, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1442", - "xusr": false, - "atime": 1436810539.1455822, - "isdir": false, - "ctime": 1436810539.1455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1445823, - "inode": 527184, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3918", - "xusr": false, - "atime": 1436810541.1445823, - "isdir": false, - "ctime": 1436810541.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5335822, - "inode": 527675, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4409", - "xusr": false, - "atime": 1436810541.5335822, - "isdir": false, - "ctime": 1436810541.5335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7475822, - "inode": 527969, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4703", - "xusr": false, - "atime": 1436810541.7475822, - "isdir": false, - "ctime": 1436810541.7475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9075823, - "inode": 528190, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4924", - "xusr": false, - "atime": 1436810541.9075823, - "isdir": false, - "ctime": 1436810541.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2235823, - "inode": 524820, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1554", - "xusr": false, - "atime": 1436810539.2235823, - "isdir": false, - "ctime": 1436810539.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7665823, - "inode": 525408, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2142", - "xusr": false, - "atime": 1436810539.7665823, - "isdir": false, - "ctime": 1436810539.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6825824, - "inode": 525316, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2050", - "xusr": false, - "atime": 1436810539.6825824, - "isdir": false, - "ctime": 1436810539.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3235824, - "inode": 526085, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2819", - "xusr": false, - "atime": 1436810540.3235824, - "isdir": false, - "ctime": 1436810540.3235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2555823, - "inode": 526004, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2738", - "xusr": false, - "atime": 1436810540.2555823, - "isdir": false, - "ctime": 1436810540.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7965822, - "inode": 528038, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4772", - "xusr": false, - "atime": 1436810541.7965822, - "isdir": false, - "ctime": 1436810541.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5995822, - "inode": 523964, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/698", - "xusr": false, - "atime": 1436810538.5995822, - "isdir": false, - "ctime": 1436810538.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5415823, - "inode": 525162, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1896", - "xusr": false, - "atime": 1436810539.5415823, - "isdir": false, - "ctime": 1436810539.5415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6195824, - "inode": 525249, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1983", - "xusr": false, - "atime": 1436810539.6195824, - "isdir": false, - "ctime": 1436810539.6195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0415823, - "inode": 527042, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3776", - "xusr": false, - "atime": 1436810541.0415823, - "isdir": false, - "ctime": 1436810541.0415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4065824, - "inode": 523705, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/439", - "xusr": false, - "atime": 1436810538.4065824, - "isdir": false, - "ctime": 1436810538.4065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5425823, - "inode": 527688, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4422", - "xusr": false, - "atime": 1436810541.5425823, - "isdir": false, - "ctime": 1436810541.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9055824, - "inode": 526853, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3587", - "xusr": false, - "atime": 1436810540.9055824, - "isdir": false, - "ctime": 1436810540.9055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6385822, - "inode": 524017, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/751", - "xusr": false, - "atime": 1436810538.6385822, - "isdir": false, - "ctime": 1436810538.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8805823, - "inode": 524335, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1069", - "xusr": false, - "atime": 1436810538.8805823, - "isdir": false, - "ctime": 1436810538.8805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5115824, - "inode": 523843, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/577", - "xusr": false, - "atime": 1436810538.5115824, - "isdir": false, - "ctime": 1436810538.5115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8205824, - "inode": 525479, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2213", - "xusr": false, - "atime": 1436810539.8205824, - "isdir": false, - "ctime": 1436810539.8205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6875823, - "inode": 527887, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4621", - "xusr": false, - "atime": 1436810541.6875823, - "isdir": false, - "ctime": 1436810541.6875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5865824, - "inode": 527749, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4483", - "xusr": false, - "atime": 1436810541.5865824, - "isdir": false, - "ctime": 1436810541.5865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0015824, - "inode": 525731, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2465", - "xusr": false, - "atime": 1436810540.0015824, - "isdir": false, - "ctime": 1436810540.0015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2505822, - "inode": 527328, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4062", - "xusr": false, - "atime": 1436810541.2505822, - "isdir": false, - "ctime": 1436810541.2505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8005824, - "inode": 526706, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3440", - "xusr": false, - "atime": 1436810540.8005824, - "isdir": false, - "ctime": 1436810540.8005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5285823, - "inode": 527668, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4402", - "xusr": false, - "atime": 1436810541.5285823, - "isdir": false, - "ctime": 1436810541.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6525824, - "inode": 524036, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/770", - "xusr": false, - "atime": 1436810538.6525824, - "isdir": false, - "ctime": 1436810538.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2195823, - "inode": 523484, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/218", - "xusr": false, - "atime": 1436810538.2195823, - "isdir": false, - "ctime": 1436810538.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9035823, - "inode": 528184, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4918", - "xusr": false, - "atime": 1436810541.9035823, - "isdir": false, - "ctime": 1436810541.9035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1335824, - "inode": 525873, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2607", - "xusr": false, - "atime": 1436810540.1335824, - "isdir": false, - "ctime": 1436810540.1335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7665823, - "inode": 524185, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/919", - "xusr": false, - "atime": 1436810538.7665823, - "isdir": false, - "ctime": 1436810538.7665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6935823, - "inode": 524091, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/825", - "xusr": false, - "atime": 1436810538.6935823, - "isdir": false, - "ctime": 1436810538.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6365824, - "inode": 524014, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/748", - "xusr": false, - "atime": 1436810538.6365824, - "isdir": false, - "ctime": 1436810538.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8375823, - "inode": 524277, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1011", - "xusr": false, - "atime": 1436810538.8375823, - "isdir": false, - "ctime": 1436810538.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3155823, - "inode": 524947, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1681", - "xusr": false, - "atime": 1436810539.3155823, - "isdir": false, - "ctime": 1436810539.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3685822, - "inode": 526148, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2882", - "xusr": false, - "atime": 1436810540.3685822, - "isdir": false, - "ctime": 1436810540.3685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8155823, - "inode": 528063, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4797", - "xusr": false, - "atime": 1436810541.8155823, - "isdir": false, - "ctime": 1436810541.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1245823, - "inode": 527157, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3891", - "xusr": false, - "atime": 1436810541.1245823, - "isdir": false, - "ctime": 1436810541.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9645822, - "inode": 526937, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3671", - "xusr": false, - "atime": 1436810540.9645822, - "isdir": false, - "ctime": 1436810540.9645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9125824, - "inode": 528197, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4931", - "xusr": false, - "atime": 1436810541.9125824, - "isdir": false, - "ctime": 1436810541.9125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8845823, - "inode": 525570, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2304", - "xusr": false, - "atime": 1436810539.8845823, - "isdir": false, - "ctime": 1436810539.8845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2875824, - "inode": 527381, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4115", - "xusr": false, - "atime": 1436810541.2875824, - "isdir": false, - "ctime": 1436810541.2875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6065824, - "inode": 523973, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/707", - "xusr": false, - "atime": 1436810538.6065824, - "isdir": false, - "ctime": 1436810538.6065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8765824, - "inode": 526813, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3547", - "xusr": false, - "atime": 1436810540.8765824, - "isdir": false, - "ctime": 1436810540.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1945822, - "inode": 524778, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1512", - "xusr": false, - "atime": 1436810539.1945822, - "isdir": false, - "ctime": 1436810539.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7525823, - "inode": 525390, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2124", - "xusr": false, - "atime": 1436810539.7525823, - "isdir": false, - "ctime": 1436810539.7525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5465822, - "inode": 523891, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/625", - "xusr": false, - "atime": 1436810538.5465822, - "isdir": false, - "ctime": 1436810538.5465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8375823, - "inode": 525504, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2238", - "xusr": false, - "atime": 1436810539.8375823, - "isdir": false, - "ctime": 1436810539.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8785822, - "inode": 525561, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2295", - "xusr": false, - "atime": 1436810539.8785822, - "isdir": false, - "ctime": 1436810539.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6445823, - "inode": 527827, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4561", - "xusr": false, - "atime": 1436810541.6445823, - "isdir": false, - "ctime": 1436810541.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5485823, - "inode": 527695, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4429", - "xusr": false, - "atime": 1436810541.5485823, - "isdir": false, - "ctime": 1436810541.5485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2235823, - "inode": 527291, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4025", - "xusr": false, - "atime": 1436810541.2235823, - "isdir": false, - "ctime": 1436810541.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5245824, - "inode": 525143, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1877", - "xusr": false, - "atime": 1436810539.5245824, - "isdir": false, - "ctime": 1436810539.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3115823, - "inode": 524943, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1677", - "xusr": false, - "atime": 1436810539.3115823, - "isdir": false, - "ctime": 1436810539.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2475822, - "inode": 523524, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/258", - "xusr": false, - "atime": 1436810538.2475822, - "isdir": false, - "ctime": 1436810538.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8675823, - "inode": 528133, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4867", - "xusr": false, - "atime": 1436810541.8675823, - "isdir": false, - "ctime": 1436810541.8675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0635824, - "inode": 524590, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1324", - "xusr": false, - "atime": 1436810539.0635824, - "isdir": false, - "ctime": 1436810539.0635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3825824, - "inode": 527475, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4209", - "xusr": false, - "atime": 1436810541.3825824, - "isdir": false, - "ctime": 1436810541.3825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9305823, - "inode": 526889, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3623", - "xusr": false, - "atime": 1436810540.9305823, - "isdir": false, - "ctime": 1436810540.9305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2215824, - "inode": 523488, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/222", - "xusr": false, - "atime": 1436810538.2215824, - "isdir": false, - "ctime": 1436810538.2215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2855823, - "inode": 524908, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1642", - "xusr": false, - "atime": 1436810539.2855823, - "isdir": false, - "ctime": 1436810539.2855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4485824, - "inode": 527558, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4292", - "xusr": false, - "atime": 1436810541.4485824, - "isdir": false, - "ctime": 1436810541.4485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4195824, - "inode": 523722, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/456", - "xusr": false, - "atime": 1436810538.4195824, - "isdir": false, - "ctime": 1436810538.4195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8955822, - "inode": 524355, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1089", - "xusr": false, - "atime": 1436810538.8955822, - "isdir": false, - "ctime": 1436810538.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1845822, - "inode": 527236, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3970", - "xusr": false, - "atime": 1436810541.1845822, - "isdir": false, - "ctime": 1436810541.1845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6805823, - "inode": 527877, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4611", - "xusr": false, - "atime": 1436810541.6805823, - "isdir": false, - "ctime": 1436810541.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5245824, - "inode": 523861, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/595", - "xusr": false, - "atime": 1436810538.5245824, - "isdir": false, - "ctime": 1436810538.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2305822, - "inode": 524829, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1563", - "xusr": false, - "atime": 1436810539.2305822, - "isdir": false, - "ctime": 1436810539.2305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7075822, - "inode": 527915, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4649", - "xusr": false, - "atime": 1436810541.7075822, - "isdir": false, - "ctime": 1436810541.7075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6585822, - "inode": 524043, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/777", - "xusr": false, - "atime": 1436810538.6585822, - "isdir": false, - "ctime": 1436810538.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0815823, - "inode": 527098, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3832", - "xusr": false, - "atime": 1436810541.0815823, - "isdir": false, - "ctime": 1436810541.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8505824, - "inode": 525521, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2255", - "xusr": false, - "atime": 1436810539.8505824, - "isdir": false, - "ctime": 1436810539.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0545824, - "inode": 524576, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1310", - "xusr": false, - "atime": 1436810539.0545824, - "isdir": false, - "ctime": 1436810539.0545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9525824, - "inode": 524433, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1167", - "xusr": false, - "atime": 1436810538.9525824, - "isdir": false, - "ctime": 1436810538.9525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0915823, - "inode": 527112, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3846", - "xusr": false, - "atime": 1436810541.0915823, - "isdir": false, - "ctime": 1436810541.0915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4445822, - "inode": 527552, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4286", - "xusr": false, - "atime": 1436810541.4445822, - "isdir": false, - "ctime": 1436810541.4445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0905824, - "inode": 523304, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/38", - "xusr": false, - "atime": 1436810538.0905824, - "isdir": false, - "ctime": 1436810538.0905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2435822, - "inode": 525989, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2723", - "xusr": false, - "atime": 1436810540.2435822, - "isdir": false, - "ctime": 1436810540.2435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7655823, - "inode": 526656, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3390", - "xusr": false, - "atime": 1436810540.7655823, - "isdir": false, - "ctime": 1436810540.7655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6965823, - "inode": 527899, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4633", - "xusr": false, - "atime": 1436810541.6965823, - "isdir": false, - "ctime": 1436810541.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2765822, - "inode": 523565, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/299", - "xusr": false, - "atime": 1436810538.2765822, - "isdir": false, - "ctime": 1436810538.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3945823, - "inode": 523688, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/422", - "xusr": false, - "atime": 1436810538.3945823, - "isdir": false, - "ctime": 1436810538.3945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6965823, - "inode": 526560, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3294", - "xusr": false, - "atime": 1436810540.6965823, - "isdir": false, - "ctime": 1436810540.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8115823, - "inode": 525466, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2200", - "xusr": false, - "atime": 1436810539.8115823, - "isdir": false, - "ctime": 1436810539.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9405823, - "inode": 524416, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1150", - "xusr": false, - "atime": 1436810538.9405823, - "isdir": false, - "ctime": 1436810538.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2885823, - "inode": 524913, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1647", - "xusr": false, - "atime": 1436810539.2885823, - "isdir": false, - "ctime": 1436810539.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8105824, - "inode": 524241, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/975", - "xusr": false, - "atime": 1436810538.8105824, - "isdir": false, - "ctime": 1436810538.8105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8025823, - "inode": 525454, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2188", - "xusr": false, - "atime": 1436810539.8025823, - "isdir": false, - "ctime": 1436810539.8025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8095822, - "inode": 525464, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2198", - "xusr": false, - "atime": 1436810539.8095822, - "isdir": false, - "ctime": 1436810539.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2535822, - "inode": 527333, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4067", - "xusr": false, - "atime": 1436810541.2535822, - "isdir": false, - "ctime": 1436810541.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8985822, - "inode": 528177, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4911", - "xusr": false, - "atime": 1436810541.8985822, - "isdir": false, - "ctime": 1436810541.8985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1465824, - "inode": 527188, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3922", - "xusr": false, - "atime": 1436810541.1465824, - "isdir": false, - "ctime": 1436810541.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5905824, - "inode": 527755, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4489", - "xusr": false, - "atime": 1436810541.5905824, - "isdir": false, - "ctime": 1436810541.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7185824, - "inode": 526592, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3326", - "xusr": false, - "atime": 1436810540.7185824, - "isdir": false, - "ctime": 1436810540.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1475823, - "inode": 527189, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3923", - "xusr": false, - "atime": 1436810541.1475823, - "isdir": false, - "ctime": 1436810541.1475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8305824, - "inode": 528084, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4818", - "xusr": false, - "atime": 1436810541.8305824, - "isdir": false, - "ctime": 1436810541.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3845823, - "inode": 525010, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1744", - "xusr": false, - "atime": 1436810539.3845823, - "isdir": false, - "ctime": 1436810539.3845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9625823, - "inode": 525676, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2410", - "xusr": false, - "atime": 1436810539.9625823, - "isdir": false, - "ctime": 1436810539.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9275823, - "inode": 528218, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4952", - "xusr": false, - "atime": 1436810541.9275823, - "isdir": false, - "ctime": 1436810541.9275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7515824, - "inode": 526637, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3371", - "xusr": false, - "atime": 1436810540.7515824, - "isdir": false, - "ctime": 1436810540.7515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3265824, - "inode": 523622, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/356", - "xusr": false, - "atime": 1436810538.3265824, - "isdir": false, - "ctime": 1436810538.3265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0105822, - "inode": 525743, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2477", - "xusr": false, - "atime": 1436810540.0105822, - "isdir": false, - "ctime": 1436810540.0105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0565822, - "inode": 524580, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1314", - "xusr": false, - "atime": 1436810539.0565822, - "isdir": false, - "ctime": 1436810539.0565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4025824, - "inode": 527496, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4230", - "xusr": false, - "atime": 1436810541.4025824, - "isdir": false, - "ctime": 1436810541.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0085824, - "inode": 526997, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3731", - "xusr": false, - "atime": 1436810541.0085824, - "isdir": false, - "ctime": 1436810541.0085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8795824, - "inode": 528150, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4884", - "xusr": false, - "atime": 1436810541.8795824, - "isdir": false, - "ctime": 1436810541.8795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9865823, - "inode": 525709, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2443", - "xusr": false, - "atime": 1436810539.9865823, - "isdir": false, - "ctime": 1436810539.9865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4255824, - "inode": 525055, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1789", - "xusr": false, - "atime": 1436810539.4255824, - "isdir": false, - "ctime": 1436810539.4255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3095822, - "inode": 526066, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2800", - "xusr": false, - "atime": 1436810540.3095822, - "isdir": false, - "ctime": 1436810540.3095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2815824, - "inode": 524903, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1637", - "xusr": false, - "atime": 1436810539.2815824, - "isdir": false, - "ctime": 1436810539.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8645823, - "inode": 528130, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4864", - "xusr": false, - "atime": 1436810541.8645823, - "isdir": false, - "ctime": 1436810541.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7355824, - "inode": 525372, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2106", - "xusr": false, - "atime": 1436810539.7355824, - "isdir": false, - "ctime": 1436810539.7355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2625823, - "inode": 523545, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/279", - "xusr": false, - "atime": 1436810538.2625823, - "isdir": false, - "ctime": 1436810538.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7165823, - "inode": 526589, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3323", - "xusr": false, - "atime": 1436810540.7165823, - "isdir": false, - "ctime": 1436810540.7165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5915823, - "inode": 527756, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4490", - "xusr": false, - "atime": 1436810541.5915823, - "isdir": false, - "ctime": 1436810541.5915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1375823, - "inode": 524696, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1430", - "xusr": false, - "atime": 1436810539.1375823, - "isdir": false, - "ctime": 1436810539.1375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5185823, - "inode": 527655, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4389", - "xusr": false, - "atime": 1436810541.5185823, - "isdir": false, - "ctime": 1436810541.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5115824, - "inode": 526309, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3043", - "xusr": false, - "atime": 1436810540.5115824, - "isdir": false, - "ctime": 1436810540.5115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9355824, - "inode": 525640, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2374", - "xusr": false, - "atime": 1436810539.9355824, - "isdir": false, - "ctime": 1436810539.9355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5625823, - "inode": 525185, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1919", - "xusr": false, - "atime": 1436810539.5625823, - "isdir": false, - "ctime": 1436810539.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8125823, - "inode": 528060, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4794", - "xusr": false, - "atime": 1436810541.8125823, - "isdir": false, - "ctime": 1436810541.8125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4715824, - "inode": 527590, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4324", - "xusr": false, - "atime": 1436810541.4715824, - "isdir": false, - "ctime": 1436810541.4715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0325823, - "inode": 524545, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1279", - "xusr": false, - "atime": 1436810539.0325823, - "isdir": false, - "ctime": 1436810539.0325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3825824, - "inode": 523676, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/410", - "xusr": false, - "atime": 1436810538.3825824, - "isdir": false, - "ctime": 1436810538.3825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9115822, - "inode": 525608, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2342", - "xusr": false, - "atime": 1436810539.9115822, - "isdir": false, - "ctime": 1436810539.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2325823, - "inode": 523502, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/236", - "xusr": false, - "atime": 1436810538.2325823, - "isdir": false, - "ctime": 1436810538.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5775824, - "inode": 526394, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3128", - "xusr": false, - "atime": 1436810540.5775824, - "isdir": false, - "ctime": 1436810540.5775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9555824, - "inode": 528257, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4991", - "xusr": false, - "atime": 1436810541.9555824, - "isdir": false, - "ctime": 1436810541.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3975823, - "inode": 525023, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1757", - "xusr": false, - "atime": 1436810539.3975823, - "isdir": false, - "ctime": 1436810539.3975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0455823, - "inode": 525790, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2524", - "xusr": false, - "atime": 1436810540.0455823, - "isdir": false, - "ctime": 1436810540.0455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8515823, - "inode": 524296, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1030", - "xusr": false, - "atime": 1436810538.8515823, - "isdir": false, - "ctime": 1436810538.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3255823, - "inode": 527422, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4156", - "xusr": false, - "atime": 1436810541.3255823, - "isdir": false, - "ctime": 1436810541.3255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9535823, - "inode": 525664, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2398", - "xusr": false, - "atime": 1436810539.9535823, - "isdir": false, - "ctime": 1436810539.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6425824, - "inode": 526484, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3218", - "xusr": false, - "atime": 1436810540.6425824, - "isdir": false, - "ctime": 1436810540.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5395823, - "inode": 523881, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/615", - "xusr": false, - "atime": 1436810538.5395823, - "isdir": false, - "ctime": 1436810538.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0815823, - "inode": 525825, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2559", - "xusr": false, - "atime": 1436810540.0815823, - "isdir": false, - "ctime": 1436810540.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8725822, - "inode": 525553, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2287", - "xusr": false, - "atime": 1436810539.8725822, - "isdir": false, - "ctime": 1436810539.8725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0085824, - "inode": 525740, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2474", - "xusr": false, - "atime": 1436810540.0085824, - "isdir": false, - "ctime": 1436810540.0085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4145823, - "inode": 525042, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1776", - "xusr": false, - "atime": 1436810539.4145823, - "isdir": false, - "ctime": 1436810539.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3615823, - "inode": 526137, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2871", - "xusr": false, - "atime": 1436810540.3615823, - "isdir": false, - "ctime": 1436810540.3615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5305824, - "inode": 527671, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4405", - "xusr": false, - "atime": 1436810541.5305824, - "isdir": false, - "ctime": 1436810541.5305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8665824, - "inode": 524316, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1050", - "xusr": false, - "atime": 1436810538.8665824, - "isdir": false, - "ctime": 1436810538.8665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6525824, - "inode": 524035, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/769", - "xusr": false, - "atime": 1436810538.6525824, - "isdir": false, - "ctime": 1436810538.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9295824, - "inode": 525631, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2365", - "xusr": false, - "atime": 1436810539.9295824, - "isdir": false, - "ctime": 1436810539.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0295823, - "inode": 527025, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3759", - "xusr": false, - "atime": 1436810541.0295823, - "isdir": false, - "ctime": 1436810541.0295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6725824, - "inode": 524063, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/797", - "xusr": false, - "atime": 1436810538.6725824, - "isdir": false, - "ctime": 1436810538.6725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4065824, - "inode": 526202, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2936", - "xusr": false, - "atime": 1436810540.4065824, - "isdir": false, - "ctime": 1436810540.4065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2755823, - "inode": 524894, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1628", - "xusr": false, - "atime": 1436810539.2755823, - "isdir": false, - "ctime": 1436810539.2755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8285823, - "inode": 524265, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/999", - "xusr": false, - "atime": 1436810538.8285823, - "isdir": false, - "ctime": 1436810538.8285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5235822, - "inode": 523859, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/593", - "xusr": false, - "atime": 1436810538.5235822, - "isdir": false, - "ctime": 1436810538.5235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5665822, - "inode": 526378, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3112", - "xusr": false, - "atime": 1436810540.5665822, - "isdir": false, - "ctime": 1436810540.5665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8025823, - "inode": 528046, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4780", - "xusr": false, - "atime": 1436810541.8025823, - "isdir": false, - "ctime": 1436810541.8025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5295823, - "inode": 526328, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3062", - "xusr": false, - "atime": 1436810540.5295823, - "isdir": false, - "ctime": 1436810540.5295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2995822, - "inode": 524928, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1662", - "xusr": false, - "atime": 1436810539.2995822, - "isdir": false, - "ctime": 1436810539.2995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0295823, - "inode": 524541, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1275", - "xusr": false, - "atime": 1436810539.0295823, - "isdir": false, - "ctime": 1436810539.0295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2075822, - "inode": 527269, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4003", - "xusr": false, - "atime": 1436810541.2075822, - "isdir": false, - "ctime": 1436810541.2075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2455823, - "inode": 524851, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1585", - "xusr": false, - "atime": 1436810539.2455823, - "isdir": false, - "ctime": 1436810539.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5545824, - "inode": 525174, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1908", - "xusr": false, - "atime": 1436810539.5545824, - "isdir": false, - "ctime": 1436810539.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1045823, - "inode": 527129, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3863", - "xusr": false, - "atime": 1436810541.1045823, - "isdir": false, - "ctime": 1436810541.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2185824, - "inode": 524812, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1546", - "xusr": false, - "atime": 1436810539.2185824, - "isdir": false, - "ctime": 1436810539.2185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1445823, - "inode": 527185, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3919", - "xusr": false, - "atime": 1436810541.1445823, - "isdir": false, - "ctime": 1436810541.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4835823, - "inode": 526288, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3022", - "xusr": false, - "atime": 1436810540.4835823, - "isdir": false, - "ctime": 1436810540.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8705823, - "inode": 524321, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1055", - "xusr": false, - "atime": 1436810538.8705823, - "isdir": false, - "ctime": 1436810538.8705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1035824, - "inode": 523321, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/55", - "xusr": false, - "atime": 1436810538.1035824, - "isdir": false, - "ctime": 1436810538.1035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5085824, - "inode": 523839, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/573", - "xusr": false, - "atime": 1436810538.5085824, - "isdir": false, - "ctime": 1436810538.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8065822, - "inode": 526714, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3448", - "xusr": false, - "atime": 1436810540.8065822, - "isdir": false, - "ctime": 1436810540.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0895822, - "inode": 525832, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2566", - "xusr": false, - "atime": 1436810540.0895822, - "isdir": false, - "ctime": 1436810540.0895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6015823, - "inode": 525225, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1959", - "xusr": false, - "atime": 1436810539.6015823, - "isdir": false, - "ctime": 1436810539.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7815824, - "inode": 524203, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/937", - "xusr": false, - "atime": 1436810538.7815824, - "isdir": false, - "ctime": 1436810538.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1065824, - "inode": 527132, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3866", - "xusr": false, - "atime": 1436810541.1065824, - "isdir": false, - "ctime": 1436810541.1065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7135823, - "inode": 526585, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3319", - "xusr": false, - "atime": 1436810540.7135823, - "isdir": false, - "ctime": 1436810540.7135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9395823, - "inode": 524415, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1149", - "xusr": false, - "atime": 1436810538.9395823, - "isdir": false, - "ctime": 1436810538.9395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0175824, - "inode": 525753, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2487", - "xusr": false, - "atime": 1436810540.0175824, - "isdir": false, - "ctime": 1436810540.0175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8005824, - "inode": 524227, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/961", - "xusr": false, - "atime": 1436810538.8005824, - "isdir": false, - "ctime": 1436810538.8005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7225823, - "inode": 527935, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4669", - "xusr": false, - "atime": 1436810541.7225823, - "isdir": false, - "ctime": 1436810541.7225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9665823, - "inode": 525681, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2415", - "xusr": false, - "atime": 1436810539.9665823, - "isdir": false, - "ctime": 1436810539.9665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9475822, - "inode": 528246, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4980", - "xusr": false, - "atime": 1436810541.9475822, - "isdir": false, - "ctime": 1436810541.9475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5055823, - "inode": 525126, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1860", - "xusr": false, - "atime": 1436810539.5055823, - "isdir": false, - "ctime": 1436810539.5055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6375823, - "inode": 525273, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2007", - "xusr": false, - "atime": 1436810539.6375823, - "isdir": false, - "ctime": 1436810539.6375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2375822, - "inode": 524840, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1574", - "xusr": false, - "atime": 1436810539.2375822, - "isdir": false, - "ctime": 1436810539.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9575822, - "inode": 525670, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2404", - "xusr": false, - "atime": 1436810539.9575822, - "isdir": false, - "ctime": 1436810539.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7215824, - "inode": 525358, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2092", - "xusr": false, - "atime": 1436810539.7215824, - "isdir": false, - "ctime": 1436810539.7215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6145823, - "inode": 525243, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1977", - "xusr": false, - "atime": 1436810539.6145823, - "isdir": false, - "ctime": 1436810539.6145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0545824, - "inode": 527059, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3793", - "xusr": false, - "atime": 1436810541.0545824, - "isdir": false, - "ctime": 1436810541.0545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1895823, - "inode": 524771, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1505", - "xusr": false, - "atime": 1436810539.1895823, - "isdir": false, - "ctime": 1436810539.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5695822, - "inode": 523922, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/656", - "xusr": false, - "atime": 1436810538.5695822, - "isdir": false, - "ctime": 1436810538.5695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6625824, - "inode": 525300, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2034", - "xusr": false, - "atime": 1436810539.6625824, - "isdir": false, - "ctime": 1436810539.6625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1705823, - "inode": 527219, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3953", - "xusr": false, - "atime": 1436810541.1705823, - "isdir": false, - "ctime": 1436810541.1705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2315824, - "inode": 525978, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2712", - "xusr": false, - "atime": 1436810540.2315824, - "isdir": false, - "ctime": 1436810540.2315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8655822, - "inode": 525543, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2277", - "xusr": false, - "atime": 1436810539.8655822, - "isdir": false, - "ctime": 1436810539.8655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4835823, - "inode": 527606, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4340", - "xusr": false, - "atime": 1436810541.4835823, - "isdir": false, - "ctime": 1436810541.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7305822, - "inode": 526608, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3342", - "xusr": false, - "atime": 1436810540.7305822, - "isdir": false, - "ctime": 1436810540.7305822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4085822, - "inode": 525034, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1768", - "xusr": false, - "atime": 1436810539.4085822, - "isdir": false, - "ctime": 1436810539.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1115823, - "inode": 523331, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/65", - "xusr": false, - "atime": 1436810538.1115823, - "isdir": false, - "ctime": 1436810538.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9555824, - "inode": 524438, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1172", - "xusr": false, - "atime": 1436810538.9555824, - "isdir": false, - "ctime": 1436810538.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7895823, - "inode": 525441, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2175", - "xusr": false, - "atime": 1436810539.7895823, - "isdir": false, - "ctime": 1436810539.7895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8445823, - "inode": 524287, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1021", - "xusr": false, - "atime": 1436810538.8445823, - "isdir": false, - "ctime": 1436810538.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2945824, - "inode": 523591, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/325", - "xusr": false, - "atime": 1436810538.2945824, - "isdir": false, - "ctime": 1436810538.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5165823, - "inode": 526315, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3049", - "xusr": false, - "atime": 1436810540.5165823, - "isdir": false, - "ctime": 1436810540.5165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1385822, - "inode": 523369, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/103", - "xusr": false, - "atime": 1436810538.1385822, - "isdir": false, - "ctime": 1436810538.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6305823, - "inode": 526468, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3202", - "xusr": false, - "atime": 1436810540.6305823, - "isdir": false, - "ctime": 1436810540.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9715824, - "inode": 526946, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3680", - "xusr": false, - "atime": 1436810540.9715824, - "isdir": false, - "ctime": 1436810540.9715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3435824, - "inode": 526113, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2847", - "xusr": false, - "atime": 1436810540.3435824, - "isdir": false, - "ctime": 1436810540.3435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0645823, - "inode": 523268, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2", - "xusr": false, - "atime": 1436810538.0645823, - "isdir": false, - "ctime": 1436810538.0645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3165822, - "inode": 527417, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4151", - "xusr": false, - "atime": 1436810541.3165822, - "isdir": false, - "ctime": 1436810541.3165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0465822, - "inode": 527049, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3783", - "xusr": false, - "atime": 1436810541.0465822, - "isdir": false, - "ctime": 1436810541.0465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6335824, - "inode": 524010, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/744", - "xusr": false, - "atime": 1436810538.6335824, - "isdir": false, - "ctime": 1436810538.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1815822, - "inode": 527233, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3967", - "xusr": false, - "atime": 1436810541.1815822, - "isdir": false, - "ctime": 1436810541.1815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7055824, - "inode": 524108, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/842", - "xusr": false, - "atime": 1436810538.7055824, - "isdir": false, - "ctime": 1436810538.7055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0885823, - "inode": 525831, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2565", - "xusr": false, - "atime": 1436810540.0885823, - "isdir": false, - "ctime": 1436810540.0885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0945823, - "inode": 524635, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1369", - "xusr": false, - "atime": 1436810539.0945823, - "isdir": false, - "ctime": 1436810539.0945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8645823, - "inode": 525541, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2275", - "xusr": false, - "atime": 1436810539.8645823, - "isdir": false, - "ctime": 1436810539.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0795822, - "inode": 523289, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/23", - "xusr": false, - "atime": 1436810538.0795822, - "isdir": false, - "ctime": 1436810538.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4935822, - "inode": 527621, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4355", - "xusr": false, - "atime": 1436810541.4935822, - "isdir": false, - "ctime": 1436810541.4935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2125823, - "inode": 523476, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/210", - "xusr": false, - "atime": 1436810538.2125823, - "isdir": false, - "ctime": 1436810538.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4975822, - "inode": 527625, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4359", - "xusr": false, - "atime": 1436810541.4975822, - "isdir": false, - "ctime": 1436810541.4975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2235823, - "inode": 523490, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/224", - "xusr": false, - "atime": 1436810538.2235823, - "isdir": false, - "ctime": 1436810538.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0365822, - "inode": 524551, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1285", - "xusr": false, - "atime": 1436810539.0365822, - "isdir": false, - "ctime": 1436810539.0365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9085822, - "inode": 528192, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4926", - "xusr": false, - "atime": 1436810541.9085822, - "isdir": false, - "ctime": 1436810541.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6805823, - "inode": 526537, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3271", - "xusr": false, - "atime": 1436810540.6805823, - "isdir": false, - "ctime": 1436810540.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9865823, - "inode": 525710, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2444", - "xusr": false, - "atime": 1436810539.9865823, - "isdir": false, - "ctime": 1436810539.9865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6085823, - "inode": 523976, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/710", - "xusr": false, - "atime": 1436810538.6085823, - "isdir": false, - "ctime": 1436810538.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9575822, - "inode": 528259, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4993", - "xusr": false, - "atime": 1436810541.9575822, - "isdir": false, - "ctime": 1436810541.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6245823, - "inode": 527802, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4536", - "xusr": false, - "atime": 1436810541.6245823, - "isdir": false, - "ctime": 1436810541.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5565822, - "inode": 526364, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3098", - "xusr": false, - "atime": 1436810540.5565822, - "isdir": false, - "ctime": 1436810540.5565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8565824, - "inode": 526784, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3518", - "xusr": false, - "atime": 1436810540.8565824, - "isdir": false, - "ctime": 1436810540.8565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2025824, - "inode": 524789, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1523", - "xusr": false, - "atime": 1436810539.2025824, - "isdir": false, - "ctime": 1436810539.2025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3005824, - "inode": 526053, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2787", - "xusr": false, - "atime": 1436810540.3005824, - "isdir": false, - "ctime": 1436810540.3005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8325822, - "inode": 526750, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3484", - "xusr": false, - "atime": 1436810540.8325822, - "isdir": false, - "ctime": 1436810540.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6965823, - "inode": 527900, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4634", - "xusr": false, - "atime": 1436810541.6965823, - "isdir": false, - "ctime": 1436810541.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5055823, - "inode": 527637, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4371", - "xusr": false, - "atime": 1436810541.5055823, - "isdir": false, - "ctime": 1436810541.5055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4995823, - "inode": 526300, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3034", - "xusr": false, - "atime": 1436810540.4995823, - "isdir": false, - "ctime": 1436810540.4995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1845822, - "inode": 524763, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1497", - "xusr": false, - "atime": 1436810539.1845822, - "isdir": false, - "ctime": 1436810539.1845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8825824, - "inode": 525567, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2301", - "xusr": false, - "atime": 1436810539.8825824, - "isdir": false, - "ctime": 1436810539.8825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1145823, - "inode": 523335, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/69", - "xusr": false, - "atime": 1436810538.1145823, - "isdir": false, - "ctime": 1436810538.1145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4845824, - "inode": 525106, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1840", - "xusr": false, - "atime": 1436810539.4845824, - "isdir": false, - "ctime": 1436810539.4845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1035824, - "inode": 527128, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3862", - "xusr": false, - "atime": 1436810541.1035824, - "isdir": false, - "ctime": 1436810541.1035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7115824, - "inode": 526582, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3316", - "xusr": false, - "atime": 1436810540.7115824, - "isdir": false, - "ctime": 1436810540.7115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3275824, - "inode": 523623, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/357", - "xusr": false, - "atime": 1436810538.3275824, - "isdir": false, - "ctime": 1436810538.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7935822, - "inode": 525445, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2179", - "xusr": false, - "atime": 1436810539.7935822, - "isdir": false, - "ctime": 1436810539.7935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8465824, - "inode": 528105, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4839", - "xusr": false, - "atime": 1436810541.8465824, - "isdir": false, - "ctime": 1436810541.8465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7265823, - "inode": 525362, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2096", - "xusr": false, - "atime": 1436810539.7265823, - "isdir": false, - "ctime": 1436810539.7265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8935823, - "inode": 526836, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3570", - "xusr": false, - "atime": 1436810540.8935823, - "isdir": false, - "ctime": 1436810540.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5445824, - "inode": 525165, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1899", - "xusr": false, - "atime": 1436810539.5445824, - "isdir": false, - "ctime": 1436810539.5445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6715822, - "inode": 524062, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/796", - "xusr": false, - "atime": 1436810538.6715822, - "isdir": false, - "ctime": 1436810538.6715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0905824, - "inode": 524629, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1363", - "xusr": false, - "atime": 1436810539.0905824, - "isdir": false, - "ctime": 1436810539.0905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8075824, - "inode": 525461, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2195", - "xusr": false, - "atime": 1436810539.8075824, - "isdir": false, - "ctime": 1436810539.8075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7755823, - "inode": 526670, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3404", - "xusr": false, - "atime": 1436810540.7755823, - "isdir": false, - "ctime": 1436810540.7755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3395822, - "inode": 526107, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2841", - "xusr": false, - "atime": 1436810540.3395822, - "isdir": false, - "ctime": 1436810540.3395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9305823, - "inode": 524403, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1137", - "xusr": false, - "atime": 1436810538.9305823, - "isdir": false, - "ctime": 1436810538.9305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7435822, - "inode": 525381, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2115", - "xusr": false, - "atime": 1436810539.7435822, - "isdir": false, - "ctime": 1436810539.7435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9835823, - "inode": 524478, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1212", - "xusr": false, - "atime": 1436810538.9835823, - "isdir": false, - "ctime": 1436810538.9835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9505823, - "inode": 526917, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3651", - "xusr": false, - "atime": 1436810540.9505823, - "isdir": false, - "ctime": 1436810540.9505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1455822, - "inode": 524707, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1441", - "xusr": false, - "atime": 1436810539.1455822, - "isdir": false, - "ctime": 1436810539.1455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3045824, - "inode": 526059, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2793", - "xusr": false, - "atime": 1436810540.3045824, - "isdir": false, - "ctime": 1436810540.3045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4755824, - "inode": 523793, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/527", - "xusr": false, - "atime": 1436810538.4755824, - "isdir": false, - "ctime": 1436810538.4755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0765824, - "inode": 523285, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/19", - "xusr": false, - "atime": 1436810538.0765824, - "isdir": false, - "ctime": 1436810538.0765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2105823, - "inode": 525952, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2686", - "xusr": false, - "atime": 1436810540.2105823, - "isdir": false, - "ctime": 1436810540.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2985823, - "inode": 527397, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4131", - "xusr": false, - "atime": 1436810541.2985823, - "isdir": false, - "ctime": 1436810541.2985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1695824, - "inode": 523413, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/147", - "xusr": false, - "atime": 1436810538.1695824, - "isdir": false, - "ctime": 1436810538.1695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5545824, - "inode": 527703, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4437", - "xusr": false, - "atime": 1436810541.5545824, - "isdir": false, - "ctime": 1436810541.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9525824, - "inode": 525663, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2397", - "xusr": false, - "atime": 1436810539.9525824, - "isdir": false, - "ctime": 1436810539.9525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2505822, - "inode": 523528, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/262", - "xusr": false, - "atime": 1436810538.2505822, - "isdir": false, - "ctime": 1436810538.2505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3685822, - "inode": 526147, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2881", - "xusr": false, - "atime": 1436810540.3685822, - "isdir": false, - "ctime": 1436810540.3685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2925823, - "inode": 524919, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1653", - "xusr": false, - "atime": 1436810539.2925823, - "isdir": false, - "ctime": 1436810539.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5955822, - "inode": 526419, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3153", - "xusr": false, - "atime": 1436810540.5955822, - "isdir": false, - "ctime": 1436810540.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3855822, - "inode": 525011, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1745", - "xusr": false, - "atime": 1436810539.3855822, - "isdir": false, - "ctime": 1436810539.3855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9325824, - "inode": 526892, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3626", - "xusr": false, - "atime": 1436810540.9325824, - "isdir": false, - "ctime": 1436810540.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4415822, - "inode": 526247, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2981", - "xusr": false, - "atime": 1436810540.4415822, - "isdir": false, - "ctime": 1436810540.4415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4975822, - "inode": 523824, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/558", - "xusr": false, - "atime": 1436810538.4975822, - "isdir": false, - "ctime": 1436810538.4975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2695823, - "inode": 527355, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4089", - "xusr": false, - "atime": 1436810541.2695823, - "isdir": false, - "ctime": 1436810541.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0855823, - "inode": 527103, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3837", - "xusr": false, - "atime": 1436810541.0855823, - "isdir": false, - "ctime": 1436810541.0855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0875823, - "inode": 523301, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/35", - "xusr": false, - "atime": 1436810538.0875823, - "isdir": false, - "ctime": 1436810538.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8905823, - "inode": 526833, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3567", - "xusr": false, - "atime": 1436810540.8905823, - "isdir": false, - "ctime": 1436810540.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1575823, - "inode": 527203, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3937", - "xusr": false, - "atime": 1436810541.1575823, - "isdir": false, - "ctime": 1436810541.1575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2845824, - "inode": 524907, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1641", - "xusr": false, - "atime": 1436810539.2845824, - "isdir": false, - "ctime": 1436810539.2845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3985822, - "inode": 525024, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1758", - "xusr": false, - "atime": 1436810539.3985822, - "isdir": false, - "ctime": 1436810539.3985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1215823, - "inode": 524673, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1407", - "xusr": false, - "atime": 1436810539.1215823, - "isdir": false, - "ctime": 1436810539.1215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6165824, - "inode": 523986, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/720", - "xusr": false, - "atime": 1436810538.6165824, - "isdir": false, - "ctime": 1436810538.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9195824, - "inode": 526874, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3608", - "xusr": false, - "atime": 1436810540.9195824, - "isdir": false, - "ctime": 1436810540.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0335822, - "inode": 527030, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3764", - "xusr": false, - "atime": 1436810541.0335822, - "isdir": false, - "ctime": 1436810541.0335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3405824, - "inode": 526109, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2843", - "xusr": false, - "atime": 1436810540.3405824, - "isdir": false, - "ctime": 1436810540.3405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2985823, - "inode": 527396, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4130", - "xusr": false, - "atime": 1436810541.2985823, - "isdir": false, - "ctime": 1436810541.2985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7685823, - "inode": 525411, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2145", - "xusr": false, - "atime": 1436810539.7685823, - "isdir": false, - "ctime": 1436810539.7685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6375823, - "inode": 524015, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/749", - "xusr": false, - "atime": 1436810538.6375823, - "isdir": false, - "ctime": 1436810538.6375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1145823, - "inode": 524663, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1397", - "xusr": false, - "atime": 1436810539.1145823, - "isdir": false, - "ctime": 1436810539.1145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6115823, - "inode": 523980, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/714", - "xusr": false, - "atime": 1436810538.6115823, - "isdir": false, - "ctime": 1436810538.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4815824, - "inode": 525103, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1837", - "xusr": false, - "atime": 1436810539.4815824, - "isdir": false, - "ctime": 1436810539.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9005823, - "inode": 526846, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3580", - "xusr": false, - "atime": 1436810540.9005823, - "isdir": false, - "ctime": 1436810540.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8145823, - "inode": 526726, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3460", - "xusr": false, - "atime": 1436810540.8145823, - "isdir": false, - "ctime": 1436810540.8145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9045823, - "inode": 525599, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2333", - "xusr": false, - "atime": 1436810539.9045823, - "isdir": false, - "ctime": 1436810539.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9785824, - "inode": 524471, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1205", - "xusr": false, - "atime": 1436810538.9785824, - "isdir": false, - "ctime": 1436810538.9785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3665824, - "inode": 526145, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2879", - "xusr": false, - "atime": 1436810540.3665824, - "isdir": false, - "ctime": 1436810540.3665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0255823, - "inode": 525762, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2496", - "xusr": false, - "atime": 1436810540.0255823, - "isdir": false, - "ctime": 1436810540.0255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3905823, - "inode": 526178, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2912", - "xusr": false, - "atime": 1436810540.3905823, - "isdir": false, - "ctime": 1436810540.3905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4915824, - "inode": 523815, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/549", - "xusr": false, - "atime": 1436810538.4915824, - "isdir": false, - "ctime": 1436810538.4915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7995822, - "inode": 528042, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4776", - "xusr": false, - "atime": 1436810541.7995822, - "isdir": false, - "ctime": 1436810541.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1655824, - "inode": 525904, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2638", - "xusr": false, - "atime": 1436810540.1655824, - "isdir": false, - "ctime": 1436810540.1655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2805824, - "inode": 524901, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1635", - "xusr": false, - "atime": 1436810539.2805824, - "isdir": false, - "ctime": 1436810539.2805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8685822, - "inode": 526801, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3535", - "xusr": false, - "atime": 1436810540.8685822, - "isdir": false, - "ctime": 1436810540.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2325823, - "inode": 523503, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/237", - "xusr": false, - "atime": 1436810538.2325823, - "isdir": false, - "ctime": 1436810538.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0835824, - "inode": 524619, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1353", - "xusr": false, - "atime": 1436810539.0835824, - "isdir": false, - "ctime": 1436810539.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4765823, - "inode": 527597, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4331", - "xusr": false, - "atime": 1436810541.4765823, - "isdir": false, - "ctime": 1436810541.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6555824, - "inode": 526502, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3236", - "xusr": false, - "atime": 1436810540.6555824, - "isdir": false, - "ctime": 1436810540.6555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7105823, - "inode": 526580, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3314", - "xusr": false, - "atime": 1436810540.7105823, - "isdir": false, - "ctime": 1436810540.7105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7745824, - "inode": 528006, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4740", - "xusr": false, - "atime": 1436810541.7745824, - "isdir": false, - "ctime": 1436810541.7745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1565824, - "inode": 525896, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2630", - "xusr": false, - "atime": 1436810540.1565824, - "isdir": false, - "ctime": 1436810540.1565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9165823, - "inode": 528203, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4937", - "xusr": false, - "atime": 1436810541.9165823, - "isdir": false, - "ctime": 1436810541.9165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3935823, - "inode": 525017, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1751", - "xusr": false, - "atime": 1436810539.3935823, - "isdir": false, - "ctime": 1436810539.3935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5805824, - "inode": 525206, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1940", - "xusr": false, - "atime": 1436810539.5805824, - "isdir": false, - "ctime": 1436810539.5805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7915823, - "inode": 526693, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3427", - "xusr": false, - "atime": 1436810540.7915823, - "isdir": false, - "ctime": 1436810540.7915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1735823, - "inode": 525912, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2646", - "xusr": false, - "atime": 1436810540.1735823, - "isdir": false, - "ctime": 1436810540.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0065823, - "inode": 526993, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3727", - "xusr": false, - "atime": 1436810541.0065823, - "isdir": false, - "ctime": 1436810541.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9395823, - "inode": 526902, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3636", - "xusr": false, - "atime": 1436810540.9395823, - "isdir": false, - "ctime": 1436810540.9395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0085824, - "inode": 524512, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1246", - "xusr": false, - "atime": 1436810539.0085824, - "isdir": false, - "ctime": 1436810539.0085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3825824, - "inode": 523677, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/411", - "xusr": false, - "atime": 1436810538.3825824, - "isdir": false, - "ctime": 1436810538.3825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6175823, - "inode": 525247, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1981", - "xusr": false, - "atime": 1436810539.6175823, - "isdir": false, - "ctime": 1436810539.6175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7835822, - "inode": 525433, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2167", - "xusr": false, - "atime": 1436810539.7835822, - "isdir": false, - "ctime": 1436810539.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7805824, - "inode": 526678, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3412", - "xusr": false, - "atime": 1436810540.7805824, - "isdir": false, - "ctime": 1436810540.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9345822, - "inode": 525639, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2373", - "xusr": false, - "atime": 1436810539.9345822, - "isdir": false, - "ctime": 1436810539.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2395823, - "inode": 524842, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1576", - "xusr": false, - "atime": 1436810539.2395823, - "isdir": false, - "ctime": 1436810539.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0295823, - "inode": 527024, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3758", - "xusr": false, - "atime": 1436810541.0295823, - "isdir": false, - "ctime": 1436810541.0295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8435824, - "inode": 526766, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3500", - "xusr": false, - "atime": 1436810540.8435824, - "isdir": false, - "ctime": 1436810540.8435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8605824, - "inode": 525536, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2270", - "xusr": false, - "atime": 1436810539.8605824, - "isdir": false, - "ctime": 1436810539.8605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0225823, - "inode": 525758, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2492", - "xusr": false, - "atime": 1436810540.0225823, - "isdir": false, - "ctime": 1436810540.0225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6165824, - "inode": 523987, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/721", - "xusr": false, - "atime": 1436810538.6165824, - "isdir": false, - "ctime": 1436810538.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2405822, - "inode": 523514, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/248", - "xusr": false, - "atime": 1436810538.2405822, - "isdir": false, - "ctime": 1436810538.2405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0195823, - "inode": 524527, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1261", - "xusr": false, - "atime": 1436810539.0195823, - "isdir": false, - "ctime": 1436810539.0195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8245823, - "inode": 525485, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2219", - "xusr": false, - "atime": 1436810539.8245823, - "isdir": false, - "ctime": 1436810539.8245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5485823, - "inode": 526353, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3087", - "xusr": false, - "atime": 1436810540.5485823, - "isdir": false, - "ctime": 1436810540.5485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0335822, - "inode": 525773, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2507", - "xusr": false, - "atime": 1436810540.0335822, - "isdir": false, - "ctime": 1436810540.0335822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0165823, - "inode": 524523, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1257", - "xusr": false, - "atime": 1436810539.0165823, - "isdir": false, - "ctime": 1436810539.0165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6635823, - "inode": 524050, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/784", - "xusr": false, - "atime": 1436810538.6635823, - "isdir": false, - "ctime": 1436810538.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9465823, - "inode": 524425, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1159", - "xusr": false, - "atime": 1436810538.9465823, - "isdir": false, - "ctime": 1436810538.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4495823, - "inode": 523756, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/490", - "xusr": false, - "atime": 1436810538.4495823, - "isdir": false, - "ctime": 1436810538.4495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2665823, - "inode": 527351, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4085", - "xusr": false, - "atime": 1436810541.2665823, - "isdir": false, - "ctime": 1436810541.2665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7085824, - "inode": 524112, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/846", - "xusr": false, - "atime": 1436810538.7085824, - "isdir": false, - "ctime": 1436810538.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1705823, - "inode": 524743, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1477", - "xusr": false, - "atime": 1436810539.1705823, - "isdir": false, - "ctime": 1436810539.1705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1025822, - "inode": 527127, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3861", - "xusr": false, - "atime": 1436810541.1025822, - "isdir": false, - "ctime": 1436810541.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8275824, - "inode": 526744, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3478", - "xusr": false, - "atime": 1436810540.8275824, - "isdir": false, - "ctime": 1436810540.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0065823, - "inode": 524509, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1243", - "xusr": false, - "atime": 1436810539.0065823, - "isdir": false, - "ctime": 1436810539.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8305824, - "inode": 528083, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4817", - "xusr": false, - "atime": 1436810541.8305824, - "isdir": false, - "ctime": 1436810541.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3335824, - "inode": 524964, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1698", - "xusr": false, - "atime": 1436810539.3335824, - "isdir": false, - "ctime": 1436810539.3335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2735822, - "inode": 524891, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1625", - "xusr": false, - "atime": 1436810539.2735822, - "isdir": false, - "ctime": 1436810539.2735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0925822, - "inode": 524631, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1365", - "xusr": false, - "atime": 1436810539.0925822, - "isdir": false, - "ctime": 1436810539.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6905823, - "inode": 525323, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2057", - "xusr": false, - "atime": 1436810539.6905823, - "isdir": false, - "ctime": 1436810539.6905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7635822, - "inode": 526653, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3387", - "xusr": false, - "atime": 1436810540.7635822, - "isdir": false, - "ctime": 1436810540.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5185823, - "inode": 523852, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/586", - "xusr": false, - "atime": 1436810538.5185823, - "isdir": false, - "ctime": 1436810538.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6865823, - "inode": 525320, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2054", - "xusr": false, - "atime": 1436810539.6865823, - "isdir": false, - "ctime": 1436810539.6865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0505824, - "inode": 527054, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3788", - "xusr": false, - "atime": 1436810541.0505824, - "isdir": false, - "ctime": 1436810541.0505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8015823, - "inode": 524228, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/962", - "xusr": false, - "atime": 1436810538.8015823, - "isdir": false, - "ctime": 1436810538.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9835823, - "inode": 524477, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1211", - "xusr": false, - "atime": 1436810538.9835823, - "isdir": false, - "ctime": 1436810538.9835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8605824, - "inode": 528124, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4858", - "xusr": false, - "atime": 1436810541.8605824, - "isdir": false, - "ctime": 1436810541.8605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8355823, - "inode": 528091, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4825", - "xusr": false, - "atime": 1436810541.8355823, - "isdir": false, - "ctime": 1436810541.8355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5925822, - "inode": 523953, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/687", - "xusr": false, - "atime": 1436810538.5925822, - "isdir": false, - "ctime": 1436810538.5925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1835823, - "inode": 523433, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/167", - "xusr": false, - "atime": 1436810538.1835823, - "isdir": false, - "ctime": 1436810538.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0955822, - "inode": 527117, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3851", - "xusr": false, - "atime": 1436810541.0955822, - "isdir": false, - "ctime": 1436810541.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4795823, - "inode": 523799, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/533", - "xusr": false, - "atime": 1436810538.4795823, - "isdir": false, - "ctime": 1436810538.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7295823, - "inode": 525365, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2099", - "xusr": false, - "atime": 1436810539.7295823, - "isdir": false, - "ctime": 1436810539.7295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8265822, - "inode": 526742, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3476", - "xusr": false, - "atime": 1436810540.8265822, - "isdir": false, - "ctime": 1436810540.8265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2845824, - "inode": 527377, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4111", - "xusr": false, - "atime": 1436810541.2845824, - "isdir": false, - "ctime": 1436810541.2845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2325823, - "inode": 524832, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1566", - "xusr": false, - "atime": 1436810539.2325823, - "isdir": false, - "ctime": 1436810539.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1365824, - "inode": 523366, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/100", - "xusr": false, - "atime": 1436810538.1365824, - "isdir": false, - "ctime": 1436810538.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1805823, - "inode": 525919, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2653", - "xusr": false, - "atime": 1436810540.1805823, - "isdir": false, - "ctime": 1436810540.1805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0905824, - "inode": 525834, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2568", - "xusr": false, - "atime": 1436810540.0905824, - "isdir": false, - "ctime": 1436810540.0905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7765822, - "inode": 525422, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2156", - "xusr": false, - "atime": 1436810539.7765822, - "isdir": false, - "ctime": 1436810539.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6225822, - "inode": 523994, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/728", - "xusr": false, - "atime": 1436810538.6225822, - "isdir": false, - "ctime": 1436810538.6225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6585822, - "inode": 524044, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/778", - "xusr": false, - "atime": 1436810538.6585822, - "isdir": false, - "ctime": 1436810538.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4705822, - "inode": 525089, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1823", - "xusr": false, - "atime": 1436810539.4705822, - "isdir": false, - "ctime": 1436810539.4705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4205823, - "inode": 526221, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2955", - "xusr": false, - "atime": 1436810540.4205823, - "isdir": false, - "ctime": 1436810540.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2285824, - "inode": 525974, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2708", - "xusr": false, - "atime": 1436810540.2285824, - "isdir": false, - "ctime": 1436810540.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5955822, - "inode": 523958, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/692", - "xusr": false, - "atime": 1436810538.5955822, - "isdir": false, - "ctime": 1436810538.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3625822, - "inode": 527457, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4191", - "xusr": false, - "atime": 1436810541.3625822, - "isdir": false, - "ctime": 1436810541.3625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8995824, - "inode": 528179, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4913", - "xusr": false, - "atime": 1436810541.8995824, - "isdir": false, - "ctime": 1436810541.8995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5085824, - "inode": 523840, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/574", - "xusr": false, - "atime": 1436810538.5085824, - "isdir": false, - "ctime": 1436810538.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1845822, - "inode": 523435, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/169", - "xusr": false, - "atime": 1436810538.1845822, - "isdir": false, - "ctime": 1436810538.1845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0725822, - "inode": 523280, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/14", - "xusr": false, - "atime": 1436810538.0725822, - "isdir": false, - "ctime": 1436810538.0725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8615823, - "inode": 528125, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4859", - "xusr": false, - "atime": 1436810541.8615823, - "isdir": false, - "ctime": 1436810541.8615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4695823, - "inode": 526275, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3009", - "xusr": false, - "atime": 1436810540.4695823, - "isdir": false, - "ctime": 1436810540.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5515823, - "inode": 523897, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/631", - "xusr": false, - "atime": 1436810538.5515823, - "isdir": false, - "ctime": 1436810538.5515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9725823, - "inode": 526948, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3682", - "xusr": false, - "atime": 1436810540.9725823, - "isdir": false, - "ctime": 1436810540.9725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2825823, - "inode": 524904, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1638", - "xusr": false, - "atime": 1436810539.2825823, - "isdir": false, - "ctime": 1436810539.2825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7095823, - "inode": 524113, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/847", - "xusr": false, - "atime": 1436810538.7095823, - "isdir": false, - "ctime": 1436810538.7095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2885823, - "inode": 526038, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2772", - "xusr": false, - "atime": 1436810540.2885823, - "isdir": false, - "ctime": 1436810540.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0255823, - "inode": 524535, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1269", - "xusr": false, - "atime": 1436810539.0255823, - "isdir": false, - "ctime": 1436810539.0255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3785822, - "inode": 526162, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2896", - "xusr": false, - "atime": 1436810540.3785822, - "isdir": false, - "ctime": 1436810540.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7315824, - "inode": 527947, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4681", - "xusr": false, - "atime": 1436810541.7315824, - "isdir": false, - "ctime": 1436810541.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2115824, - "inode": 527275, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4009", - "xusr": false, - "atime": 1436810541.2115824, - "isdir": false, - "ctime": 1436810541.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8625822, - "inode": 525539, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2273", - "xusr": false, - "atime": 1436810539.8625822, - "isdir": false, - "ctime": 1436810539.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7025824, - "inode": 524104, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/838", - "xusr": false, - "atime": 1436810538.7025824, - "isdir": false, - "ctime": 1436810538.7025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4105823, - "inode": 525036, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1770", - "xusr": false, - "atime": 1436810539.4105823, - "isdir": false, - "ctime": 1436810539.4105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0305824, - "inode": 525769, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2503", - "xusr": false, - "atime": 1436810540.0305824, - "isdir": false, - "ctime": 1436810540.0305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1985824, - "inode": 523456, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/190", - "xusr": false, - "atime": 1436810538.1985824, - "isdir": false, - "ctime": 1436810538.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0895822, - "inode": 523303, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/37", - "xusr": false, - "atime": 1436810538.0895822, - "isdir": false, - "ctime": 1436810538.0895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3285823, - "inode": 524957, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1691", - "xusr": false, - "atime": 1436810539.3285823, - "isdir": false, - "ctime": 1436810539.3285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2635822, - "inode": 523547, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/281", - "xusr": false, - "atime": 1436810538.2635822, - "isdir": false, - "ctime": 1436810538.2635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5095823, - "inode": 527642, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4376", - "xusr": false, - "atime": 1436810541.5095823, - "isdir": false, - "ctime": 1436810541.5095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4345822, - "inode": 526239, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2973", - "xusr": false, - "atime": 1436810540.4345822, - "isdir": false, - "ctime": 1436810540.4345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4715824, - "inode": 523788, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/522", - "xusr": false, - "atime": 1436810538.4715824, - "isdir": false, - "ctime": 1436810538.4715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5185823, - "inode": 523853, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/587", - "xusr": false, - "atime": 1436810538.5185823, - "isdir": false, - "ctime": 1436810538.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7575824, - "inode": 527983, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4717", - "xusr": false, - "atime": 1436810541.7575824, - "isdir": false, - "ctime": 1436810541.7575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0465822, - "inode": 527048, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3782", - "xusr": false, - "atime": 1436810541.0465822, - "isdir": false, - "ctime": 1436810541.0465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4695823, - "inode": 525087, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1821", - "xusr": false, - "atime": 1436810539.4695823, - "isdir": false, - "ctime": 1436810539.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9115822, - "inode": 525607, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2341", - "xusr": false, - "atime": 1436810539.9115822, - "isdir": false, - "ctime": 1436810539.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9815824, - "inode": 526960, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3694", - "xusr": false, - "atime": 1436810540.9815824, - "isdir": false, - "ctime": 1436810540.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2285824, - "inode": 523497, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/231", - "xusr": false, - "atime": 1436810538.2285824, - "isdir": false, - "ctime": 1436810538.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6115823, - "inode": 525238, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1972", - "xusr": false, - "atime": 1436810539.6115823, - "isdir": false, - "ctime": 1436810539.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4195824, - "inode": 527518, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4252", - "xusr": false, - "atime": 1436810541.4195824, - "isdir": false, - "ctime": 1436810541.4195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6185822, - "inode": 527793, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4527", - "xusr": false, - "atime": 1436810541.6185822, - "isdir": false, - "ctime": 1436810541.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8735824, - "inode": 525554, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2288", - "xusr": false, - "atime": 1436810539.8735824, - "isdir": false, - "ctime": 1436810539.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6485822, - "inode": 527833, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4567", - "xusr": false, - "atime": 1436810541.6485822, - "isdir": false, - "ctime": 1436810541.6485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4705822, - "inode": 523786, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/520", - "xusr": false, - "atime": 1436810538.4705822, - "isdir": false, - "ctime": 1436810538.4705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6255822, - "inode": 523998, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/732", - "xusr": false, - "atime": 1436810538.6255822, - "isdir": false, - "ctime": 1436810538.6255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8745823, - "inode": 528143, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4877", - "xusr": false, - "atime": 1436810541.8745823, - "isdir": false, - "ctime": 1436810541.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3255823, - "inode": 526087, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2821", - "xusr": false, - "atime": 1436810540.3255823, - "isdir": false, - "ctime": 1436810540.3255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6285822, - "inode": 527806, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4540", - "xusr": false, - "atime": 1436810541.6285822, - "isdir": false, - "ctime": 1436810541.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5005822, - "inode": 525121, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1855", - "xusr": false, - "atime": 1436810539.5005822, - "isdir": false, - "ctime": 1436810539.5005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8665824, - "inode": 525545, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2279", - "xusr": false, - "atime": 1436810539.8665824, - "isdir": false, - "ctime": 1436810539.8665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2915823, - "inode": 524917, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1651", - "xusr": false, - "atime": 1436810539.2915823, - "isdir": false, - "ctime": 1436810539.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5245824, - "inode": 527663, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4397", - "xusr": false, - "atime": 1436810541.5245824, - "isdir": false, - "ctime": 1436810541.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4825823, - "inode": 523803, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/537", - "xusr": false, - "atime": 1436810538.4825823, - "isdir": false, - "ctime": 1436810538.4825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0465822, - "inode": 525792, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2526", - "xusr": false, - "atime": 1436810540.0465822, - "isdir": false, - "ctime": 1436810540.0465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9515824, - "inode": 524432, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1166", - "xusr": false, - "atime": 1436810538.9515824, - "isdir": false, - "ctime": 1436810538.9515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2195823, - "inode": 525962, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2696", - "xusr": false, - "atime": 1436810540.2195823, - "isdir": false, - "ctime": 1436810540.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2205822, - "inode": 527287, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4021", - "xusr": false, - "atime": 1436810541.2205822, - "isdir": false, - "ctime": 1436810541.2205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7255824, - "inode": 526602, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3336", - "xusr": false, - "atime": 1436810540.7255824, - "isdir": false, - "ctime": 1436810540.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7725823, - "inode": 528004, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4738", - "xusr": false, - "atime": 1436810541.7725823, - "isdir": false, - "ctime": 1436810541.7725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2615824, - "inode": 527344, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4078", - "xusr": false, - "atime": 1436810541.2615824, - "isdir": false, - "ctime": 1436810541.2615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0525823, - "inode": 524574, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1308", - "xusr": false, - "atime": 1436810539.0525823, - "isdir": false, - "ctime": 1436810539.0525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6245823, - "inode": 525255, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1989", - "xusr": false, - "atime": 1436810539.6245823, - "isdir": false, - "ctime": 1436810539.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0105822, - "inode": 524514, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1248", - "xusr": false, - "atime": 1436810539.0105822, - "isdir": false, - "ctime": 1436810539.0105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0685823, - "inode": 525812, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2546", - "xusr": false, - "atime": 1436810540.0685823, - "isdir": false, - "ctime": 1436810540.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9005823, - "inode": 525592, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2326", - "xusr": false, - "atime": 1436810539.9005823, - "isdir": false, - "ctime": 1436810539.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9185822, - "inode": 528205, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4939", - "xusr": false, - "atime": 1436810541.9185822, - "isdir": false, - "ctime": 1436810541.9185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5115824, - "inode": 527645, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4379", - "xusr": false, - "atime": 1436810541.5115824, - "isdir": false, - "ctime": 1436810541.5115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6055822, - "inode": 526433, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3167", - "xusr": false, - "atime": 1436810540.6055822, - "isdir": false, - "ctime": 1436810540.6055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8625822, - "inode": 524311, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1045", - "xusr": false, - "atime": 1436810538.8625822, - "isdir": false, - "ctime": 1436810538.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7905824, - "inode": 524213, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/947", - "xusr": false, - "atime": 1436810538.7905824, - "isdir": false, - "ctime": 1436810538.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3775823, - "inode": 525001, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1735", - "xusr": false, - "atime": 1436810539.3775823, - "isdir": false, - "ctime": 1436810539.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0125823, - "inode": 525745, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2479", - "xusr": false, - "atime": 1436810540.0125823, - "isdir": false, - "ctime": 1436810540.0125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7115824, - "inode": 524115, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/849", - "xusr": false, - "atime": 1436810538.7115824, - "isdir": false, - "ctime": 1436810538.7115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8175824, - "inode": 528067, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4801", - "xusr": false, - "atime": 1436810541.8175824, - "isdir": false, - "ctime": 1436810541.8175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9375823, - "inode": 528231, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4965", - "xusr": false, - "atime": 1436810541.9375823, - "isdir": false, - "ctime": 1436810541.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2835822, - "inode": 524905, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1639", - "xusr": false, - "atime": 1436810539.2835822, - "isdir": false, - "ctime": 1436810539.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9245822, - "inode": 524396, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1130", - "xusr": false, - "atime": 1436810538.9245822, - "isdir": false, - "ctime": 1436810538.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7895823, - "inode": 528028, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4762", - "xusr": false, - "atime": 1436810541.7895823, - "isdir": false, - "ctime": 1436810541.7895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3785822, - "inode": 526161, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2895", - "xusr": false, - "atime": 1436810540.3785822, - "isdir": false, - "ctime": 1436810540.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3815823, - "inode": 525006, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1740", - "xusr": false, - "atime": 1436810539.3815823, - "isdir": false, - "ctime": 1436810539.3815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6105824, - "inode": 527783, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4517", - "xusr": false, - "atime": 1436810541.6105824, - "isdir": false, - "ctime": 1436810541.6105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3105824, - "inode": 526067, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2801", - "xusr": false, - "atime": 1436810540.3105824, - "isdir": false, - "ctime": 1436810540.3105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1205823, - "inode": 524671, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1405", - "xusr": false, - "atime": 1436810539.1205823, - "isdir": false, - "ctime": 1436810539.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5245824, - "inode": 523860, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/594", - "xusr": false, - "atime": 1436810538.5245824, - "isdir": false, - "ctime": 1436810538.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9845824, - "inode": 526965, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3699", - "xusr": false, - "atime": 1436810540.9845824, - "isdir": false, - "ctime": 1436810540.9845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8095822, - "inode": 524239, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/973", - "xusr": false, - "atime": 1436810538.8095822, - "isdir": false, - "ctime": 1436810538.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8845823, - "inode": 524341, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1075", - "xusr": false, - "atime": 1436810538.8845823, - "isdir": false, - "ctime": 1436810538.8845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6415823, - "inode": 525277, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2011", - "xusr": false, - "atime": 1436810539.6415823, - "isdir": false, - "ctime": 1436810539.6415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6345823, - "inode": 526473, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3207", - "xusr": false, - "atime": 1436810540.6345823, - "isdir": false, - "ctime": 1436810540.6345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6135824, - "inode": 526444, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3178", - "xusr": false, - "atime": 1436810540.6135824, - "isdir": false, - "ctime": 1436810540.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3525822, - "inode": 523652, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/386", - "xusr": false, - "atime": 1436810538.3525822, - "isdir": false, - "ctime": 1436810538.3525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4735823, - "inode": 525092, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1826", - "xusr": false, - "atime": 1436810539.4735823, - "isdir": false, - "ctime": 1436810539.4735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9945824, - "inode": 524492, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1226", - "xusr": false, - "atime": 1436810538.9945824, - "isdir": false, - "ctime": 1436810538.9945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4235823, - "inode": 526225, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2959", - "xusr": false, - "atime": 1436810540.4235823, - "isdir": false, - "ctime": 1436810540.4235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3455822, - "inode": 526116, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2850", - "xusr": false, - "atime": 1436810540.3455822, - "isdir": false, - "ctime": 1436810540.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1615822, - "inode": 527207, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3941", - "xusr": false, - "atime": 1436810541.1615822, - "isdir": false, - "ctime": 1436810541.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4115822, - "inode": 525038, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1772", - "xusr": false, - "atime": 1436810539.4115822, - "isdir": false, - "ctime": 1436810539.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1115823, - "inode": 525853, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2587", - "xusr": false, - "atime": 1436810540.1115823, - "isdir": false, - "ctime": 1436810540.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8235824, - "inode": 525484, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2218", - "xusr": false, - "atime": 1436810539.8235824, - "isdir": false, - "ctime": 1436810539.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4505823, - "inode": 527561, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4295", - "xusr": false, - "atime": 1436810541.4505823, - "isdir": false, - "ctime": 1436810541.4505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6285822, - "inode": 524003, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/737", - "xusr": false, - "atime": 1436810538.6285822, - "isdir": false, - "ctime": 1436810538.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1345823, - "inode": 527171, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3905", - "xusr": false, - "atime": 1436810541.1345823, - "isdir": false, - "ctime": 1436810541.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3455822, - "inode": 523644, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/378", - "xusr": false, - "atime": 1436810538.3455822, - "isdir": false, - "ctime": 1436810538.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7935822, - "inode": 528033, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4767", - "xusr": false, - "atime": 1436810541.7935822, - "isdir": false, - "ctime": 1436810541.7935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2655823, - "inode": 527349, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4083", - "xusr": false, - "atime": 1436810541.2655823, - "isdir": false, - "ctime": 1436810541.2655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1805823, - "inode": 524758, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1492", - "xusr": false, - "atime": 1436810539.1805823, - "isdir": false, - "ctime": 1436810539.1805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0035822, - "inode": 524504, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1238", - "xusr": false, - "atime": 1436810539.0035822, - "isdir": false, - "ctime": 1436810539.0035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8235824, - "inode": 528073, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4807", - "xusr": false, - "atime": 1436810541.8235824, - "isdir": false, - "ctime": 1436810541.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7985823, - "inode": 525450, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2184", - "xusr": false, - "atime": 1436810539.7985823, - "isdir": false, - "ctime": 1436810539.7985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3435824, - "inode": 524973, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1707", - "xusr": false, - "atime": 1436810539.3435824, - "isdir": false, - "ctime": 1436810539.3435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7065823, - "inode": 527914, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4648", - "xusr": false, - "atime": 1436810541.7065823, - "isdir": false, - "ctime": 1436810541.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8495822, - "inode": 526774, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3508", - "xusr": false, - "atime": 1436810540.8495822, - "isdir": false, - "ctime": 1436810540.8495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9485824, - "inode": 526914, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3648", - "xusr": false, - "atime": 1436810540.9485824, - "isdir": false, - "ctime": 1436810540.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4005823, - "inode": 527494, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4228", - "xusr": false, - "atime": 1436810541.4005823, - "isdir": false, - "ctime": 1436810541.4005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0265822, - "inode": 524536, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1270", - "xusr": false, - "atime": 1436810539.0265822, - "isdir": false, - "ctime": 1436810539.0265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4145823, - "inode": 523715, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/449", - "xusr": false, - "atime": 1436810538.4145823, - "isdir": false, - "ctime": 1436810538.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8565824, - "inode": 528118, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4852", - "xusr": false, - "atime": 1436810541.8565824, - "isdir": false, - "ctime": 1436810541.8565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7565823, - "inode": 525395, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2129", - "xusr": false, - "atime": 1436810539.7565823, - "isdir": false, - "ctime": 1436810539.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6955824, - "inode": 526559, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3293", - "xusr": false, - "atime": 1436810540.6955824, - "isdir": false, - "ctime": 1436810540.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4695823, - "inode": 527586, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4320", - "xusr": false, - "atime": 1436810541.4695823, - "isdir": false, - "ctime": 1436810541.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2545824, - "inode": 523534, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/268", - "xusr": false, - "atime": 1436810538.2545824, - "isdir": false, - "ctime": 1436810538.2545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1655824, - "inode": 523407, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/141", - "xusr": false, - "atime": 1436810538.1655824, - "isdir": false, - "ctime": 1436810538.1655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7065823, - "inode": 526574, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3308", - "xusr": false, - "atime": 1436810540.7065823, - "isdir": false, - "ctime": 1436810540.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8445823, - "inode": 526768, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3502", - "xusr": false, - "atime": 1436810540.8445823, - "isdir": false, - "ctime": 1436810540.8445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7645824, - "inode": 526655, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3389", - "xusr": false, - "atime": 1436810540.7645824, - "isdir": false, - "ctime": 1436810540.7645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1505823, - "inode": 523386, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/120", - "xusr": false, - "atime": 1436810538.1505823, - "isdir": false, - "ctime": 1436810538.1505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9615824, - "inode": 525675, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2409", - "xusr": false, - "atime": 1436810539.9615824, - "isdir": false, - "ctime": 1436810539.9615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3945823, - "inode": 527486, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4220", - "xusr": false, - "atime": 1436810541.3945823, - "isdir": false, - "ctime": 1436810541.3945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8585823, - "inode": 524305, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1039", - "xusr": false, - "atime": 1436810538.8585823, - "isdir": false, - "ctime": 1436810538.8585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1575823, - "inode": 525897, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2631", - "xusr": false, - "atime": 1436810540.1575823, - "isdir": false, - "ctime": 1436810540.1575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6365824, - "inode": 524013, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/747", - "xusr": false, - "atime": 1436810538.6365824, - "isdir": false, - "ctime": 1436810538.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7315824, - "inode": 525367, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2101", - "xusr": false, - "atime": 1436810539.7315824, - "isdir": false, - "ctime": 1436810539.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1955824, - "inode": 527251, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3985", - "xusr": false, - "atime": 1436810541.1955824, - "isdir": false, - "ctime": 1436810541.1955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3225822, - "inode": 526083, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2817", - "xusr": false, - "atime": 1436810540.3225822, - "isdir": false, - "ctime": 1436810540.3225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0815823, - "inode": 523292, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/26", - "xusr": false, - "atime": 1436810538.0815823, - "isdir": false, - "ctime": 1436810538.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2035823, - "inode": 524790, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1524", - "xusr": false, - "atime": 1436810539.2035823, - "isdir": false, - "ctime": 1436810539.2035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4525824, - "inode": 525071, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1805", - "xusr": false, - "atime": 1436810539.4525824, - "isdir": false, - "ctime": 1436810539.4525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3305824, - "inode": 527429, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4163", - "xusr": false, - "atime": 1436810541.3305824, - "isdir": false, - "ctime": 1436810541.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2315824, - "inode": 525979, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2713", - "xusr": false, - "atime": 1436810540.2315824, - "isdir": false, - "ctime": 1436810540.2315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7415824, - "inode": 524152, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/886", - "xusr": false, - "atime": 1436810538.7415824, - "isdir": false, - "ctime": 1436810538.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2755823, - "inode": 523564, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/298", - "xusr": false, - "atime": 1436810538.2755823, - "isdir": false, - "ctime": 1436810538.2755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5415823, - "inode": 526344, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3078", - "xusr": false, - "atime": 1436810540.5415823, - "isdir": false, - "ctime": 1436810540.5415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3375823, - "inode": 526104, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2838", - "xusr": false, - "atime": 1436810540.3375823, - "isdir": false, - "ctime": 1436810540.3375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6445823, - "inode": 526487, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3221", - "xusr": false, - "atime": 1436810540.6445823, - "isdir": false, - "ctime": 1436810540.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2875824, - "inode": 524911, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1645", - "xusr": false, - "atime": 1436810539.2875824, - "isdir": false, - "ctime": 1436810539.2875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8285823, - "inode": 528081, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4815", - "xusr": false, - "atime": 1436810541.8285823, - "isdir": false, - "ctime": 1436810541.8285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1385822, - "inode": 527177, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3911", - "xusr": false, - "atime": 1436810541.1385822, - "isdir": false, - "ctime": 1436810541.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0235822, - "inode": 524532, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1266", - "xusr": false, - "atime": 1436810539.0235822, - "isdir": false, - "ctime": 1436810539.0235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2045822, - "inode": 523464, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/198", - "xusr": false, - "atime": 1436810538.2045822, - "isdir": false, - "ctime": 1436810538.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6135824, - "inode": 527786, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4520", - "xusr": false, - "atime": 1436810541.6135824, - "isdir": false, - "ctime": 1436810541.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7535822, - "inode": 525391, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2125", - "xusr": false, - "atime": 1436810539.7535822, - "isdir": false, - "ctime": 1436810539.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8925824, - "inode": 525581, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2315", - "xusr": false, - "atime": 1436810539.8925824, - "isdir": false, - "ctime": 1436810539.8925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9815824, - "inode": 526961, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3695", - "xusr": false, - "atime": 1436810540.9815824, - "isdir": false, - "ctime": 1436810540.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3545823, - "inode": 527451, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4185", - "xusr": false, - "atime": 1436810541.3545823, - "isdir": false, - "ctime": 1436810541.3545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1265824, - "inode": 523351, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/85", - "xusr": false, - "atime": 1436810538.1265824, - "isdir": false, - "ctime": 1436810538.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1735823, - "inode": 525913, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2647", - "xusr": false, - "atime": 1436810540.1735823, - "isdir": false, - "ctime": 1436810540.1735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9515824, - "inode": 524431, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1165", - "xusr": false, - "atime": 1436810538.9515824, - "isdir": false, - "ctime": 1436810538.9515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0445824, - "inode": 527046, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3780", - "xusr": false, - "atime": 1436810541.0445824, - "isdir": false, - "ctime": 1436810541.0445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9945824, - "inode": 526978, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3712", - "xusr": false, - "atime": 1436810540.9945824, - "isdir": false, - "ctime": 1436810540.9945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2185824, - "inode": 525961, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2695", - "xusr": false, - "atime": 1436810540.2185824, - "isdir": false, - "ctime": 1436810540.2185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7955823, - "inode": 528036, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4770", - "xusr": false, - "atime": 1436810541.7955823, - "isdir": false, - "ctime": 1436810541.7955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2285824, - "inode": 524827, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1561", - "xusr": false, - "atime": 1436810539.2285824, - "isdir": false, - "ctime": 1436810539.2285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8615823, - "inode": 524309, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1043", - "xusr": false, - "atime": 1436810538.8615823, - "isdir": false, - "ctime": 1436810538.8615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3805823, - "inode": 527472, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4206", - "xusr": false, - "atime": 1436810541.3805823, - "isdir": false, - "ctime": 1436810541.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9225824, - "inode": 525622, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2356", - "xusr": false, - "atime": 1436810539.9225824, - "isdir": false, - "ctime": 1436810539.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1115823, - "inode": 527139, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3873", - "xusr": false, - "atime": 1436810541.1115823, - "isdir": false, - "ctime": 1436810541.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5495822, - "inode": 523894, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/628", - "xusr": false, - "atime": 1436810538.5495822, - "isdir": false, - "ctime": 1436810538.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5155823, - "inode": 523848, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/582", - "xusr": false, - "atime": 1436810538.5155823, - "isdir": false, - "ctime": 1436810538.5155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9285824, - "inode": 525630, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2364", - "xusr": false, - "atime": 1436810539.9285824, - "isdir": false, - "ctime": 1436810539.9285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7595823, - "inode": 524176, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/910", - "xusr": false, - "atime": 1436810538.7595823, - "isdir": false, - "ctime": 1436810538.7595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7945824, - "inode": 526698, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3432", - "xusr": false, - "atime": 1436810540.7945824, - "isdir": false, - "ctime": 1436810540.7945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2735822, - "inode": 523561, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/295", - "xusr": false, - "atime": 1436810538.2735822, - "isdir": false, - "ctime": 1436810538.2735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8715823, - "inode": 525552, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2286", - "xusr": false, - "atime": 1436810539.8715823, - "isdir": false, - "ctime": 1436810539.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2905824, - "inode": 523586, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/320", - "xusr": false, - "atime": 1436810538.2905824, - "isdir": false, - "ctime": 1436810538.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7075822, - "inode": 526576, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3310", - "xusr": false, - "atime": 1436810540.7075822, - "isdir": false, - "ctime": 1436810540.7075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4395823, - "inode": 523742, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/476", - "xusr": false, - "atime": 1436810538.4395823, - "isdir": false, - "ctime": 1436810538.4395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0675824, - "inode": 525810, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2544", - "xusr": false, - "atime": 1436810540.0675824, - "isdir": false, - "ctime": 1436810540.0675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2115824, - "inode": 525953, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2687", - "xusr": false, - "atime": 1436810540.2115824, - "isdir": false, - "ctime": 1436810540.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6025822, - "inode": 523968, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/702", - "xusr": false, - "atime": 1436810538.6025822, - "isdir": false, - "ctime": 1436810538.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8375823, - "inode": 524278, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1012", - "xusr": false, - "atime": 1436810538.8375823, - "isdir": false, - "ctime": 1436810538.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0125823, - "inode": 524517, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1251", - "xusr": false, - "atime": 1436810539.0125823, - "isdir": false, - "ctime": 1436810539.0125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6385822, - "inode": 527820, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4554", - "xusr": false, - "atime": 1436810541.6385822, - "isdir": false, - "ctime": 1436810541.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8725822, - "inode": 526807, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3541", - "xusr": false, - "atime": 1436810540.8725822, - "isdir": false, - "ctime": 1436810540.8725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5755823, - "inode": 526391, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3125", - "xusr": false, - "atime": 1436810540.5755823, - "isdir": false, - "ctime": 1436810540.5755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8035824, - "inode": 525455, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2189", - "xusr": false, - "atime": 1436810539.8035824, - "isdir": false, - "ctime": 1436810539.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5815823, - "inode": 527742, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4476", - "xusr": false, - "atime": 1436810541.5815823, - "isdir": false, - "ctime": 1436810541.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4175823, - "inode": 527516, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4250", - "xusr": false, - "atime": 1436810541.4175823, - "isdir": false, - "ctime": 1436810541.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7545824, - "inode": 524170, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/904", - "xusr": false, - "atime": 1436810538.7545824, - "isdir": false, - "ctime": 1436810538.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8745823, - "inode": 525556, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2290", - "xusr": false, - "atime": 1436810539.8745823, - "isdir": false, - "ctime": 1436810539.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4705822, - "inode": 527588, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4322", - "xusr": false, - "atime": 1436810541.4705822, - "isdir": false, - "ctime": 1436810541.4705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9585824, - "inode": 526928, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3662", - "xusr": false, - "atime": 1436810540.9585824, - "isdir": false, - "ctime": 1436810540.9585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4285824, - "inode": 525060, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1794", - "xusr": false, - "atime": 1436810539.4285824, - "isdir": false, - "ctime": 1436810539.4285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8115823, - "inode": 528059, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4793", - "xusr": false, - "atime": 1436810541.8115823, - "isdir": false, - "ctime": 1436810541.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7415824, - "inode": 527962, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4696", - "xusr": false, - "atime": 1436810541.7415824, - "isdir": false, - "ctime": 1436810541.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3055823, - "inode": 524936, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1670", - "xusr": false, - "atime": 1436810539.3055823, - "isdir": false, - "ctime": 1436810539.3055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2175822, - "inode": 527283, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4017", - "xusr": false, - "atime": 1436810541.2175822, - "isdir": false, - "ctime": 1436810541.2175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3835824, - "inode": 527476, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4210", - "xusr": false, - "atime": 1436810541.3835824, - "isdir": false, - "ctime": 1436810541.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1025822, - "inode": 523319, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/53", - "xusr": false, - "atime": 1436810538.1025822, - "isdir": false, - "ctime": 1436810538.1025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7635822, - "inode": 525405, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2139", - "xusr": false, - "atime": 1436810539.7635822, - "isdir": false, - "ctime": 1436810539.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9135823, - "inode": 524380, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1114", - "xusr": false, - "atime": 1436810538.9135823, - "isdir": false, - "ctime": 1436810538.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2205822, - "inode": 525964, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2698", - "xusr": false, - "atime": 1436810540.2205822, - "isdir": false, - "ctime": 1436810540.2205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9645822, - "inode": 524451, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1185", - "xusr": false, - "atime": 1436810538.9645822, - "isdir": false, - "ctime": 1436810538.9645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8715823, - "inode": 528139, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4873", - "xusr": false, - "atime": 1436810541.8715823, - "isdir": false, - "ctime": 1436810541.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9915824, - "inode": 526974, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3708", - "xusr": false, - "atime": 1436810540.9915824, - "isdir": false, - "ctime": 1436810540.9915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4055824, - "inode": 526200, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2934", - "xusr": false, - "atime": 1436810540.4055824, - "isdir": false, - "ctime": 1436810540.4055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0395823, - "inode": 527039, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3773", - "xusr": false, - "atime": 1436810541.0395823, - "isdir": false, - "ctime": 1436810541.0395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8535824, - "inode": 525526, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2260", - "xusr": false, - "atime": 1436810539.8535824, - "isdir": false, - "ctime": 1436810539.8535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8515823, - "inode": 524295, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1029", - "xusr": false, - "atime": 1436810538.8515823, - "isdir": false, - "ctime": 1436810538.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7155824, - "inode": 525352, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2086", - "xusr": false, - "atime": 1436810539.7155824, - "isdir": false, - "ctime": 1436810539.7155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5715823, - "inode": 523924, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/658", - "xusr": false, - "atime": 1436810538.5715823, - "isdir": false, - "ctime": 1436810538.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7035823, - "inode": 524105, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/839", - "xusr": false, - "atime": 1436810538.7035823, - "isdir": false, - "ctime": 1436810538.7035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2195823, - "inode": 523485, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/219", - "xusr": false, - "atime": 1436810538.2195823, - "isdir": false, - "ctime": 1436810538.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2055824, - "inode": 524793, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1527", - "xusr": false, - "atime": 1436810539.2055824, - "isdir": false, - "ctime": 1436810539.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5385823, - "inode": 527681, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4415", - "xusr": false, - "atime": 1436810541.5385823, - "isdir": false, - "ctime": 1436810541.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5545824, - "inode": 523901, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/635", - "xusr": false, - "atime": 1436810538.5545824, - "isdir": false, - "ctime": 1436810538.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9715824, - "inode": 526947, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3681", - "xusr": false, - "atime": 1436810540.9715824, - "isdir": false, - "ctime": 1436810540.9715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4545822, - "inode": 527565, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4299", - "xusr": false, - "atime": 1436810541.4545822, - "isdir": false, - "ctime": 1436810541.4545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3405824, - "inode": 526108, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2842", - "xusr": false, - "atime": 1436810540.3405824, - "isdir": false, - "ctime": 1436810540.3405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8825824, - "inode": 524337, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1071", - "xusr": false, - "atime": 1436810538.8825824, - "isdir": false, - "ctime": 1436810538.8825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7795823, - "inode": 525427, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2161", - "xusr": false, - "atime": 1436810539.7795823, - "isdir": false, - "ctime": 1436810539.7795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6795824, - "inode": 527875, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4609", - "xusr": false, - "atime": 1436810541.6795824, - "isdir": false, - "ctime": 1436810541.6795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6565824, - "inode": 527843, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4577", - "xusr": false, - "atime": 1436810541.6565824, - "isdir": false, - "ctime": 1436810541.6565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4995823, - "inode": 523827, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/561", - "xusr": false, - "atime": 1436810538.4995823, - "isdir": false, - "ctime": 1436810538.4995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0605824, - "inode": 524586, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1320", - "xusr": false, - "atime": 1436810539.0605824, - "isdir": false, - "ctime": 1436810539.0605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7095823, - "inode": 527918, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4652", - "xusr": false, - "atime": 1436810541.7095823, - "isdir": false, - "ctime": 1436810541.7095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5795822, - "inode": 526397, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3131", - "xusr": false, - "atime": 1436810540.5795822, - "isdir": false, - "ctime": 1436810540.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4325824, - "inode": 526237, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2971", - "xusr": false, - "atime": 1436810540.4325824, - "isdir": false, - "ctime": 1436810540.4325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5495822, - "inode": 526354, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3088", - "xusr": false, - "atime": 1436810540.5495822, - "isdir": false, - "ctime": 1436810540.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6165824, - "inode": 527790, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4524", - "xusr": false, - "atime": 1436810541.6165824, - "isdir": false, - "ctime": 1436810541.6165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9485824, - "inode": 525657, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2391", - "xusr": false, - "atime": 1436810539.9485824, - "isdir": false, - "ctime": 1436810539.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1075823, - "inode": 523326, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/60", - "xusr": false, - "atime": 1436810538.1075823, - "isdir": false, - "ctime": 1436810538.1075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5835824, - "inode": 526403, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3137", - "xusr": false, - "atime": 1436810540.5835824, - "isdir": false, - "ctime": 1436810540.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3355823, - "inode": 523635, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/369", - "xusr": false, - "atime": 1436810538.3355823, - "isdir": false, - "ctime": 1436810538.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1565824, - "inode": 523395, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/129", - "xusr": false, - "atime": 1436810538.1565824, - "isdir": false, - "ctime": 1436810538.1565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3265824, - "inode": 526089, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2823", - "xusr": false, - "atime": 1436810540.3265824, - "isdir": false, - "ctime": 1436810540.3265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8475823, - "inode": 525517, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2251", - "xusr": false, - "atime": 1436810539.8475823, - "isdir": false, - "ctime": 1436810539.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9455824, - "inode": 524424, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1158", - "xusr": false, - "atime": 1436810538.9455824, - "isdir": false, - "ctime": 1436810538.9455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9055824, - "inode": 526854, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3588", - "xusr": false, - "atime": 1436810540.9055824, - "isdir": false, - "ctime": 1436810540.9055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6345823, - "inode": 525270, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2004", - "xusr": false, - "atime": 1436810539.6345823, - "isdir": false, - "ctime": 1436810539.6345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9265823, - "inode": 528216, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4950", - "xusr": false, - "atime": 1436810541.9265823, - "isdir": false, - "ctime": 1436810541.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2485824, - "inode": 527326, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4060", - "xusr": false, - "atime": 1436810541.2485824, - "isdir": false, - "ctime": 1436810541.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1375823, - "inode": 523367, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/101", - "xusr": false, - "atime": 1436810538.1375823, - "isdir": false, - "ctime": 1436810538.1375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5845823, - "inode": 525210, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1944", - "xusr": false, - "atime": 1436810539.5845823, - "isdir": false, - "ctime": 1436810539.5845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8535824, - "inode": 528114, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4848", - "xusr": false, - "atime": 1436810541.8535824, - "isdir": false, - "ctime": 1436810541.8535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5135822, - "inode": 527647, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4381", - "xusr": false, - "atime": 1436810541.5135822, - "isdir": false, - "ctime": 1436810541.5135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7075822, - "inode": 524110, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/844", - "xusr": false, - "atime": 1436810538.7075822, - "isdir": false, - "ctime": 1436810538.7075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4985824, - "inode": 526298, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3032", - "xusr": false, - "atime": 1436810540.4985824, - "isdir": false, - "ctime": 1436810540.4985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4215822, - "inode": 523725, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/459", - "xusr": false, - "atime": 1436810538.4215822, - "isdir": false, - "ctime": 1436810538.4215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8865824, - "inode": 528161, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4895", - "xusr": false, - "atime": 1436810541.8865824, - "isdir": false, - "ctime": 1436810541.8865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7795823, - "inode": 524200, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/934", - "xusr": false, - "atime": 1436810538.7795823, - "isdir": false, - "ctime": 1436810538.7795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2835822, - "inode": 524906, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1640", - "xusr": false, - "atime": 1436810539.2835822, - "isdir": false, - "ctime": 1436810539.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8265824, - "inode": 525488, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2222", - "xusr": false, - "atime": 1436810539.8265824, - "isdir": false, - "ctime": 1436810539.8265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7145822, - "inode": 527925, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4659", - "xusr": false, - "atime": 1436810541.7145822, - "isdir": false, - "ctime": 1436810541.7145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1925824, - "inode": 527248, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3982", - "xusr": false, - "atime": 1436810541.1925824, - "isdir": false, - "ctime": 1436810541.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2895823, - "inode": 523584, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/318", - "xusr": false, - "atime": 1436810538.2895823, - "isdir": false, - "ctime": 1436810538.2895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0235822, - "inode": 525759, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2493", - "xusr": false, - "atime": 1436810540.0235822, - "isdir": false, - "ctime": 1436810540.0235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1545823, - "inode": 527198, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3932", - "xusr": false, - "atime": 1436810541.1545823, - "isdir": false, - "ctime": 1436810541.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3745823, - "inode": 526156, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2890", - "xusr": false, - "atime": 1436810540.3745823, - "isdir": false, - "ctime": 1436810540.3745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9515822, - "inode": 528251, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4985", - "xusr": false, - "atime": 1436810541.9515822, - "isdir": false, - "ctime": 1436810541.9515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3955822, - "inode": 527487, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4221", - "xusr": false, - "atime": 1436810541.3955822, - "isdir": false, - "ctime": 1436810541.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6495824, - "inode": 524032, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/766", - "xusr": false, - "atime": 1436810538.6495824, - "isdir": false, - "ctime": 1436810538.6495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2155824, - "inode": 527280, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4014", - "xusr": false, - "atime": 1436810541.2155824, - "isdir": false, - "ctime": 1436810541.2155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8845823, - "inode": 528158, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4892", - "xusr": false, - "atime": 1436810541.8845823, - "isdir": false, - "ctime": 1436810541.8845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9995823, - "inode": 524499, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1233", - "xusr": false, - "atime": 1436810538.9995823, - "isdir": false, - "ctime": 1436810538.9995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0865824, - "inode": 525829, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2563", - "xusr": false, - "atime": 1436810540.0865824, - "isdir": false, - "ctime": 1436810540.0865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4605823, - "inode": 525077, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1811", - "xusr": false, - "atime": 1436810539.4605823, - "isdir": false, - "ctime": 1436810539.4605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2825823, - "inode": 527374, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4108", - "xusr": false, - "atime": 1436810541.2825823, - "isdir": false, - "ctime": 1436810541.2825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8575823, - "inode": 525531, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2265", - "xusr": false, - "atime": 1436810539.8575823, - "isdir": false, - "ctime": 1436810539.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7245822, - "inode": 525360, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2094", - "xusr": false, - "atime": 1436810539.7245822, - "isdir": false, - "ctime": 1436810539.7245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1885824, - "inode": 524769, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1503", - "xusr": false, - "atime": 1436810539.1885824, - "isdir": false, - "ctime": 1436810539.1885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4755824, - "inode": 527595, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4329", - "xusr": false, - "atime": 1436810541.4755824, - "isdir": false, - "ctime": 1436810541.4755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5505824, - "inode": 526356, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3090", - "xusr": false, - "atime": 1436810540.5505824, - "isdir": false, - "ctime": 1436810540.5505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9405823, - "inode": 528235, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4969", - "xusr": false, - "atime": 1436810541.9405823, - "isdir": false, - "ctime": 1436810541.9405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4935822, - "inode": 527620, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4354", - "xusr": false, - "atime": 1436810541.4935822, - "isdir": false, - "ctime": 1436810541.4935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7995822, - "inode": 524225, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/959", - "xusr": false, - "atime": 1436810538.7995822, - "isdir": false, - "ctime": 1436810538.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8225822, - "inode": 525482, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2216", - "xusr": false, - "atime": 1436810539.8225822, - "isdir": false, - "ctime": 1436810539.8225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6425824, - "inode": 527824, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4558", - "xusr": false, - "atime": 1436810541.6425824, - "isdir": false, - "ctime": 1436810541.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0185823, - "inode": 527010, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3744", - "xusr": false, - "atime": 1436810541.0185823, - "isdir": false, - "ctime": 1436810541.0185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7765822, - "inode": 525423, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2157", - "xusr": false, - "atime": 1436810539.7765822, - "isdir": false, - "ctime": 1436810539.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6105824, - "inode": 527782, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4516", - "xusr": false, - "atime": 1436810541.6105824, - "isdir": false, - "ctime": 1436810541.6105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6465824, - "inode": 525283, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2017", - "xusr": false, - "atime": 1436810539.6465824, - "isdir": false, - "ctime": 1436810539.6465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8785822, - "inode": 528149, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4883", - "xusr": false, - "atime": 1436810541.8785822, - "isdir": false, - "ctime": 1436810541.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5895822, - "inode": 523950, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/684", - "xusr": false, - "atime": 1436810538.5895822, - "isdir": false, - "ctime": 1436810538.5895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1175823, - "inode": 524667, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1401", - "xusr": false, - "atime": 1436810539.1175823, - "isdir": false, - "ctime": 1436810539.1175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8305824, - "inode": 526748, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3482", - "xusr": false, - "atime": 1436810540.8305824, - "isdir": false, - "ctime": 1436810540.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2245822, - "inode": 525969, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2703", - "xusr": false, - "atime": 1436810540.2245822, - "isdir": false, - "ctime": 1436810540.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0355823, - "inode": 527033, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3767", - "xusr": false, - "atime": 1436810541.0355823, - "isdir": false, - "ctime": 1436810541.0355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4975822, - "inode": 526297, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3031", - "xusr": false, - "atime": 1436810540.4975822, - "isdir": false, - "ctime": 1436810540.4975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6475823, - "inode": 527832, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4566", - "xusr": false, - "atime": 1436810541.6475823, - "isdir": false, - "ctime": 1436810541.6475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4085822, - "inode": 526204, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2938", - "xusr": false, - "atime": 1436810540.4085822, - "isdir": false, - "ctime": 1436810540.4085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8275824, - "inode": 525489, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2223", - "xusr": false, - "atime": 1436810539.8275824, - "isdir": false, - "ctime": 1436810539.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6445823, - "inode": 524025, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/759", - "xusr": false, - "atime": 1436810538.6445823, - "isdir": false, - "ctime": 1436810538.6445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1575823, - "inode": 523396, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/130", - "xusr": false, - "atime": 1436810538.1575823, - "isdir": false, - "ctime": 1436810538.1575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4505823, - "inode": 526256, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2990", - "xusr": false, - "atime": 1436810540.4505823, - "isdir": false, - "ctime": 1436810540.4505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6135824, - "inode": 525241, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1975", - "xusr": false, - "atime": 1436810539.6135824, - "isdir": false, - "ctime": 1436810539.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3175824, - "inode": 526077, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2811", - "xusr": false, - "atime": 1436810540.3175824, - "isdir": false, - "ctime": 1436810540.3175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5865824, - "inode": 527748, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4482", - "xusr": false, - "atime": 1436810541.5865824, - "isdir": false, - "ctime": 1436810541.5865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8025823, - "inode": 524230, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/964", - "xusr": false, - "atime": 1436810538.8025823, - "isdir": false, - "ctime": 1436810538.8025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9885824, - "inode": 526970, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3704", - "xusr": false, - "atime": 1436810540.9885824, - "isdir": false, - "ctime": 1436810540.9885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0805824, - "inode": 525824, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2558", - "xusr": false, - "atime": 1436810540.0805824, - "isdir": false, - "ctime": 1436810540.0805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6785824, - "inode": 524071, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/805", - "xusr": false, - "atime": 1436810538.6785824, - "isdir": false, - "ctime": 1436810538.6785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3635824, - "inode": 523658, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/392", - "xusr": false, - "atime": 1436810538.3635824, - "isdir": false, - "ctime": 1436810538.3635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6125822, - "inode": 525240, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1974", - "xusr": false, - "atime": 1436810539.6125822, - "isdir": false, - "ctime": 1436810539.6125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5125823, - "inode": 523844, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/578", - "xusr": false, - "atime": 1436810538.5125823, - "isdir": false, - "ctime": 1436810538.5125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5425823, - "inode": 525163, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1897", - "xusr": false, - "atime": 1436810539.5425823, - "isdir": false, - "ctime": 1436810539.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1345823, - "inode": 524691, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1425", - "xusr": false, - "atime": 1436810539.1345823, - "isdir": false, - "ctime": 1436810539.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2555823, - "inode": 527335, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4069", - "xusr": false, - "atime": 1436810541.2555823, - "isdir": false, - "ctime": 1436810541.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0245824, - "inode": 527018, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3752", - "xusr": false, - "atime": 1436810541.0245824, - "isdir": false, - "ctime": 1436810541.0245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5645823, - "inode": 526376, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3110", - "xusr": false, - "atime": 1436810540.5645823, - "isdir": false, - "ctime": 1436810540.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5935824, - "inode": 526416, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3150", - "xusr": false, - "atime": 1436810540.5935824, - "isdir": false, - "ctime": 1436810540.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6675823, - "inode": 526519, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3253", - "xusr": false, - "atime": 1436810540.6675823, - "isdir": false, - "ctime": 1436810540.6675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4405823, - "inode": 526246, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2980", - "xusr": false, - "atime": 1436810540.4405823, - "isdir": false, - "ctime": 1436810540.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1955824, - "inode": 527252, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3986", - "xusr": false, - "atime": 1436810541.1955824, - "isdir": false, - "ctime": 1436810541.1955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7615824, - "inode": 527989, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4723", - "xusr": false, - "atime": 1436810541.7615824, - "isdir": false, - "ctime": 1436810541.7615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8255823, - "inode": 525486, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2220", - "xusr": false, - "atime": 1436810539.8255823, - "isdir": false, - "ctime": 1436810539.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6265824, - "inode": 525259, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1993", - "xusr": false, - "atime": 1436810539.6265824, - "isdir": false, - "ctime": 1436810539.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7625823, - "inode": 524179, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/913", - "xusr": false, - "atime": 1436810538.7625823, - "isdir": false, - "ctime": 1436810538.7625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7015822, - "inode": 526567, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3301", - "xusr": false, - "atime": 1436810540.7015822, - "isdir": false, - "ctime": 1436810540.7015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3225822, - "inode": 524954, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1688", - "xusr": false, - "atime": 1436810539.3225822, - "isdir": false, - "ctime": 1436810539.3225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6085823, - "inode": 526437, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3171", - "xusr": false, - "atime": 1436810540.6085823, - "isdir": false, - "ctime": 1436810540.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0825822, - "inode": 527099, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3833", - "xusr": false, - "atime": 1436810541.0825822, - "isdir": false, - "ctime": 1436810541.0825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6115823, - "inode": 526441, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3175", - "xusr": false, - "atime": 1436810540.6115823, - "isdir": false, - "ctime": 1436810540.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6495824, - "inode": 524031, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/765", - "xusr": false, - "atime": 1436810538.6495824, - "isdir": false, - "ctime": 1436810538.6495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9695823, - "inode": 525685, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2419", - "xusr": false, - "atime": 1436810539.9695823, - "isdir": false, - "ctime": 1436810539.9695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9215822, - "inode": 524392, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1126", - "xusr": false, - "atime": 1436810538.9215822, - "isdir": false, - "ctime": 1436810538.9215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7715824, - "inode": 525416, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2150", - "xusr": false, - "atime": 1436810539.7715824, - "isdir": false, - "ctime": 1436810539.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8395822, - "inode": 525507, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2241", - "xusr": false, - "atime": 1436810539.8395822, - "isdir": false, - "ctime": 1436810539.8395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6155822, - "inode": 525244, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1978", - "xusr": false, - "atime": 1436810539.6155822, - "isdir": false, - "ctime": 1436810539.6155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5175824, - "inode": 526316, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3050", - "xusr": false, - "atime": 1436810540.5175824, - "isdir": false, - "ctime": 1436810540.5175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6975822, - "inode": 526562, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3296", - "xusr": false, - "atime": 1436810540.6975822, - "isdir": false, - "ctime": 1436810540.6975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4765823, - "inode": 523794, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/528", - "xusr": false, - "atime": 1436810538.4765823, - "isdir": false, - "ctime": 1436810538.4765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7955823, - "inode": 526699, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3433", - "xusr": false, - "atime": 1436810540.7955823, - "isdir": false, - "ctime": 1436810540.7955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9635823, - "inode": 526935, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3669", - "xusr": false, - "atime": 1436810540.9635823, - "isdir": false, - "ctime": 1436810540.9635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7545824, - "inode": 527979, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4713", - "xusr": false, - "atime": 1436810541.7545824, - "isdir": false, - "ctime": 1436810541.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8415823, - "inode": 525509, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2243", - "xusr": false, - "atime": 1436810539.8415823, - "isdir": false, - "ctime": 1436810539.8415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9245822, - "inode": 525625, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2359", - "xusr": false, - "atime": 1436810539.9245822, - "isdir": false, - "ctime": 1436810539.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6205823, - "inode": 526453, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3187", - "xusr": false, - "atime": 1436810540.6205823, - "isdir": false, - "ctime": 1436810540.6205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2725823, - "inode": 524890, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1624", - "xusr": false, - "atime": 1436810539.2725823, - "isdir": false, - "ctime": 1436810539.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4355824, - "inode": 526241, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2975", - "xusr": false, - "atime": 1436810540.4355824, - "isdir": false, - "ctime": 1436810540.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2775824, - "inode": 524897, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1631", - "xusr": false, - "atime": 1436810539.2775824, - "isdir": false, - "ctime": 1436810539.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8845823, - "inode": 526824, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3558", - "xusr": false, - "atime": 1436810540.8845823, - "isdir": false, - "ctime": 1436810540.8845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5815823, - "inode": 525207, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1941", - "xusr": false, - "atime": 1436810539.5815823, - "isdir": false, - "ctime": 1436810539.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8685822, - "inode": 524319, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1053", - "xusr": false, - "atime": 1436810538.8685822, - "isdir": false, - "ctime": 1436810538.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8275824, - "inode": 526743, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3477", - "xusr": false, - "atime": 1436810540.8275824, - "isdir": false, - "ctime": 1436810540.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7885823, - "inode": 526689, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3423", - "xusr": false, - "atime": 1436810540.7885823, - "isdir": false, - "ctime": 1436810540.7885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7165823, - "inode": 527927, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4661", - "xusr": false, - "atime": 1436810541.7165823, - "isdir": false, - "ctime": 1436810541.7165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6665823, - "inode": 526517, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3251", - "xusr": false, - "atime": 1436810540.6665823, - "isdir": false, - "ctime": 1436810540.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0705824, - "inode": 525814, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2548", - "xusr": false, - "atime": 1436810540.0705824, - "isdir": false, - "ctime": 1436810540.0705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6595824, - "inode": 525296, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2030", - "xusr": false, - "atime": 1436810539.6595824, - "isdir": false, - "ctime": 1436810539.6595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4555824, - "inode": 527567, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4301", - "xusr": false, - "atime": 1436810541.4555824, - "isdir": false, - "ctime": 1436810541.4555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1665823, - "inode": 524737, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1471", - "xusr": false, - "atime": 1436810539.1665823, - "isdir": false, - "ctime": 1436810539.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0975823, - "inode": 523313, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/47", - "xusr": false, - "atime": 1436810538.0975823, - "isdir": false, - "ctime": 1436810538.0975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6825824, - "inode": 524077, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/811", - "xusr": false, - "atime": 1436810538.6825824, - "isdir": false, - "ctime": 1436810538.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1755824, - "inode": 523421, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/155", - "xusr": false, - "atime": 1436810538.1755824, - "isdir": false, - "ctime": 1436810538.1755824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7625823, - "inode": 525403, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2137", - "xusr": false, - "atime": 1436810539.7625823, - "isdir": false, - "ctime": 1436810539.7625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6845822, - "inode": 527882, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4616", - "xusr": false, - "atime": 1436810541.6845822, - "isdir": false, - "ctime": 1436810541.6845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4285824, - "inode": 527530, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4264", - "xusr": false, - "atime": 1436810541.4285824, - "isdir": false, - "ctime": 1436810541.4285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1435823, - "inode": 527183, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3917", - "xusr": false, - "atime": 1436810541.1435823, - "isdir": false, - "ctime": 1436810541.1435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9155824, - "inode": 524383, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1117", - "xusr": false, - "atime": 1436810538.9155824, - "isdir": false, - "ctime": 1436810538.9155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1775823, - "inode": 524753, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1487", - "xusr": false, - "atime": 1436810539.1775823, - "isdir": false, - "ctime": 1436810539.1775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7805824, - "inode": 526677, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3411", - "xusr": false, - "atime": 1436810540.7805824, - "isdir": false, - "ctime": 1436810540.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6025822, - "inode": 523967, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/701", - "xusr": false, - "atime": 1436810538.6025822, - "isdir": false, - "ctime": 1436810538.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2145822, - "inode": 523479, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/213", - "xusr": false, - "atime": 1436810538.2145822, - "isdir": false, - "ctime": 1436810538.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7795823, - "inode": 528014, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4748", - "xusr": false, - "atime": 1436810541.7795823, - "isdir": false, - "ctime": 1436810541.7795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8465824, - "inode": 528104, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4838", - "xusr": false, - "atime": 1436810541.8465824, - "isdir": false, - "ctime": 1436810541.8465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5485823, - "inode": 523893, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/627", - "xusr": false, - "atime": 1436810538.5485823, - "isdir": false, - "ctime": 1436810538.5485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6735823, - "inode": 525309, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2043", - "xusr": false, - "atime": 1436810539.6735823, - "isdir": false, - "ctime": 1436810539.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4095824, - "inode": 527505, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4239", - "xusr": false, - "atime": 1436810541.4095824, - "isdir": false, - "ctime": 1436810541.4095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1895823, - "inode": 523443, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/177", - "xusr": false, - "atime": 1436810538.1895823, - "isdir": false, - "ctime": 1436810538.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7855823, - "inode": 526685, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3419", - "xusr": false, - "atime": 1436810540.7855823, - "isdir": false, - "ctime": 1436810540.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9225824, - "inode": 524394, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1128", - "xusr": false, - "atime": 1436810538.9225824, - "isdir": false, - "ctime": 1436810538.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0165823, - "inode": 527008, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3742", - "xusr": false, - "atime": 1436810541.0165823, - "isdir": false, - "ctime": 1436810541.0165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3485823, - "inode": 524979, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1713", - "xusr": false, - "atime": 1436810539.3485823, - "isdir": false, - "ctime": 1436810539.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5995822, - "inode": 523963, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/697", - "xusr": false, - "atime": 1436810538.5995822, - "isdir": false, - "ctime": 1436810538.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0695822, - "inode": 524599, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1333", - "xusr": false, - "atime": 1436810539.0695822, - "isdir": false, - "ctime": 1436810539.0695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6455822, - "inode": 525282, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2016", - "xusr": false, - "atime": 1436810539.6455822, - "isdir": false, - "ctime": 1436810539.6455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3955822, - "inode": 526186, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2920", - "xusr": false, - "atime": 1436810540.3955822, - "isdir": false, - "ctime": 1436810540.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4805822, - "inode": 523800, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/534", - "xusr": false, - "atime": 1436810538.4805822, - "isdir": false, - "ctime": 1436810538.4805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9925823, - "inode": 525718, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2452", - "xusr": false, - "atime": 1436810539.9925823, - "isdir": false, - "ctime": 1436810539.9925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4435823, - "inode": 527551, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4285", - "xusr": false, - "atime": 1436810541.4435823, - "isdir": false, - "ctime": 1436810541.4435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0605824, - "inode": 527068, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3802", - "xusr": false, - "atime": 1436810541.0605824, - "isdir": false, - "ctime": 1436810541.0605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8205824, - "inode": 528070, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4804", - "xusr": false, - "atime": 1436810541.8205824, - "isdir": false, - "ctime": 1436810541.8205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6475823, - "inode": 527831, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4565", - "xusr": false, - "atime": 1436810541.6475823, - "isdir": false, - "ctime": 1436810541.6475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2865822, - "inode": 527379, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4113", - "xusr": false, - "atime": 1436810541.2865822, - "isdir": false, - "ctime": 1436810541.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7585824, - "inode": 524175, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/909", - "xusr": false, - "atime": 1436810538.7585824, - "isdir": false, - "ctime": 1436810538.7585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0875823, - "inode": 524624, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1358", - "xusr": false, - "atime": 1436810539.0875823, - "isdir": false, - "ctime": 1436810539.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7285824, - "inode": 527944, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4678", - "xusr": false, - "atime": 1436810541.7285824, - "isdir": false, - "ctime": 1436810541.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0135822, - "inode": 524518, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1252", - "xusr": false, - "atime": 1436810539.0135822, - "isdir": false, - "ctime": 1436810539.0135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3355823, - "inode": 526101, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2835", - "xusr": false, - "atime": 1436810540.3355823, - "isdir": false, - "ctime": 1436810540.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1875823, - "inode": 527241, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3975", - "xusr": false, - "atime": 1436810541.1875823, - "isdir": false, - "ctime": 1436810541.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7765822, - "inode": 528009, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4743", - "xusr": false, - "atime": 1436810541.7765822, - "isdir": false, - "ctime": 1436810541.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4035823, - "inode": 527498, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4232", - "xusr": false, - "atime": 1436810541.4035823, - "isdir": false, - "ctime": 1436810541.4035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0775824, - "inode": 524610, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1344", - "xusr": false, - "atime": 1436810539.0775824, - "isdir": false, - "ctime": 1436810539.0775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4945824, - "inode": 527622, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4356", - "xusr": false, - "atime": 1436810541.4945824, - "isdir": false, - "ctime": 1436810541.4945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8145823, - "inode": 524246, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/980", - "xusr": false, - "atime": 1436810538.8145823, - "isdir": false, - "ctime": 1436810538.8145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7075822, - "inode": 525344, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2078", - "xusr": false, - "atime": 1436810539.7075822, - "isdir": false, - "ctime": 1436810539.7075822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2975824, - "inode": 527395, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4129", - "xusr": false, - "atime": 1436810541.2975824, - "isdir": false, - "ctime": 1436810541.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7025824, - "inode": 527908, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4642", - "xusr": false, - "atime": 1436810541.7025824, - "isdir": false, - "ctime": 1436810541.7025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1265824, - "inode": 527160, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3894", - "xusr": false, - "atime": 1436810541.1265824, - "isdir": false, - "ctime": 1436810541.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1885824, - "inode": 527242, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3976", - "xusr": false, - "atime": 1436810541.1885824, - "isdir": false, - "ctime": 1436810541.1885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2535822, - "inode": 523532, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/266", - "xusr": false, - "atime": 1436810538.2535822, - "isdir": false, - "ctime": 1436810538.2535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1385822, - "inode": 524697, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1431", - "xusr": false, - "atime": 1436810539.1385822, - "isdir": false, - "ctime": 1436810539.1385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8085823, - "inode": 526718, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3452", - "xusr": false, - "atime": 1436810540.8085823, - "isdir": false, - "ctime": 1436810540.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5255823, - "inode": 523862, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/596", - "xusr": false, - "atime": 1436810538.5255823, - "isdir": false, - "ctime": 1436810538.5255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8125823, - "inode": 524243, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/977", - "xusr": false, - "atime": 1436810538.8125823, - "isdir": false, - "ctime": 1436810538.8125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6515822, - "inode": 526496, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3230", - "xusr": false, - "atime": 1436810540.6515822, - "isdir": false, - "ctime": 1436810540.6515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7785823, - "inode": 524199, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/933", - "xusr": false, - "atime": 1436810538.7785823, - "isdir": false, - "ctime": 1436810538.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6575823, - "inode": 525294, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2028", - "xusr": false, - "atime": 1436810539.6575823, - "isdir": false, - "ctime": 1436810539.6575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8965824, - "inode": 525587, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2321", - "xusr": false, - "atime": 1436810539.8965824, - "isdir": false, - "ctime": 1436810539.8965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2225823, - "inode": 527289, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4023", - "xusr": false, - "atime": 1436810541.2225823, - "isdir": false, - "ctime": 1436810541.2225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7245822, - "inode": 526600, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3334", - "xusr": false, - "atime": 1436810540.7245822, - "isdir": false, - "ctime": 1436810540.7245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8575823, - "inode": 524304, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1038", - "xusr": false, - "atime": 1436810538.8575823, - "isdir": false, - "ctime": 1436810538.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4365823, - "inode": 523738, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/472", - "xusr": false, - "atime": 1436810538.4365823, - "isdir": false, - "ctime": 1436810538.4365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5815823, - "inode": 526400, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3134", - "xusr": false, - "atime": 1436810540.5815823, - "isdir": false, - "ctime": 1436810540.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4525824, - "inode": 523761, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/495", - "xusr": false, - "atime": 1436810538.4525824, - "isdir": false, - "ctime": 1436810538.4525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9595823, - "inode": 524443, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1177", - "xusr": false, - "atime": 1436810538.9595823, - "isdir": false, - "ctime": 1436810538.9595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0175824, - "inode": 525752, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2486", - "xusr": false, - "atime": 1436810540.0175824, - "isdir": false, - "ctime": 1436810540.0175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4335823, - "inode": 526238, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2972", - "xusr": false, - "atime": 1436810540.4335823, - "isdir": false, - "ctime": 1436810540.4335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9665823, - "inode": 524453, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1187", - "xusr": false, - "atime": 1436810538.9665823, - "isdir": false, - "ctime": 1436810538.9665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6885824, - "inode": 524085, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/819", - "xusr": false, - "atime": 1436810538.6885824, - "isdir": false, - "ctime": 1436810538.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0665822, - "inode": 523270, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4", - "xusr": false, - "atime": 1436810538.0665822, - "isdir": false, - "ctime": 1436810538.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7015822, - "inode": 527906, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4640", - "xusr": false, - "atime": 1436810541.7015822, - "isdir": false, - "ctime": 1436810541.7015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0745823, - "inode": 524605, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1339", - "xusr": false, - "atime": 1436810539.0745823, - "isdir": false, - "ctime": 1436810539.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3305824, - "inode": 526094, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2828", - "xusr": false, - "atime": 1436810540.3305824, - "isdir": false, - "ctime": 1436810540.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0545824, - "inode": 525798, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2532", - "xusr": false, - "atime": 1436810540.0545824, - "isdir": false, - "ctime": 1436810540.0545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9095824, - "inode": 528193, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4927", - "xusr": false, - "atime": 1436810541.9095824, - "isdir": false, - "ctime": 1436810541.9095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1405823, - "inode": 523372, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/106", - "xusr": false, - "atime": 1436810538.1405823, - "isdir": false, - "ctime": 1436810538.1405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3435824, - "inode": 527441, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4175", - "xusr": false, - "atime": 1436810541.3435824, - "isdir": false, - "ctime": 1436810541.3435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7605822, - "inode": 524177, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/911", - "xusr": false, - "atime": 1436810538.7605822, - "isdir": false, - "ctime": 1436810538.7605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8265824, - "inode": 524263, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/997", - "xusr": false, - "atime": 1436810538.8265824, - "isdir": false, - "ctime": 1436810538.8265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1905823, - "inode": 525929, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2663", - "xusr": false, - "atime": 1436810540.1905823, - "isdir": false, - "ctime": 1436810540.1905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5805824, - "inode": 523937, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/671", - "xusr": false, - "atime": 1436810538.5805824, - "isdir": false, - "ctime": 1436810538.5805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5925822, - "inode": 525216, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1950", - "xusr": false, - "atime": 1436810539.5925822, - "isdir": false, - "ctime": 1436810539.5925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6335824, - "inode": 526471, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3205", - "xusr": false, - "atime": 1436810540.6335824, - "isdir": false, - "ctime": 1436810540.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2545824, - "inode": 523533, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/267", - "xusr": false, - "atime": 1436810538.2545824, - "isdir": false, - "ctime": 1436810538.2545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2795823, - "inode": 526031, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2765", - "xusr": false, - "atime": 1436810540.2795823, - "isdir": false, - "ctime": 1436810540.2795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8035824, - "inode": 528047, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4781", - "xusr": false, - "atime": 1436810541.8035824, - "isdir": false, - "ctime": 1436810541.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2105823, - "inode": 527273, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4007", - "xusr": false, - "atime": 1436810541.2105823, - "isdir": false, - "ctime": 1436810541.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1785824, - "inode": 525917, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2651", - "xusr": false, - "atime": 1436810540.1785824, - "isdir": false, - "ctime": 1436810540.1785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1835823, - "inode": 524761, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1495", - "xusr": false, - "atime": 1436810539.1835823, - "isdir": false, - "ctime": 1436810539.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3075824, - "inode": 523608, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/342", - "xusr": false, - "atime": 1436810538.3075824, - "isdir": false, - "ctime": 1436810538.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7165823, - "inode": 526588, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3322", - "xusr": false, - "atime": 1436810540.7165823, - "isdir": false, - "ctime": 1436810540.7165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7545824, - "inode": 525393, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2127", - "xusr": false, - "atime": 1436810539.7545824, - "isdir": false, - "ctime": 1436810539.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3135824, - "inode": 526071, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2805", - "xusr": false, - "atime": 1436810540.3135824, - "isdir": false, - "ctime": 1436810540.3135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2325823, - "inode": 527304, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4038", - "xusr": false, - "atime": 1436810541.2325823, - "isdir": false, - "ctime": 1436810541.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8435824, - "inode": 524285, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1019", - "xusr": false, - "atime": 1436810538.8435824, - "isdir": false, - "ctime": 1436810538.8435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3485823, - "inode": 523648, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/382", - "xusr": false, - "atime": 1436810538.3485823, - "isdir": false, - "ctime": 1436810538.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1675823, - "inode": 523410, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/144", - "xusr": false, - "atime": 1436810538.1675823, - "isdir": false, - "ctime": 1436810538.1675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0435822, - "inode": 524561, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1295", - "xusr": false, - "atime": 1436810539.0435822, - "isdir": false, - "ctime": 1436810539.0435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5065823, - "inode": 523836, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/570", - "xusr": false, - "atime": 1436810538.5065823, - "isdir": false, - "ctime": 1436810538.5065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0385823, - "inode": 527038, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3772", - "xusr": false, - "atime": 1436810541.0385823, - "isdir": false, - "ctime": 1436810541.0385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7865822, - "inode": 525437, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2171", - "xusr": false, - "atime": 1436810539.7865822, - "isdir": false, - "ctime": 1436810539.7865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4575822, - "inode": 527569, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4303", - "xusr": false, - "atime": 1436810541.4575822, - "isdir": false, - "ctime": 1436810541.4575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8545823, - "inode": 525527, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2261", - "xusr": false, - "atime": 1436810539.8545823, - "isdir": false, - "ctime": 1436810539.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7015824, - "inode": 525338, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2072", - "xusr": false, - "atime": 1436810539.7015824, - "isdir": false, - "ctime": 1436810539.7015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7335823, - "inode": 527951, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4685", - "xusr": false, - "atime": 1436810541.7335823, - "isdir": false, - "ctime": 1436810541.7335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4805822, - "inode": 527602, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4336", - "xusr": false, - "atime": 1436810541.4805822, - "isdir": false, - "ctime": 1436810541.4805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6415823, - "inode": 526483, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3217", - "xusr": false, - "atime": 1436810540.6415823, - "isdir": false, - "ctime": 1436810540.6415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5765822, - "inode": 525203, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1937", - "xusr": false, - "atime": 1436810539.5765822, - "isdir": false, - "ctime": 1436810539.5765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6345823, - "inode": 525269, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2003", - "xusr": false, - "atime": 1436810539.6345823, - "isdir": false, - "ctime": 1436810539.6345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1415823, - "inode": 525882, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2616", - "xusr": false, - "atime": 1436810540.1415823, - "isdir": false, - "ctime": 1436810540.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6535823, - "inode": 527839, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4573", - "xusr": false, - "atime": 1436810541.6535823, - "isdir": false, - "ctime": 1436810541.6535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9455824, - "inode": 524423, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1157", - "xusr": false, - "atime": 1436810538.9455824, - "isdir": false, - "ctime": 1436810538.9455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9735823, - "inode": 526949, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3683", - "xusr": false, - "atime": 1436810540.9735823, - "isdir": false, - "ctime": 1436810540.9735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6475823, - "inode": 526491, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3225", - "xusr": false, - "atime": 1436810540.6475823, - "isdir": false, - "ctime": 1436810540.6475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1925824, - "inode": 527247, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3981", - "xusr": false, - "atime": 1436810541.1925824, - "isdir": false, - "ctime": 1436810541.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4945824, - "inode": 523820, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/554", - "xusr": false, - "atime": 1436810538.4945824, - "isdir": false, - "ctime": 1436810538.4945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3015823, - "inode": 527399, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4133", - "xusr": false, - "atime": 1436810541.3015823, - "isdir": false, - "ctime": 1436810541.3015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6135824, - "inode": 525242, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1976", - "xusr": false, - "atime": 1436810539.6135824, - "isdir": false, - "ctime": 1436810539.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0835824, - "inode": 523296, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/30", - "xusr": false, - "atime": 1436810538.0835824, - "isdir": false, - "ctime": 1436810538.0835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9435823, - "inode": 524421, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1155", - "xusr": false, - "atime": 1436810538.9435823, - "isdir": false, - "ctime": 1436810538.9435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0915823, - "inode": 524630, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1364", - "xusr": false, - "atime": 1436810539.0915823, - "isdir": false, - "ctime": 1436810539.0915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9415822, - "inode": 526904, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3638", - "xusr": false, - "atime": 1436810540.9415822, - "isdir": false, - "ctime": 1436810540.9415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4075823, - "inode": 527502, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4236", - "xusr": false, - "atime": 1436810541.4075823, - "isdir": false, - "ctime": 1436810541.4075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3735824, - "inode": 527464, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4198", - "xusr": false, - "atime": 1436810541.3735824, - "isdir": false, - "ctime": 1436810541.3735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2605822, - "inode": 527342, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4076", - "xusr": false, - "atime": 1436810541.2605822, - "isdir": false, - "ctime": 1436810541.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8935823, - "inode": 525583, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2317", - "xusr": false, - "atime": 1436810539.8935823, - "isdir": false, - "ctime": 1436810539.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7485824, - "inode": 525386, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2120", - "xusr": false, - "atime": 1436810539.7485824, - "isdir": false, - "ctime": 1436810539.7485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1875823, - "inode": 523439, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/173", - "xusr": false, - "atime": 1436810538.1875823, - "isdir": false, - "ctime": 1436810538.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5405824, - "inode": 523882, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/616", - "xusr": false, - "atime": 1436810538.5405824, - "isdir": false, - "ctime": 1436810538.5405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6585822, - "inode": 526506, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3240", - "xusr": false, - "atime": 1436810540.6585822, - "isdir": false, - "ctime": 1436810540.6585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6935823, - "inode": 526556, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3290", - "xusr": false, - "atime": 1436810540.6935823, - "isdir": false, - "ctime": 1436810540.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5455823, - "inode": 527692, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4426", - "xusr": false, - "atime": 1436810541.5455823, - "isdir": false, - "ctime": 1436810541.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0195823, - "inode": 524526, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1260", - "xusr": false, - "atime": 1436810539.0195823, - "isdir": false, - "ctime": 1436810539.0195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2235823, - "inode": 524819, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1553", - "xusr": false, - "atime": 1436810539.2235823, - "isdir": false, - "ctime": 1436810539.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6475823, - "inode": 524028, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/762", - "xusr": false, - "atime": 1436810538.6475823, - "isdir": false, - "ctime": 1436810538.6475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5555823, - "inode": 523903, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/637", - "xusr": false, - "atime": 1436810538.5555823, - "isdir": false, - "ctime": 1436810538.5555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1615822, - "inode": 524731, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1465", - "xusr": false, - "atime": 1436810539.1615822, - "isdir": false, - "ctime": 1436810539.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1125822, - "inode": 523332, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/66", - "xusr": false, - "atime": 1436810538.1125822, - "isdir": false, - "ctime": 1436810538.1125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8035824, - "inode": 524231, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/965", - "xusr": false, - "atime": 1436810538.8035824, - "isdir": false, - "ctime": 1436810538.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5005822, - "inode": 527629, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4363", - "xusr": false, - "atime": 1436810541.5005822, - "isdir": false, - "ctime": 1436810541.5005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7435822, - "inode": 527965, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4699", - "xusr": false, - "atime": 1436810541.7435822, - "isdir": false, - "ctime": 1436810541.7435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1665823, - "inode": 523408, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/142", - "xusr": false, - "atime": 1436810538.1665823, - "isdir": false, - "ctime": 1436810538.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2705822, - "inode": 524887, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1621", - "xusr": false, - "atime": 1436810539.2705822, - "isdir": false, - "ctime": 1436810539.2705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0945823, - "inode": 523309, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/43", - "xusr": false, - "atime": 1436810538.0945823, - "isdir": false, - "ctime": 1436810538.0945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5705824, - "inode": 525195, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1929", - "xusr": false, - "atime": 1436810539.5705824, - "isdir": false, - "ctime": 1436810539.5705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9555824, - "inode": 524437, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1171", - "xusr": false, - "atime": 1436810538.9555824, - "isdir": false, - "ctime": 1436810538.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4425824, - "inode": 523747, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/481", - "xusr": false, - "atime": 1436810538.4425824, - "isdir": false, - "ctime": 1436810538.4425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2645824, - "inode": 523548, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/282", - "xusr": false, - "atime": 1436810538.2645824, - "isdir": false, - "ctime": 1436810538.2645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0195823, - "inode": 527012, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3746", - "xusr": false, - "atime": 1436810541.0195823, - "isdir": false, - "ctime": 1436810541.0195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5515823, - "inode": 527700, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4434", - "xusr": false, - "atime": 1436810541.5515823, - "isdir": false, - "ctime": 1436810541.5515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7315824, - "inode": 526610, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3344", - "xusr": false, - "atime": 1436810540.7315824, - "isdir": false, - "ctime": 1436810540.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6185822, - "inode": 525248, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1982", - "xusr": false, - "atime": 1436810539.6185822, - "isdir": false, - "ctime": 1436810539.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3745823, - "inode": 523666, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/400", - "xusr": false, - "atime": 1436810538.3745823, - "isdir": false, - "ctime": 1436810538.3745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9585824, - "inode": 524442, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1176", - "xusr": false, - "atime": 1436810538.9585824, - "isdir": false, - "ctime": 1436810538.9585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6795824, - "inode": 527876, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4610", - "xusr": false, - "atime": 1436810541.6795824, - "isdir": false, - "ctime": 1436810541.6795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1925824, - "inode": 523446, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/180", - "xusr": false, - "atime": 1436810538.1925824, - "isdir": false, - "ctime": 1436810538.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1975822, - "inode": 525937, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2671", - "xusr": false, - "atime": 1436810540.1975822, - "isdir": false, - "ctime": 1436810540.1975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2175822, - "inode": 527282, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4016", - "xusr": false, - "atime": 1436810541.2175822, - "isdir": false, - "ctime": 1436810541.2175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1255822, - "inode": 524679, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1413", - "xusr": false, - "atime": 1436810539.1255822, - "isdir": false, - "ctime": 1436810539.1255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8255823, - "inode": 524261, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/995", - "xusr": false, - "atime": 1436810538.8255823, - "isdir": false, - "ctime": 1436810538.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7585824, - "inode": 526647, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3381", - "xusr": false, - "atime": 1436810540.7585824, - "isdir": false, - "ctime": 1436810540.7585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8235824, - "inode": 526738, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3472", - "xusr": false, - "atime": 1436810540.8235824, - "isdir": false, - "ctime": 1436810540.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2425823, - "inode": 524846, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1580", - "xusr": false, - "atime": 1436810539.2425823, - "isdir": false, - "ctime": 1436810539.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9455824, - "inode": 526910, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3644", - "xusr": false, - "atime": 1436810540.9455824, - "isdir": false, - "ctime": 1436810540.9455824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3355823, - "inode": 527435, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4169", - "xusr": false, - "atime": 1436810541.3355823, - "isdir": false, - "ctime": 1436810541.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4775822, - "inode": 525098, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1832", - "xusr": false, - "atime": 1436810539.4775822, - "isdir": false, - "ctime": 1436810539.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5715823, - "inode": 525197, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1931", - "xusr": false, - "atime": 1436810539.5715823, - "isdir": false, - "ctime": 1436810539.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3415823, - "inode": 527438, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4172", - "xusr": false, - "atime": 1436810541.3415823, - "isdir": false, - "ctime": 1436810541.3415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3775823, - "inode": 523669, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/403", - "xusr": false, - "atime": 1436810538.3775823, - "isdir": false, - "ctime": 1436810538.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0105822, - "inode": 527000, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3734", - "xusr": false, - "atime": 1436810541.0105822, - "isdir": false, - "ctime": 1436810541.0105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2325823, - "inode": 525980, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2714", - "xusr": false, - "atime": 1436810540.2325823, - "isdir": false, - "ctime": 1436810540.2325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9365823, - "inode": 526897, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3631", - "xusr": false, - "atime": 1436810540.9365823, - "isdir": false, - "ctime": 1436810540.9365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7215824, - "inode": 524126, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/860", - "xusr": false, - "atime": 1436810538.7215824, - "isdir": false, - "ctime": 1436810538.7215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6535823, - "inode": 524037, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/771", - "xusr": false, - "atime": 1436810538.6535823, - "isdir": false, - "ctime": 1436810538.6535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6125822, - "inode": 526443, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3177", - "xusr": false, - "atime": 1436810540.6125822, - "isdir": false, - "ctime": 1436810540.6125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7655823, - "inode": 527994, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4728", - "xusr": false, - "atime": 1436810541.7655823, - "isdir": false, - "ctime": 1436810541.7655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2415824, - "inode": 524845, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1579", - "xusr": false, - "atime": 1436810539.2415824, - "isdir": false, - "ctime": 1436810539.2415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9435823, - "inode": 526907, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3641", - "xusr": false, - "atime": 1436810540.9435823, - "isdir": false, - "ctime": 1436810540.9435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4355824, - "inode": 526240, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2974", - "xusr": false, - "atime": 1436810540.4355824, - "isdir": false, - "ctime": 1436810540.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3915823, - "inode": 526180, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2914", - "xusr": false, - "atime": 1436810540.3915823, - "isdir": false, - "ctime": 1436810540.3915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9425824, - "inode": 524419, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1153", - "xusr": false, - "atime": 1436810538.9425824, - "isdir": false, - "ctime": 1436810538.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6405823, - "inode": 525276, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2010", - "xusr": false, - "atime": 1436810539.6405823, - "isdir": false, - "ctime": 1436810539.6405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5575824, - "inode": 523906, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/640", - "xusr": false, - "atime": 1436810538.5575824, - "isdir": false, - "ctime": 1436810538.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7525823, - "inode": 524167, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/901", - "xusr": false, - "atime": 1436810538.7525823, - "isdir": false, - "ctime": 1436810538.7525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7875824, - "inode": 526687, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3421", - "xusr": false, - "atime": 1436810540.7875824, - "isdir": false, - "ctime": 1436810540.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7385824, - "inode": 527958, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4692", - "xusr": false, - "atime": 1436810541.7385824, - "isdir": false, - "ctime": 1436810541.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9055824, - "inode": 524369, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1103", - "xusr": false, - "atime": 1436810538.9055824, - "isdir": false, - "ctime": 1436810538.9055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8315823, - "inode": 528085, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4819", - "xusr": false, - "atime": 1436810541.8315823, - "isdir": false, - "ctime": 1436810541.8315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9485824, - "inode": 528247, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4981", - "xusr": false, - "atime": 1436810541.9485824, - "isdir": false, - "ctime": 1436810541.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1615822, - "inode": 523401, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/135", - "xusr": false, - "atime": 1436810538.1615822, - "isdir": false, - "ctime": 1436810538.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8595824, - "inode": 525534, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2268", - "xusr": false, - "atime": 1436810539.8595824, - "isdir": false, - "ctime": 1436810539.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9825823, - "inode": 526962, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3696", - "xusr": false, - "atime": 1436810540.9825823, - "isdir": false, - "ctime": 1436810540.9825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1135824, - "inode": 524662, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1396", - "xusr": false, - "atime": 1436810539.1135824, - "isdir": false, - "ctime": 1436810539.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8765824, - "inode": 525559, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2293", - "xusr": false, - "atime": 1436810539.8765824, - "isdir": false, - "ctime": 1436810539.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2995822, - "inode": 524929, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1663", - "xusr": false, - "atime": 1436810539.2995822, - "isdir": false, - "ctime": 1436810539.2995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2385824, - "inode": 524841, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1575", - "xusr": false, - "atime": 1436810539.2385824, - "isdir": false, - "ctime": 1436810539.2385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5055823, - "inode": 527636, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4370", - "xusr": false, - "atime": 1436810541.5055823, - "isdir": false, - "ctime": 1436810541.5055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5645823, - "inode": 526375, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3109", - "xusr": false, - "atime": 1436810540.5645823, - "isdir": false, - "ctime": 1436810540.5645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5585823, - "inode": 527709, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4443", - "xusr": false, - "atime": 1436810541.5585823, - "isdir": false, - "ctime": 1436810541.5585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6605823, - "inode": 526509, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3243", - "xusr": false, - "atime": 1436810540.6605823, - "isdir": false, - "ctime": 1436810540.6605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7605822, - "inode": 525401, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2135", - "xusr": false, - "atime": 1436810539.7605822, - "isdir": false, - "ctime": 1436810539.7605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9775822, - "inode": 525696, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2430", - "xusr": false, - "atime": 1436810539.9775822, - "isdir": false, - "ctime": 1436810539.9775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6335824, - "inode": 527813, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4547", - "xusr": false, - "atime": 1436810541.6335824, - "isdir": false, - "ctime": 1436810541.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2515824, - "inode": 525999, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2733", - "xusr": false, - "atime": 1436810540.2515824, - "isdir": false, - "ctime": 1436810540.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1355822, - "inode": 527172, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3906", - "xusr": false, - "atime": 1436810541.1355822, - "isdir": false, - "ctime": 1436810541.1355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4615824, - "inode": 523774, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/508", - "xusr": false, - "atime": 1436810538.4615824, - "isdir": false, - "ctime": 1436810538.4615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8385823, - "inode": 528094, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4828", - "xusr": false, - "atime": 1436810541.8385823, - "isdir": false, - "ctime": 1436810541.8385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6115823, - "inode": 525239, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1973", - "xusr": false, - "atime": 1436810539.6115823, - "isdir": false, - "ctime": 1436810539.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3835824, - "inode": 523678, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/412", - "xusr": false, - "atime": 1436810538.3835824, - "isdir": false, - "ctime": 1436810538.3835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9835823, - "inode": 526963, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3697", - "xusr": false, - "atime": 1436810540.9835823, - "isdir": false, - "ctime": 1436810540.9835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5325823, - "inode": 523872, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/606", - "xusr": false, - "atime": 1436810538.5325823, - "isdir": false, - "ctime": 1436810538.5325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9955823, - "inode": 526979, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3713", - "xusr": false, - "atime": 1436810540.9955823, - "isdir": false, - "ctime": 1436810540.9955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4955823, - "inode": 523821, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/555", - "xusr": false, - "atime": 1436810538.4955823, - "isdir": false, - "ctime": 1436810538.4955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0715823, - "inode": 523278, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/12", - "xusr": false, - "atime": 1436810538.0715823, - "isdir": false, - "ctime": 1436810538.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9475822, - "inode": 526913, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3647", - "xusr": false, - "atime": 1436810540.9475822, - "isdir": false, - "ctime": 1436810540.9475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9205823, - "inode": 524391, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1125", - "xusr": false, - "atime": 1436810538.9205823, - "isdir": false, - "ctime": 1436810538.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9115822, - "inode": 526862, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3596", - "xusr": false, - "atime": 1436810540.9115822, - "isdir": false, - "ctime": 1436810540.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6565824, - "inode": 524041, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/775", - "xusr": false, - "atime": 1436810538.6565824, - "isdir": false, - "ctime": 1436810538.6565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5795822, - "inode": 523935, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/669", - "xusr": false, - "atime": 1436810538.5795822, - "isdir": false, - "ctime": 1436810538.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9285824, - "inode": 526887, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3621", - "xusr": false, - "atime": 1436810540.9285824, - "isdir": false, - "ctime": 1436810540.9285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3555822, - "inode": 524989, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1723", - "xusr": false, - "atime": 1436810539.3555822, - "isdir": false, - "ctime": 1436810539.3555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0425823, - "inode": 524560, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1294", - "xusr": false, - "atime": 1436810539.0425823, - "isdir": false, - "ctime": 1436810539.0425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2175822, - "inode": 525960, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2694", - "xusr": false, - "atime": 1436810540.2175822, - "isdir": false, - "ctime": 1436810540.2175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5685823, - "inode": 527723, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4457", - "xusr": false, - "atime": 1436810541.5685823, - "isdir": false, - "ctime": 1436810541.5685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1135824, - "inode": 527143, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3877", - "xusr": false, - "atime": 1436810541.1135824, - "isdir": false, - "ctime": 1436810541.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2065823, - "inode": 525947, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2681", - "xusr": false, - "atime": 1436810540.2065823, - "isdir": false, - "ctime": 1436810540.2065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1525824, - "inode": 523389, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/123", - "xusr": false, - "atime": 1436810538.1525824, - "isdir": false, - "ctime": 1436810538.1525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7875824, - "inode": 524210, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/944", - "xusr": false, - "atime": 1436810538.7875824, - "isdir": false, - "ctime": 1436810538.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2055824, - "inode": 525946, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2680", - "xusr": false, - "atime": 1436810540.2055824, - "isdir": false, - "ctime": 1436810540.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4025824, - "inode": 525027, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1761", - "xusr": false, - "atime": 1436810539.4025824, - "isdir": false, - "ctime": 1436810539.4025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4915824, - "inode": 523816, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/550", - "xusr": false, - "atime": 1436810538.4915824, - "isdir": false, - "ctime": 1436810538.4915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6615822, - "inode": 524048, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/782", - "xusr": false, - "atime": 1436810538.6615822, - "isdir": false, - "ctime": 1436810538.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2775824, - "inode": 526028, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2762", - "xusr": false, - "atime": 1436810540.2775824, - "isdir": false, - "ctime": 1436810540.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7285824, - "inode": 526605, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3339", - "xusr": false, - "atime": 1436810540.7285824, - "isdir": false, - "ctime": 1436810540.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3195822, - "inode": 523619, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/353", - "xusr": false, - "atime": 1436810538.3195822, - "isdir": false, - "ctime": 1436810538.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4635823, - "inode": 527578, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4312", - "xusr": false, - "atime": 1436810541.4635823, - "isdir": false, - "ctime": 1436810541.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7365823, - "inode": 527955, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4689", - "xusr": false, - "atime": 1436810541.7365823, - "isdir": false, - "ctime": 1436810541.7365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1255822, - "inode": 525866, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2600", - "xusr": false, - "atime": 1436810540.1255822, - "isdir": false, - "ctime": 1436810540.1255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0135822, - "inode": 524519, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1253", - "xusr": false, - "atime": 1436810539.0135822, - "isdir": false, - "ctime": 1436810539.0135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3865824, - "inode": 525012, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1746", - "xusr": false, - "atime": 1436810539.3865824, - "isdir": false, - "ctime": 1436810539.3865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8465824, - "inode": 524289, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1023", - "xusr": false, - "atime": 1436810538.8465824, - "isdir": false, - "ctime": 1436810538.8465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5955822, - "inode": 523957, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/691", - "xusr": false, - "atime": 1436810538.5955822, - "isdir": false, - "ctime": 1436810538.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8815823, - "inode": 526819, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3553", - "xusr": false, - "atime": 1436810540.8815823, - "isdir": false, - "ctime": 1436810540.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3495822, - "inode": 524981, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1715", - "xusr": false, - "atime": 1436810539.3495822, - "isdir": false, - "ctime": 1436810539.3495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5155823, - "inode": 523849, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/583", - "xusr": false, - "atime": 1436810538.5155823, - "isdir": false, - "ctime": 1436810538.5155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6095824, - "inode": 523978, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/712", - "xusr": false, - "atime": 1436810538.6095824, - "isdir": false, - "ctime": 1436810538.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9745822, - "inode": 526951, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3685", - "xusr": false, - "atime": 1436810540.9745822, - "isdir": false, - "ctime": 1436810540.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6215823, - "inode": 523993, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/727", - "xusr": false, - "atime": 1436810538.6215823, - "isdir": false, - "ctime": 1436810538.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2765822, - "inode": 526027, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2761", - "xusr": false, - "atime": 1436810540.2765822, - "isdir": false, - "ctime": 1436810540.2765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6315823, - "inode": 527811, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4545", - "xusr": false, - "atime": 1436810541.6315823, - "isdir": false, - "ctime": 1436810541.6315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9705822, - "inode": 526945, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3679", - "xusr": false, - "atime": 1436810540.9705822, - "isdir": false, - "ctime": 1436810540.9705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6915822, - "inode": 524089, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/823", - "xusr": false, - "atime": 1436810538.6915822, - "isdir": false, - "ctime": 1436810538.6915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4305823, - "inode": 523730, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/464", - "xusr": false, - "atime": 1436810538.4305823, - "isdir": false, - "ctime": 1436810538.4305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0015824, - "inode": 524501, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1235", - "xusr": false, - "atime": 1436810539.0015824, - "isdir": false, - "ctime": 1436810539.0015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8955822, - "inode": 526839, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3573", - "xusr": false, - "atime": 1436810540.8955822, - "isdir": false, - "ctime": 1436810540.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6775823, - "inode": 526533, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3267", - "xusr": false, - "atime": 1436810540.6775823, - "isdir": false, - "ctime": 1436810540.6775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8325822, - "inode": 526751, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3485", - "xusr": false, - "atime": 1436810540.8325822, - "isdir": false, - "ctime": 1436810540.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0265822, - "inode": 527020, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3754", - "xusr": false, - "atime": 1436810541.0265822, - "isdir": false, - "ctime": 1436810541.0265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6215823, - "inode": 526455, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3189", - "xusr": false, - "atime": 1436810540.6215823, - "isdir": false, - "ctime": 1436810540.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0565822, - "inode": 524579, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1313", - "xusr": false, - "atime": 1436810539.0565822, - "isdir": false, - "ctime": 1436810539.0565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1985824, - "inode": 527256, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3990", - "xusr": false, - "atime": 1436810541.1985824, - "isdir": false, - "ctime": 1436810541.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4155824, - "inode": 523717, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/451", - "xusr": false, - "atime": 1436810538.4155824, - "isdir": false, - "ctime": 1436810538.4155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3035824, - "inode": 527401, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4135", - "xusr": false, - "atime": 1436810541.3035824, - "isdir": false, - "ctime": 1436810541.3035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0105822, - "inode": 526999, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3733", - "xusr": false, - "atime": 1436810541.0105822, - "isdir": false, - "ctime": 1436810541.0105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9045823, - "inode": 526852, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3586", - "xusr": false, - "atime": 1436810540.9045823, - "isdir": false, - "ctime": 1436810540.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5575824, - "inode": 525177, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1911", - "xusr": false, - "atime": 1436810539.5575824, - "isdir": false, - "ctime": 1436810539.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8755822, - "inode": 524329, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1063", - "xusr": false, - "atime": 1436810538.8755822, - "isdir": false, - "ctime": 1436810538.8755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8905823, - "inode": 526832, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3566", - "xusr": false, - "atime": 1436810540.8905823, - "isdir": false, - "ctime": 1436810540.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8305824, - "inode": 525493, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2227", - "xusr": false, - "atime": 1436810539.8305824, - "isdir": false, - "ctime": 1436810539.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8645823, - "inode": 524313, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1047", - "xusr": false, - "atime": 1436810538.8645823, - "isdir": false, - "ctime": 1436810538.8645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0175824, - "inode": 527009, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3743", - "xusr": false, - "atime": 1436810541.0175824, - "isdir": false, - "ctime": 1436810541.0175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8655822, - "inode": 528131, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4865", - "xusr": false, - "atime": 1436810541.8655822, - "isdir": false, - "ctime": 1436810541.8655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2775824, - "inode": 526029, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2763", - "xusr": false, - "atime": 1436810540.2775824, - "isdir": false, - "ctime": 1436810540.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7195823, - "inode": 526593, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3327", - "xusr": false, - "atime": 1436810540.7195823, - "isdir": false, - "ctime": 1436810540.7195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4915824, - "inode": 527617, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4351", - "xusr": false, - "atime": 1436810541.4915824, - "isdir": false, - "ctime": 1436810541.4915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4475822, - "inode": 527556, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4290", - "xusr": false, - "atime": 1436810541.4475822, - "isdir": false, - "ctime": 1436810541.4475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4065824, - "inode": 527501, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4235", - "xusr": false, - "atime": 1436810541.4065824, - "isdir": false, - "ctime": 1436810541.4065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5145824, - "inode": 526312, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3046", - "xusr": false, - "atime": 1436810540.5145824, - "isdir": false, - "ctime": 1436810540.5145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0035822, - "inode": 526989, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3723", - "xusr": false, - "atime": 1436810541.0035822, - "isdir": false, - "ctime": 1436810541.0035822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0685823, - "inode": 524597, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1331", - "xusr": false, - "atime": 1436810539.0685823, - "isdir": false, - "ctime": 1436810539.0685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6635823, - "inode": 527853, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4587", - "xusr": false, - "atime": 1436810541.6635823, - "isdir": false, - "ctime": 1436810541.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6275823, - "inode": 524001, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/735", - "xusr": false, - "atime": 1436810538.6275823, - "isdir": false, - "ctime": 1436810538.6275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2385824, - "inode": 527312, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4046", - "xusr": false, - "atime": 1436810541.2385824, - "isdir": false, - "ctime": 1436810541.2385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8885822, - "inode": 525575, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2309", - "xusr": false, - "atime": 1436810539.8885822, - "isdir": false, - "ctime": 1436810539.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3525822, - "inode": 526125, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2859", - "xusr": false, - "atime": 1436810540.3525822, - "isdir": false, - "ctime": 1436810540.3525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2485824, - "inode": 525995, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2729", - "xusr": false, - "atime": 1436810540.2485824, - "isdir": false, - "ctime": 1436810540.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4275823, - "inode": 527528, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4262", - "xusr": false, - "atime": 1436810541.4275823, - "isdir": false, - "ctime": 1436810541.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4705822, - "inode": 526276, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3010", - "xusr": false, - "atime": 1436810540.4705822, - "isdir": false, - "ctime": 1436810540.4705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8225822, - "inode": 526737, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3471", - "xusr": false, - "atime": 1436810540.8225822, - "isdir": false, - "ctime": 1436810540.8225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5135822, - "inode": 523846, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/580", - "xusr": false, - "atime": 1436810538.5135822, - "isdir": false, - "ctime": 1436810538.5135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9175823, - "inode": 524387, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1121", - "xusr": false, - "atime": 1436810538.9175823, - "isdir": false, - "ctime": 1436810538.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9965823, - "inode": 524494, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1228", - "xusr": false, - "atime": 1436810538.9965823, - "isdir": false, - "ctime": 1436810538.9965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2165823, - "inode": 524809, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1543", - "xusr": false, - "atime": 1436810539.2165823, - "isdir": false, - "ctime": 1436810539.2165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8345823, - "inode": 524273, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1007", - "xusr": false, - "atime": 1436810538.8345823, - "isdir": false, - "ctime": 1436810538.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8735824, - "inode": 528142, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4876", - "xusr": false, - "atime": 1436810541.8735824, - "isdir": false, - "ctime": 1436810541.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5495822, - "inode": 523895, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/629", - "xusr": false, - "atime": 1436810538.5495822, - "isdir": false, - "ctime": 1436810538.5495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2925823, - "inode": 527388, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4122", - "xusr": false, - "atime": 1436810541.2925823, - "isdir": false, - "ctime": 1436810541.2925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0015824, - "inode": 526987, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3721", - "xusr": false, - "atime": 1436810541.0015824, - "isdir": false, - "ctime": 1436810541.0015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4815824, - "inode": 526286, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3020", - "xusr": false, - "atime": 1436810540.4815824, - "isdir": false, - "ctime": 1436810540.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3135824, - "inode": 523613, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/347", - "xusr": false, - "atime": 1436810538.3135824, - "isdir": false, - "ctime": 1436810538.3135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2355824, - "inode": 527308, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4042", - "xusr": false, - "atime": 1436810541.2355824, - "isdir": false, - "ctime": 1436810541.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1075823, - "inode": 525849, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2583", - "xusr": false, - "atime": 1436810540.1075823, - "isdir": false, - "ctime": 1436810540.1075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7825823, - "inode": 525431, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2165", - "xusr": false, - "atime": 1436810539.7825823, - "isdir": false, - "ctime": 1436810539.7825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0865824, - "inode": 527105, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3839", - "xusr": false, - "atime": 1436810541.0865824, - "isdir": false, - "ctime": 1436810541.0865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0725822, - "inode": 524603, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1337", - "xusr": false, - "atime": 1436810539.0725822, - "isdir": false, - "ctime": 1436810539.0725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2815824, - "inode": 527372, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4106", - "xusr": false, - "atime": 1436810541.2815824, - "isdir": false, - "ctime": 1436810541.2815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3665824, - "inode": 526144, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2878", - "xusr": false, - "atime": 1436810540.3665824, - "isdir": false, - "ctime": 1436810540.3665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9535823, - "inode": 524434, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1168", - "xusr": false, - "atime": 1436810538.9535823, - "isdir": false, - "ctime": 1436810538.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9745822, - "inode": 524465, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1199", - "xusr": false, - "atime": 1436810538.9745822, - "isdir": false, - "ctime": 1436810538.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1885824, - "inode": 525927, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2661", - "xusr": false, - "atime": 1436810540.1885824, - "isdir": false, - "ctime": 1436810540.1885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7555823, - "inode": 527981, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4715", - "xusr": false, - "atime": 1436810541.7555823, - "isdir": false, - "ctime": 1436810541.7555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0715823, - "inode": 524601, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1335", - "xusr": false, - "atime": 1436810539.0715823, - "isdir": false, - "ctime": 1436810539.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3795824, - "inode": 523672, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/406", - "xusr": false, - "atime": 1436810538.3795824, - "isdir": false, - "ctime": 1436810538.3795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5725822, - "inode": 526387, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3121", - "xusr": false, - "atime": 1436810540.5725822, - "isdir": false, - "ctime": 1436810540.5725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9025824, - "inode": 525595, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2329", - "xusr": false, - "atime": 1436810539.9025824, - "isdir": false, - "ctime": 1436810539.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8575823, - "inode": 528120, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4854", - "xusr": false, - "atime": 1436810541.8575823, - "isdir": false, - "ctime": 1436810541.8575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8475823, - "inode": 524290, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1024", - "xusr": false, - "atime": 1436810538.8475823, - "isdir": false, - "ctime": 1436810538.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2975824, - "inode": 526049, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2783", - "xusr": false, - "atime": 1436810540.2975824, - "isdir": false, - "ctime": 1436810540.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5025823, - "inode": 523831, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/565", - "xusr": false, - "atime": 1436810538.5025823, - "isdir": false, - "ctime": 1436810538.5025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0065823, - "inode": 524508, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1242", - "xusr": false, - "atime": 1436810539.0065823, - "isdir": false, - "ctime": 1436810539.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0725822, - "inode": 527085, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3819", - "xusr": false, - "atime": 1436810541.0725822, - "isdir": false, - "ctime": 1436810541.0725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5665822, - "inode": 525190, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1924", - "xusr": false, - "atime": 1436810539.5665822, - "isdir": false, - "ctime": 1436810539.5665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2395823, - "inode": 525985, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2719", - "xusr": false, - "atime": 1436810540.2395823, - "isdir": false, - "ctime": 1436810540.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0755823, - "inode": 523284, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/18", - "xusr": false, - "atime": 1436810538.0755823, - "isdir": false, - "ctime": 1436810538.0755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2915823, - "inode": 527386, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4120", - "xusr": false, - "atime": 1436810541.2915823, - "isdir": false, - "ctime": 1436810541.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3895824, - "inode": 526177, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2911", - "xusr": false, - "atime": 1436810540.3895824, - "isdir": false, - "ctime": 1436810540.3895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0055823, - "inode": 525736, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2470", - "xusr": false, - "atime": 1436810540.0055823, - "isdir": false, - "ctime": 1436810540.0055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1875823, - "inode": 524767, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1501", - "xusr": false, - "atime": 1436810539.1875823, - "isdir": false, - "ctime": 1436810539.1875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8075824, - "inode": 524237, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/971", - "xusr": false, - "atime": 1436810538.8075824, - "isdir": false, - "ctime": 1436810538.8075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1435823, - "inode": 524705, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1439", - "xusr": false, - "atime": 1436810539.1435823, - "isdir": false, - "ctime": 1436810539.1435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4205823, - "inode": 527520, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4254", - "xusr": false, - "atime": 1436810541.4205823, - "isdir": false, - "ctime": 1436810541.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6175823, - "inode": 527792, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4526", - "xusr": false, - "atime": 1436810541.6175823, - "isdir": false, - "ctime": 1436810541.6175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7315824, - "inode": 527948, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4682", - "xusr": false, - "atime": 1436810541.7315824, - "isdir": false, - "ctime": 1436810541.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5215824, - "inode": 527659, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4393", - "xusr": false, - "atime": 1436810541.5215824, - "isdir": false, - "ctime": 1436810541.5215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5345824, - "inode": 526335, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3069", - "xusr": false, - "atime": 1436810540.5345824, - "isdir": false, - "ctime": 1436810540.5345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1965823, - "inode": 525936, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2670", - "xusr": false, - "atime": 1436810540.1965823, - "isdir": false, - "ctime": 1436810540.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7465823, - "inode": 526631, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3365", - "xusr": false, - "atime": 1436810540.7465823, - "isdir": false, - "ctime": 1436810540.7465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5935824, - "inode": 523955, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/689", - "xusr": false, - "atime": 1436810538.5935824, - "isdir": false, - "ctime": 1436810538.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1765823, - "inode": 524751, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1485", - "xusr": false, - "atime": 1436810539.1765823, - "isdir": false, - "ctime": 1436810539.1765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2695823, - "inode": 526018, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2752", - "xusr": false, - "atime": 1436810540.2695823, - "isdir": false, - "ctime": 1436810540.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3625822, - "inode": 523656, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/390", - "xusr": false, - "atime": 1436810538.3625822, - "isdir": false, - "ctime": 1436810538.3625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6315823, - "inode": 527810, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4544", - "xusr": false, - "atime": 1436810541.6315823, - "isdir": false, - "ctime": 1436810541.6315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3175824, - "inode": 524949, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1683", - "xusr": false, - "atime": 1436810539.3175824, - "isdir": false, - "ctime": 1436810539.3175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8085823, - "inode": 528054, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4788", - "xusr": false, - "atime": 1436810541.8085823, - "isdir": false, - "ctime": 1436810541.8085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5745823, - "inode": 526390, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3124", - "xusr": false, - "atime": 1436810540.5745823, - "isdir": false, - "ctime": 1436810540.5745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7875824, - "inode": 528025, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4759", - "xusr": false, - "atime": 1436810541.7875824, - "isdir": false, - "ctime": 1436810541.7875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9265823, - "inode": 526884, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3618", - "xusr": false, - "atime": 1436810540.9265823, - "isdir": false, - "ctime": 1436810540.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9055824, - "inode": 525600, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2334", - "xusr": false, - "atime": 1436810539.9055824, - "isdir": false, - "ctime": 1436810539.9055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5245824, - "inode": 527662, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4396", - "xusr": false, - "atime": 1436810541.5245824, - "isdir": false, - "ctime": 1436810541.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1935823, - "inode": 523448, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/182", - "xusr": false, - "atime": 1436810538.1935823, - "isdir": false, - "ctime": 1436810538.1935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5695822, - "inode": 526382, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3116", - "xusr": false, - "atime": 1436810540.5695822, - "isdir": false, - "ctime": 1436810540.5695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0065823, - "inode": 526994, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3728", - "xusr": false, - "atime": 1436810541.0065823, - "isdir": false, - "ctime": 1436810541.0065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0865824, - "inode": 524623, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1357", - "xusr": false, - "atime": 1436810539.0865824, - "isdir": false, - "ctime": 1436810539.0865824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9535823, - "inode": 528254, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4988", - "xusr": false, - "atime": 1436810541.9535823, - "isdir": false, - "ctime": 1436810541.9535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3355823, - "inode": 526102, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2836", - "xusr": false, - "atime": 1436810540.3355823, - "isdir": false, - "ctime": 1436810540.3355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5125823, - "inode": 526310, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3044", - "xusr": false, - "atime": 1436810540.5125823, - "isdir": false, - "ctime": 1436810540.5125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5355823, - "inode": 525155, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1889", - "xusr": false, - "atime": 1436810539.5355823, - "isdir": false, - "ctime": 1436810539.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7635822, - "inode": 526654, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3388", - "xusr": false, - "atime": 1436810540.7635822, - "isdir": false, - "ctime": 1436810540.7635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4895823, - "inode": 523813, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/547", - "xusr": false, - "atime": 1436810538.4895823, - "isdir": false, - "ctime": 1436810538.4895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4675822, - "inode": 526272, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3006", - "xusr": false, - "atime": 1436810540.4675822, - "isdir": false, - "ctime": 1436810540.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7205822, - "inode": 526594, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3328", - "xusr": false, - "atime": 1436810540.7205822, - "isdir": false, - "ctime": 1436810540.7205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0055823, - "inode": 526992, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3726", - "xusr": false, - "atime": 1436810541.0055823, - "isdir": false, - "ctime": 1436810541.0055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7835822, - "inode": 528019, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4753", - "xusr": false, - "atime": 1436810541.7835822, - "isdir": false, - "ctime": 1436810541.7835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0895822, - "inode": 527109, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3843", - "xusr": false, - "atime": 1436810541.0895822, - "isdir": false, - "ctime": 1436810541.0895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9215822, - "inode": 526876, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3610", - "xusr": false, - "atime": 1436810540.9215822, - "isdir": false, - "ctime": 1436810540.9215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5875823, - "inode": 526407, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3141", - "xusr": false, - "atime": 1436810540.5875823, - "isdir": false, - "ctime": 1436810540.5875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7845824, - "inode": 524206, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/940", - "xusr": false, - "atime": 1436810538.7845824, - "isdir": false, - "ctime": 1436810538.7845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3085823, - "inode": 523609, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/343", - "xusr": false, - "atime": 1436810538.3085823, - "isdir": false, - "ctime": 1436810538.3085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1355822, - "inode": 523365, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/99", - "xusr": false, - "atime": 1436810538.1355822, - "isdir": false, - "ctime": 1436810538.1355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6885824, - "inode": 526549, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3283", - "xusr": false, - "atime": 1436810540.6885824, - "isdir": false, - "ctime": 1436810540.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5085824, - "inode": 527640, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4374", - "xusr": false, - "atime": 1436810541.5085824, - "isdir": false, - "ctime": 1436810541.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3125823, - "inode": 526070, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2804", - "xusr": false, - "atime": 1436810540.3125823, - "isdir": false, - "ctime": 1436810540.3125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5005822, - "inode": 527630, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4364", - "xusr": false, - "atime": 1436810541.5005822, - "isdir": false, - "ctime": 1436810541.5005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4695823, - "inode": 526274, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3008", - "xusr": false, - "atime": 1436810540.4695823, - "isdir": false, - "ctime": 1436810540.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2675824, - "inode": 526015, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2749", - "xusr": false, - "atime": 1436810540.2675824, - "isdir": false, - "ctime": 1436810540.2675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7125823, - "inode": 525348, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2082", - "xusr": false, - "atime": 1436810539.7125823, - "isdir": false, - "ctime": 1436810539.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4405823, - "inode": 527546, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4280", - "xusr": false, - "atime": 1436810541.4405823, - "isdir": false, - "ctime": 1436810541.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5965824, - "inode": 527763, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4497", - "xusr": false, - "atime": 1436810541.5965824, - "isdir": false, - "ctime": 1436810541.5965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6005824, - "inode": 523965, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/699", - "xusr": false, - "atime": 1436810538.6005824, - "isdir": false, - "ctime": 1436810538.6005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1575823, - "inode": 524725, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1459", - "xusr": false, - "atime": 1436810539.1575823, - "isdir": false, - "ctime": 1436810539.1575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1265824, - "inode": 525867, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2601", - "xusr": false, - "atime": 1436810540.1265824, - "isdir": false, - "ctime": 1436810540.1265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1665823, - "inode": 523409, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/143", - "xusr": false, - "atime": 1436810538.1665823, - "isdir": false, - "ctime": 1436810538.1665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3055823, - "inode": 527404, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4138", - "xusr": false, - "atime": 1436810541.3055823, - "isdir": false, - "ctime": 1436810541.3055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8785822, - "inode": 524332, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1066", - "xusr": false, - "atime": 1436810538.8785822, - "isdir": false, - "ctime": 1436810538.8785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2655823, - "inode": 526013, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2747", - "xusr": false, - "atime": 1436810540.2655823, - "isdir": false, - "ctime": 1436810540.2655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5265822, - "inode": 526324, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3058", - "xusr": false, - "atime": 1436810540.5265822, - "isdir": false, - "ctime": 1436810540.5265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2855823, - "inode": 527378, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4112", - "xusr": false, - "atime": 1436810541.2855823, - "isdir": false, - "ctime": 1436810541.2855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1775823, - "inode": 523425, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/159", - "xusr": false, - "atime": 1436810538.1775823, - "isdir": false, - "ctime": 1436810538.1775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9185822, - "inode": 526872, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3606", - "xusr": false, - "atime": 1436810540.9185822, - "isdir": false, - "ctime": 1436810540.9185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8495822, - "inode": 525520, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2254", - "xusr": false, - "atime": 1436810539.8495822, - "isdir": false, - "ctime": 1436810539.8495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6285822, - "inode": 524002, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/736", - "xusr": false, - "atime": 1436810538.6285822, - "isdir": false, - "ctime": 1436810538.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0005822, - "inode": 525729, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2463", - "xusr": false, - "atime": 1436810540.0005822, - "isdir": false, - "ctime": 1436810540.0005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2145822, - "inode": 527278, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4012", - "xusr": false, - "atime": 1436810541.2145822, - "isdir": false, - "ctime": 1436810541.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5565822, - "inode": 527707, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4441", - "xusr": false, - "atime": 1436810541.5565822, - "isdir": false, - "ctime": 1436810541.5565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1395824, - "inode": 524699, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1433", - "xusr": false, - "atime": 1436810539.1395824, - "isdir": false, - "ctime": 1436810539.1395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6895823, - "inode": 526550, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3284", - "xusr": false, - "atime": 1436810540.6895823, - "isdir": false, - "ctime": 1436810540.6895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5355823, - "inode": 526336, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3070", - "xusr": false, - "atime": 1436810540.5355823, - "isdir": false, - "ctime": 1436810540.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0115824, - "inode": 524516, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1250", - "xusr": false, - "atime": 1436810539.0115824, - "isdir": false, - "ctime": 1436810539.0115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4935822, - "inode": 525114, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1848", - "xusr": false, - "atime": 1436810539.4935822, - "isdir": false, - "ctime": 1436810539.4935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8165822, - "inode": 525474, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2208", - "xusr": false, - "atime": 1436810539.8165822, - "isdir": false, - "ctime": 1436810539.8165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5505824, - "inode": 523896, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/630", - "xusr": false, - "atime": 1436810538.5505824, - "isdir": false, - "ctime": 1436810538.5505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5675824, - "inode": 526380, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3114", - "xusr": false, - "atime": 1436810540.5675824, - "isdir": false, - "ctime": 1436810540.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6765823, - "inode": 524068, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/802", - "xusr": false, - "atime": 1436810538.6765823, - "isdir": false, - "ctime": 1436810538.6765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4175823, - "inode": 526216, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2950", - "xusr": false, - "atime": 1436810540.4175823, - "isdir": false, - "ctime": 1436810540.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7785823, - "inode": 526675, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3409", - "xusr": false, - "atime": 1436810540.7785823, - "isdir": false, - "ctime": 1436810540.7785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2445824, - "inode": 525990, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2724", - "xusr": false, - "atime": 1436810540.2445824, - "isdir": false, - "ctime": 1436810540.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2275822, - "inode": 524825, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1559", - "xusr": false, - "atime": 1436810539.2275822, - "isdir": false, - "ctime": 1436810539.2275822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6615822, - "inode": 527850, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4584", - "xusr": false, - "atime": 1436810541.6615822, - "isdir": false, - "ctime": 1436810541.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3175824, - "inode": 526076, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2810", - "xusr": false, - "atime": 1436810540.3175824, - "isdir": false, - "ctime": 1436810540.3175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1725824, - "inode": 527221, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3955", - "xusr": false, - "atime": 1436810541.1725824, - "isdir": false, - "ctime": 1436810541.1725824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1275823, - "inode": 523353, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/87", - "xusr": false, - "atime": 1436810538.1275823, - "isdir": false, - "ctime": 1436810538.1275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2375822, - "inode": 523509, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/243", - "xusr": false, - "atime": 1436810538.2375822, - "isdir": false, - "ctime": 1436810538.2375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8465824, - "inode": 526770, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3504", - "xusr": false, - "atime": 1436810540.8465824, - "isdir": false, - "ctime": 1436810540.8465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1895823, - "inode": 527244, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3978", - "xusr": false, - "atime": 1436810541.1895823, - "isdir": false, - "ctime": 1436810541.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8765824, - "inode": 524330, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1064", - "xusr": false, - "atime": 1436810538.8765824, - "isdir": false, - "ctime": 1436810538.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9115822, - "inode": 524377, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1111", - "xusr": false, - "atime": 1436810538.9115822, - "isdir": false, - "ctime": 1436810538.9115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1365824, - "inode": 527174, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3908", - "xusr": false, - "atime": 1436810541.1365824, - "isdir": false, - "ctime": 1436810541.1365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2865822, - "inode": 527380, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4114", - "xusr": false, - "atime": 1436810541.2865822, - "isdir": false, - "ctime": 1436810541.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4655824, - "inode": 527581, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4315", - "xusr": false, - "atime": 1436810541.4655824, - "isdir": false, - "ctime": 1436810541.4655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6385822, - "inode": 526479, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3213", - "xusr": false, - "atime": 1436810540.6385822, - "isdir": false, - "ctime": 1436810540.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0555823, - "inode": 527061, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3795", - "xusr": false, - "atime": 1436810541.0555823, - "isdir": false, - "ctime": 1436810541.0555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4585824, - "inode": 523769, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/503", - "xusr": false, - "atime": 1436810538.4585824, - "isdir": false, - "ctime": 1436810538.4585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9235823, - "inode": 526879, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3613", - "xusr": false, - "atime": 1436810540.9235823, - "isdir": false, - "ctime": 1436810540.9235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1495824, - "inode": 523385, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/119", - "xusr": false, - "atime": 1436810538.1495824, - "isdir": false, - "ctime": 1436810538.1495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6235824, - "inode": 523995, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/729", - "xusr": false, - "atime": 1436810538.6235824, - "isdir": false, - "ctime": 1436810538.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4285824, - "inode": 526232, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2966", - "xusr": false, - "atime": 1436810540.4285824, - "isdir": false, - "ctime": 1436810540.4285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0515823, - "inode": 524573, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1307", - "xusr": false, - "atime": 1436810539.0515823, - "isdir": false, - "ctime": 1436810539.0515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3335824, - "inode": 527432, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4166", - "xusr": false, - "atime": 1436810541.3335824, - "isdir": false, - "ctime": 1436810541.3335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7175822, - "inode": 527929, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4663", - "xusr": false, - "atime": 1436810541.7175822, - "isdir": false, - "ctime": 1436810541.7175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6995823, - "inode": 526564, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3298", - "xusr": false, - "atime": 1436810540.6995823, - "isdir": false, - "ctime": 1436810540.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9745822, - "inode": 526950, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3684", - "xusr": false, - "atime": 1436810540.9745822, - "isdir": false, - "ctime": 1436810540.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9205823, - "inode": 525619, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2353", - "xusr": false, - "atime": 1436810539.9205823, - "isdir": false, - "ctime": 1436810539.9205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8925824, - "inode": 526835, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3569", - "xusr": false, - "atime": 1436810540.8925824, - "isdir": false, - "ctime": 1436810540.8925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8905823, - "inode": 525578, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2312", - "xusr": false, - "atime": 1436810539.8905823, - "isdir": false, - "ctime": 1436810539.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6615822, - "inode": 524047, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/781", - "xusr": false, - "atime": 1436810538.6615822, - "isdir": false, - "ctime": 1436810538.6615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4185822, - "inode": 523721, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/455", - "xusr": false, - "atime": 1436810538.4185822, - "isdir": false, - "ctime": 1436810538.4185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8405824, - "inode": 528097, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4831", - "xusr": false, - "atime": 1436810541.8405824, - "isdir": false, - "ctime": 1436810541.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7825823, - "inode": 526680, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3414", - "xusr": false, - "atime": 1436810540.7825823, - "isdir": false, - "ctime": 1436810540.7825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8245823, - "inode": 524259, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/993", - "xusr": false, - "atime": 1436810538.8245823, - "isdir": false, - "ctime": 1436810538.8245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6245823, - "inode": 525256, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1990", - "xusr": false, - "atime": 1436810539.6245823, - "isdir": false, - "ctime": 1436810539.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4095824, - "inode": 523709, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/443", - "xusr": false, - "atime": 1436810538.4095824, - "isdir": false, - "ctime": 1436810538.4095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3645823, - "inode": 523659, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/393", - "xusr": false, - "atime": 1436810538.3645823, - "isdir": false, - "ctime": 1436810538.3645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2145822, - "inode": 524806, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1540", - "xusr": false, - "atime": 1436810539.2145822, - "isdir": false, - "ctime": 1436810539.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8525822, - "inode": 525525, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2259", - "xusr": false, - "atime": 1436810539.8525822, - "isdir": false, - "ctime": 1436810539.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1925824, - "inode": 525932, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2666", - "xusr": false, - "atime": 1436810540.1925824, - "isdir": false, - "ctime": 1436810540.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7055824, - "inode": 525341, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2075", - "xusr": false, - "atime": 1436810539.7055824, - "isdir": false, - "ctime": 1436810539.7055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6855824, - "inode": 526544, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3278", - "xusr": false, - "atime": 1436810540.6855824, - "isdir": false, - "ctime": 1436810540.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9795823, - "inode": 526958, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3692", - "xusr": false, - "atime": 1436810540.9795823, - "isdir": false, - "ctime": 1436810540.9795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6965823, - "inode": 524096, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/830", - "xusr": false, - "atime": 1436810538.6965823, - "isdir": false, - "ctime": 1436810538.6965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7675824, - "inode": 527997, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4731", - "xusr": false, - "atime": 1436810541.7675824, - "isdir": false, - "ctime": 1436810541.7675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0005822, - "inode": 526985, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3719", - "xusr": false, - "atime": 1436810541.0005822, - "isdir": false, - "ctime": 1436810541.0005822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2525823, - "inode": 527331, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4065", - "xusr": false, - "atime": 1436810541.2525823, - "isdir": false, - "ctime": 1436810541.2525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0465822, - "inode": 525791, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2525", - "xusr": false, - "atime": 1436810540.0465822, - "isdir": false, - "ctime": 1436810540.0465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8545823, - "inode": 525528, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2262", - "xusr": false, - "atime": 1436810539.8545823, - "isdir": false, - "ctime": 1436810539.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0425823, - "inode": 525786, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2520", - "xusr": false, - "atime": 1436810540.0425823, - "isdir": false, - "ctime": 1436810540.0425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8595824, - "inode": 528123, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4857", - "xusr": false, - "atime": 1436810541.8595824, - "isdir": false, - "ctime": 1436810541.8595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5805824, - "inode": 526398, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3132", - "xusr": false, - "atime": 1436810540.5805824, - "isdir": false, - "ctime": 1436810540.5805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0875823, - "inode": 527106, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3840", - "xusr": false, - "atime": 1436810541.0875823, - "isdir": false, - "ctime": 1436810541.0875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4145823, - "inode": 525041, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1775", - "xusr": false, - "atime": 1436810539.4145823, - "isdir": false, - "ctime": 1436810539.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5525823, - "inode": 525172, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1906", - "xusr": false, - "atime": 1436810539.5525823, - "isdir": false, - "ctime": 1436810539.5525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5045824, - "inode": 523833, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/567", - "xusr": false, - "atime": 1436810538.5045824, - "isdir": false, - "ctime": 1436810538.5045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3085823, - "inode": 527408, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4142", - "xusr": false, - "atime": 1436810541.3085823, - "isdir": false, - "ctime": 1436810541.3085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3855822, - "inode": 523680, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/414", - "xusr": false, - "atime": 1436810538.3855822, - "isdir": false, - "ctime": 1436810538.3855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5485823, - "inode": 527696, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4430", - "xusr": false, - "atime": 1436810541.5485823, - "isdir": false, - "ctime": 1436810541.5485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9165823, - "inode": 524385, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1119", - "xusr": false, - "atime": 1436810538.9165823, - "isdir": false, - "ctime": 1436810538.9165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8555822, - "inode": 528117, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4851", - "xusr": false, - "atime": 1436810541.8555822, - "isdir": false, - "ctime": 1436810541.8555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6855824, - "inode": 524081, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/815", - "xusr": false, - "atime": 1436810538.6855824, - "isdir": false, - "ctime": 1436810538.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9365823, - "inode": 528230, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4964", - "xusr": false, - "atime": 1436810541.9365823, - "isdir": false, - "ctime": 1436810541.9365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8415823, - "inode": 524283, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1017", - "xusr": false, - "atime": 1436810538.8415823, - "isdir": false, - "ctime": 1436810538.8415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7815824, - "inode": 528016, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4750", - "xusr": false, - "atime": 1436810541.7815824, - "isdir": false, - "ctime": 1436810541.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0935824, - "inode": 524633, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1367", - "xusr": false, - "atime": 1436810539.0935824, - "isdir": false, - "ctime": 1436810539.0935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2885823, - "inode": 527382, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4116", - "xusr": false, - "atime": 1436810541.2885823, - "isdir": false, - "ctime": 1436810541.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8265822, - "inode": 528078, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4812", - "xusr": false, - "atime": 1436810541.8265822, - "isdir": false, - "ctime": 1436810541.8265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1125822, - "inode": 524660, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1394", - "xusr": false, - "atime": 1436810539.1125822, - "isdir": false, - "ctime": 1436810539.1125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9165823, - "inode": 525614, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2348", - "xusr": false, - "atime": 1436810539.9165823, - "isdir": false, - "ctime": 1436810539.9165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5135822, - "inode": 526311, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3045", - "xusr": false, - "atime": 1436810540.5135822, - "isdir": false, - "ctime": 1436810540.5135822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9175823, - "inode": 528204, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4938", - "xusr": false, - "atime": 1436810541.9175823, - "isdir": false, - "ctime": 1436810541.9175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9225824, - "inode": 528211, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4945", - "xusr": false, - "atime": 1436810541.9225824, - "isdir": false, - "ctime": 1436810541.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0155823, - "inode": 524521, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1255", - "xusr": false, - "atime": 1436810539.0155823, - "isdir": false, - "ctime": 1436810539.0155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1495824, - "inode": 524714, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1448", - "xusr": false, - "atime": 1436810539.1495824, - "isdir": false, - "ctime": 1436810539.1495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0715823, - "inode": 525815, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2549", - "xusr": false, - "atime": 1436810540.0715823, - "isdir": false, - "ctime": 1436810540.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3475823, - "inode": 523647, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/381", - "xusr": false, - "atime": 1436810538.3475823, - "isdir": false, - "ctime": 1436810538.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1945822, - "inode": 525935, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2669", - "xusr": false, - "atime": 1436810540.1945822, - "isdir": false, - "ctime": 1436810540.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4915824, - "inode": 525112, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1846", - "xusr": false, - "atime": 1436810539.4915824, - "isdir": false, - "ctime": 1436810539.4915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1085823, - "inode": 525850, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2584", - "xusr": false, - "atime": 1436810540.1085823, - "isdir": false, - "ctime": 1436810540.1085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2835822, - "inode": 526034, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2768", - "xusr": false, - "atime": 1436810540.2835822, - "isdir": false, - "ctime": 1436810540.2835822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8205824, - "inode": 524254, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/988", - "xusr": false, - "atime": 1436810538.8205824, - "isdir": false, - "ctime": 1436810538.8205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9475822, - "inode": 525656, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2390", - "xusr": false, - "atime": 1436810539.9475822, - "isdir": false, - "ctime": 1436810539.9475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7465823, - "inode": 524159, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/893", - "xusr": false, - "atime": 1436810538.7465823, - "isdir": false, - "ctime": 1436810538.7465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5575824, - "inode": 526366, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3100", - "xusr": false, - "atime": 1436810540.5575824, - "isdir": false, - "ctime": 1436810540.5575824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8105824, - "inode": 526720, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3454", - "xusr": false, - "atime": 1436810540.8105824, - "isdir": false, - "ctime": 1436810540.8105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9325824, - "inode": 525636, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2370", - "xusr": false, - "atime": 1436810539.9325824, - "isdir": false, - "ctime": 1436810539.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5185823, - "inode": 525137, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1871", - "xusr": false, - "atime": 1436810539.5185823, - "isdir": false, - "ctime": 1436810539.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7035823, - "inode": 525340, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2074", - "xusr": false, - "atime": 1436810539.7035823, - "isdir": false, - "ctime": 1436810539.7035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7125823, - "inode": 526583, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3317", - "xusr": false, - "atime": 1436810540.7125823, - "isdir": false, - "ctime": 1436810540.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7415824, - "inode": 524153, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/887", - "xusr": false, - "atime": 1436810538.7415824, - "isdir": false, - "ctime": 1436810538.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9135823, - "inode": 526865, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3599", - "xusr": false, - "atime": 1436810540.9135823, - "isdir": false, - "ctime": 1436810540.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5695822, - "inode": 525194, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1928", - "xusr": false, - "atime": 1436810539.5695822, - "isdir": false, - "ctime": 1436810539.5695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0925822, - "inode": 527113, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3847", - "xusr": false, - "atime": 1436810541.0925822, - "isdir": false, - "ctime": 1436810541.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6795824, - "inode": 524072, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/806", - "xusr": false, - "atime": 1436810538.6795824, - "isdir": false, - "ctime": 1436810538.6795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9355824, - "inode": 528229, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4963", - "xusr": false, - "atime": 1436810541.9355824, - "isdir": false, - "ctime": 1436810541.9355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8625822, - "inode": 526792, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3526", - "xusr": false, - "atime": 1436810540.8625822, - "isdir": false, - "ctime": 1436810540.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5385823, - "inode": 526340, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3074", - "xusr": false, - "atime": 1436810540.5385823, - "isdir": false, - "ctime": 1436810540.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8665824, - "inode": 525544, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2278", - "xusr": false, - "atime": 1436810539.8665824, - "isdir": false, - "ctime": 1436810539.8665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1615822, - "inode": 524730, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1464", - "xusr": false, - "atime": 1436810539.1615822, - "isdir": false, - "ctime": 1436810539.1615822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1805823, - "inode": 527231, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3965", - "xusr": false, - "atime": 1436810541.1805823, - "isdir": false, - "ctime": 1436810541.1805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4635823, - "inode": 526267, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3001", - "xusr": false, - "atime": 1436810540.4635823, - "isdir": false, - "ctime": 1436810540.4635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8345823, - "inode": 528089, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4823", - "xusr": false, - "atime": 1436810541.8345823, - "isdir": false, - "ctime": 1436810541.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9245822, - "inode": 526881, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3615", - "xusr": false, - "atime": 1436810540.9245822, - "isdir": false, - "ctime": 1436810540.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7975824, - "inode": 526702, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3436", - "xusr": false, - "atime": 1436810540.7975824, - "isdir": false, - "ctime": 1436810540.7975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1055822, - "inode": 527131, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3865", - "xusr": false, - "atime": 1436810541.1055822, - "isdir": false, - "ctime": 1436810541.1055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7235823, - "inode": 525359, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2093", - "xusr": false, - "atime": 1436810539.7235823, - "isdir": false, - "ctime": 1436810539.7235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6905823, - "inode": 526551, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3285", - "xusr": false, - "atime": 1436810540.6905823, - "isdir": false, - "ctime": 1436810540.6905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4665823, - "inode": 527582, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4316", - "xusr": false, - "atime": 1436810541.4665823, - "isdir": false, - "ctime": 1436810541.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7585824, - "inode": 527984, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4718", - "xusr": false, - "atime": 1436810541.7585824, - "isdir": false, - "ctime": 1436810541.7585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9375823, - "inode": 526899, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3633", - "xusr": false, - "atime": 1436810540.9375823, - "isdir": false, - "ctime": 1436810540.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7555823, - "inode": 526643, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3377", - "xusr": false, - "atime": 1436810540.7555823, - "isdir": false, - "ctime": 1436810540.7555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4775822, - "inode": 527598, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4332", - "xusr": false, - "atime": 1436810541.4775822, - "isdir": false, - "ctime": 1436810541.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2115824, - "inode": 525954, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2688", - "xusr": false, - "atime": 1436810540.2115824, - "isdir": false, - "ctime": 1436810540.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3285823, - "inode": 523625, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/359", - "xusr": false, - "atime": 1436810538.3285823, - "isdir": false, - "ctime": 1436810538.3285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4375823, - "inode": 527542, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4276", - "xusr": false, - "atime": 1436810541.4375823, - "isdir": false, - "ctime": 1436810541.4375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2755823, - "inode": 526025, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2759", - "xusr": false, - "atime": 1436810540.2755823, - "isdir": false, - "ctime": 1436810540.2755823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5675824, - "inode": 526379, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3113", - "xusr": false, - "atime": 1436810540.5675824, - "isdir": false, - "ctime": 1436810540.5675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8035824, - "inode": 526711, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3445", - "xusr": false, - "atime": 1436810540.8035824, - "isdir": false, - "ctime": 1436810540.8035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1595824, - "inode": 525899, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2633", - "xusr": false, - "atime": 1436810540.1595824, - "isdir": false, - "ctime": 1436810540.1595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7935822, - "inode": 528034, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4768", - "xusr": false, - "atime": 1436810541.7935822, - "isdir": false, - "ctime": 1436810541.7935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6545823, - "inode": 526500, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3234", - "xusr": false, - "atime": 1436810540.6545823, - "isdir": false, - "ctime": 1436810540.6545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2935822, - "inode": 526044, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2778", - "xusr": false, - "atime": 1436810540.2935822, - "isdir": false, - "ctime": 1436810540.2935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5315824, - "inode": 526331, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3065", - "xusr": false, - "atime": 1436810540.5315824, - "isdir": false, - "ctime": 1436810540.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0925822, - "inode": 525837, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2571", - "xusr": false, - "atime": 1436810540.0925822, - "isdir": false, - "ctime": 1436810540.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8725822, - "inode": 528141, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4875", - "xusr": false, - "atime": 1436810541.8725822, - "isdir": false, - "ctime": 1436810541.8725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7745824, - "inode": 524194, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/928", - "xusr": false, - "atime": 1436810538.7745824, - "isdir": false, - "ctime": 1436810538.7745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4725823, - "inode": 526277, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3011", - "xusr": false, - "atime": 1436810540.4725823, - "isdir": false, - "ctime": 1436810540.4725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5515823, - "inode": 525171, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1905", - "xusr": false, - "atime": 1436810539.5515823, - "isdir": false, - "ctime": 1436810539.5515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3475823, - "inode": 526118, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2852", - "xusr": false, - "atime": 1436810540.3475823, - "isdir": false, - "ctime": 1436810540.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7745824, - "inode": 525420, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2154", - "xusr": false, - "atime": 1436810539.7745824, - "isdir": false, - "ctime": 1436810539.7745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8135824, - "inode": 525469, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2203", - "xusr": false, - "atime": 1436810539.8135824, - "isdir": false, - "ctime": 1436810539.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1415823, - "inode": 527181, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3915", - "xusr": false, - "atime": 1436810541.1415823, - "isdir": false, - "ctime": 1436810541.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7375822, - "inode": 526619, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3353", - "xusr": false, - "atime": 1436810540.7375822, - "isdir": false, - "ctime": 1436810540.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5735824, - "inode": 525200, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1934", - "xusr": false, - "atime": 1436810539.5735824, - "isdir": false, - "ctime": 1436810539.5735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5105822, - "inode": 527644, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4378", - "xusr": false, - "atime": 1436810541.5105822, - "isdir": false, - "ctime": 1436810541.5105822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2805824, - "inode": 523571, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/305", - "xusr": false, - "atime": 1436810538.2805824, - "isdir": false, - "ctime": 1436810538.2805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2855823, - "inode": 523578, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/312", - "xusr": false, - "atime": 1436810538.2855823, - "isdir": false, - "ctime": 1436810538.2855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0925822, - "inode": 524632, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1366", - "xusr": false, - "atime": 1436810539.0925822, - "isdir": false, - "ctime": 1436810539.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6325824, - "inode": 527812, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4546", - "xusr": false, - "atime": 1436810541.6325824, - "isdir": false, - "ctime": 1436810541.6325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1425824, - "inode": 525883, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2617", - "xusr": false, - "atime": 1436810540.1425824, - "isdir": false, - "ctime": 1436810540.1425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3325822, - "inode": 524963, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1697", - "xusr": false, - "atime": 1436810539.3325822, - "isdir": false, - "ctime": 1436810539.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2315824, - "inode": 527302, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4036", - "xusr": false, - "atime": 1436810541.2315824, - "isdir": false, - "ctime": 1436810541.2315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4575822, - "inode": 523768, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/502", - "xusr": false, - "atime": 1436810538.4575822, - "isdir": false, - "ctime": 1436810538.4575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5785823, - "inode": 527738, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4472", - "xusr": false, - "atime": 1436810541.5785823, - "isdir": false, - "ctime": 1436810541.5785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0315824, - "inode": 525770, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2504", - "xusr": false, - "atime": 1436810540.0315824, - "isdir": false, - "ctime": 1436810540.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7505822, - "inode": 527973, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4707", - "xusr": false, - "atime": 1436810541.7505822, - "isdir": false, - "ctime": 1436810541.7505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8685822, - "inode": 528135, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4869", - "xusr": false, - "atime": 1436810541.8685822, - "isdir": false, - "ctime": 1436810541.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5385823, - "inode": 527682, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4416", - "xusr": false, - "atime": 1436810541.5385823, - "isdir": false, - "ctime": 1436810541.5385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3775823, - "inode": 526160, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2894", - "xusr": false, - "atime": 1436810540.3775823, - "isdir": false, - "ctime": 1436810540.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5045824, - "inode": 526302, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3036", - "xusr": false, - "atime": 1436810540.5045824, - "isdir": false, - "ctime": 1436810540.5045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2095823, - "inode": 523471, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/205", - "xusr": false, - "atime": 1436810538.2095823, - "isdir": false, - "ctime": 1436810538.2095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6285822, - "inode": 525261, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1995", - "xusr": false, - "atime": 1436810539.6285822, - "isdir": false, - "ctime": 1436810539.6285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1635823, - "inode": 524734, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1468", - "xusr": false, - "atime": 1436810539.1635823, - "isdir": false, - "ctime": 1436810539.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3655822, - "inode": 526143, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2877", - "xusr": false, - "atime": 1436810540.3655822, - "isdir": false, - "ctime": 1436810540.3655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4795823, - "inode": 527600, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4334", - "xusr": false, - "atime": 1436810541.4795823, - "isdir": false, - "ctime": 1436810541.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4155824, - "inode": 525043, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1777", - "xusr": false, - "atime": 1436810539.4155824, - "isdir": false, - "ctime": 1436810539.4155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0115824, - "inode": 524515, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1249", - "xusr": false, - "atime": 1436810539.0115824, - "isdir": false, - "ctime": 1436810539.0115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6865823, - "inode": 526546, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3280", - "xusr": false, - "atime": 1436810540.6865823, - "isdir": false, - "ctime": 1436810540.6865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3985822, - "inode": 523693, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/427", - "xusr": false, - "atime": 1436810538.3985822, - "isdir": false, - "ctime": 1436810538.3985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6455822, - "inode": 526489, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3223", - "xusr": false, - "atime": 1436810540.6455822, - "isdir": false, - "ctime": 1436810540.6455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7325823, - "inode": 526611, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3345", - "xusr": false, - "atime": 1436810540.7325823, - "isdir": false, - "ctime": 1436810540.7325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8195822, - "inode": 524253, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/987", - "xusr": false, - "atime": 1436810538.8195822, - "isdir": false, - "ctime": 1436810538.8195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6015823, - "inode": 523966, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/700", - "xusr": false, - "atime": 1436810538.6015823, - "isdir": false, - "ctime": 1436810538.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2745824, - "inode": 526024, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2758", - "xusr": false, - "atime": 1436810540.2745824, - "isdir": false, - "ctime": 1436810540.2745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7995822, - "inode": 526704, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3438", - "xusr": false, - "atime": 1436810540.7995822, - "isdir": false, - "ctime": 1436810540.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4245822, - "inode": 526226, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2960", - "xusr": false, - "atime": 1436810540.4245822, - "isdir": false, - "ctime": 1436810540.4245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8345823, - "inode": 525499, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2233", - "xusr": false, - "atime": 1436810539.8345823, - "isdir": false, - "ctime": 1436810539.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1185822, - "inode": 525858, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2592", - "xusr": false, - "atime": 1436810540.1185822, - "isdir": false, - "ctime": 1436810540.1185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7445824, - "inode": 524157, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/891", - "xusr": false, - "atime": 1436810538.7445824, - "isdir": false, - "ctime": 1436810538.7445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7175822, - "inode": 527928, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4662", - "xusr": false, - "atime": 1436810541.7175822, - "isdir": false, - "ctime": 1436810541.7175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4495823, - "inode": 527559, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4293", - "xusr": false, - "atime": 1436810541.4495823, - "isdir": false, - "ctime": 1436810541.4495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9595823, - "inode": 528262, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4996", - "xusr": false, - "atime": 1436810541.9595823, - "isdir": false, - "ctime": 1436810541.9595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7505822, - "inode": 527974, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4708", - "xusr": false, - "atime": 1436810541.7505822, - "isdir": false, - "ctime": 1436810541.7505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0715823, - "inode": 527083, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3817", - "xusr": false, - "atime": 1436810541.0715823, - "isdir": false, - "ctime": 1436810541.0715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2415824, - "inode": 527316, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4050", - "xusr": false, - "atime": 1436810541.2415824, - "isdir": false, - "ctime": 1436810541.2415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9385824, - "inode": 525644, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2378", - "xusr": false, - "atime": 1436810539.9385824, - "isdir": false, - "ctime": 1436810539.9385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9345822, - "inode": 528227, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4961", - "xusr": false, - "atime": 1436810541.9345822, - "isdir": false, - "ctime": 1436810541.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3815823, - "inode": 527474, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4208", - "xusr": false, - "atime": 1436810541.3815823, - "isdir": false, - "ctime": 1436810541.3815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8605824, - "inode": 524308, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1042", - "xusr": false, - "atime": 1436810538.8605824, - "isdir": false, - "ctime": 1436810538.8605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9435823, - "inode": 528240, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4974", - "xusr": false, - "atime": 1436810541.9435823, - "isdir": false, - "ctime": 1436810541.9435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1945822, - "inode": 523450, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/184", - "xusr": false, - "atime": 1436810538.1945822, - "isdir": false, - "ctime": 1436810538.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2945824, - "inode": 524922, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1656", - "xusr": false, - "atime": 1436810539.2945824, - "isdir": false, - "ctime": 1436810539.2945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6825824, - "inode": 526540, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3274", - "xusr": false, - "atime": 1436810540.6825824, - "isdir": false, - "ctime": 1436810540.6825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5945823, - "inode": 527760, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4494", - "xusr": false, - "atime": 1436810541.5945823, - "isdir": false, - "ctime": 1436810541.5945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3435824, - "inode": 523640, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/374", - "xusr": false, - "atime": 1436810538.3435824, - "isdir": false, - "ctime": 1436810538.3435824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5545824, - "inode": 526361, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3095", - "xusr": false, - "atime": 1436810540.5545824, - "isdir": false, - "ctime": 1436810540.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3985822, - "inode": 523694, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/428", - "xusr": false, - "atime": 1436810538.3985822, - "isdir": false, - "ctime": 1436810538.3985822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2515824, - "inode": 523529, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/263", - "xusr": false, - "atime": 1436810538.2515824, - "isdir": false, - "ctime": 1436810538.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2935822, - "inode": 527389, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4123", - "xusr": false, - "atime": 1436810541.2935822, - "isdir": false, - "ctime": 1436810541.2935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9795823, - "inode": 526957, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3691", - "xusr": false, - "atime": 1436810540.9795823, - "isdir": false, - "ctime": 1436810540.9795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7805824, - "inode": 528015, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4749", - "xusr": false, - "atime": 1436810541.7805824, - "isdir": false, - "ctime": 1436810541.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8475823, - "inode": 528106, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4840", - "xusr": false, - "atime": 1436810541.8475823, - "isdir": false, - "ctime": 1436810541.8475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2195823, - "inode": 524814, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1548", - "xusr": false, - "atime": 1436810539.2195823, - "isdir": false, - "ctime": 1436810539.2195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6205823, - "inode": 525250, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1984", - "xusr": false, - "atime": 1436810539.6205823, - "isdir": false, - "ctime": 1436810539.6205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7705822, - "inode": 524189, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/923", - "xusr": false, - "atime": 1436810538.7705822, - "isdir": false, - "ctime": 1436810538.7705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8135824, - "inode": 526725, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3459", - "xusr": false, - "atime": 1436810540.8135824, - "isdir": false, - "ctime": 1436810540.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4895823, - "inode": 527615, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4349", - "xusr": false, - "atime": 1436810541.4895823, - "isdir": false, - "ctime": 1436810541.4895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8345823, - "inode": 525500, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2234", - "xusr": false, - "atime": 1436810539.8345823, - "isdir": false, - "ctime": 1436810539.8345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3495822, - "inode": 526121, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2855", - "xusr": false, - "atime": 1436810540.3495822, - "isdir": false, - "ctime": 1436810540.3495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6885824, - "inode": 527888, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4622", - "xusr": false, - "atime": 1436810541.6885824, - "isdir": false, - "ctime": 1436810541.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0925822, - "inode": 523307, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/41", - "xusr": false, - "atime": 1436810538.0925822, - "isdir": false, - "ctime": 1436810538.0925822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9265823, - "inode": 525628, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2362", - "xusr": false, - "atime": 1436810539.9265823, - "isdir": false, - "ctime": 1436810539.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6005824, - "inode": 527768, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4502", - "xusr": false, - "atime": 1436810541.6005824, - "isdir": false, - "ctime": 1436810541.6005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0215824, - "inode": 524530, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1264", - "xusr": false, - "atime": 1436810539.0215824, - "isdir": false, - "ctime": 1436810539.0215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4835823, - "inode": 527607, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4341", - "xusr": false, - "atime": 1436810541.4835823, - "isdir": false, - "ctime": 1436810541.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5835824, - "inode": 525209, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1943", - "xusr": false, - "atime": 1436810539.5835824, - "isdir": false, - "ctime": 1436810539.5835824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4195824, - "inode": 526219, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2953", - "xusr": false, - "atime": 1436810540.4195824, - "isdir": false, - "ctime": 1436810540.4195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5585823, - "inode": 523907, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/641", - "xusr": false, - "atime": 1436810538.5585823, - "isdir": false, - "ctime": 1436810538.5585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9655824, - "inode": 525680, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2414", - "xusr": false, - "atime": 1436810539.9655824, - "isdir": false, - "ctime": 1436810539.9655824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5075824, - "inode": 527639, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4373", - "xusr": false, - "atime": 1436810541.5075824, - "isdir": false, - "ctime": 1436810541.5075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1745822, - "inode": 524749, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1483", - "xusr": false, - "atime": 1436810539.1745822, - "isdir": false, - "ctime": 1436810539.1745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5845823, - "inode": 527746, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4480", - "xusr": false, - "atime": 1436810541.5845823, - "isdir": false, - "ctime": 1436810541.5845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9465823, - "inode": 525655, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2389", - "xusr": false, - "atime": 1436810539.9465823, - "isdir": false, - "ctime": 1436810539.9465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8945823, - "inode": 524353, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1087", - "xusr": false, - "atime": 1436810538.8945823, - "isdir": false, - "ctime": 1436810538.8945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7085824, - "inode": 526577, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3311", - "xusr": false, - "atime": 1436810540.7085824, - "isdir": false, - "ctime": 1436810540.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7385824, - "inode": 527957, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4691", - "xusr": false, - "atime": 1436810541.7385824, - "isdir": false, - "ctime": 1436810541.7385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5635824, - "inode": 523914, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/648", - "xusr": false, - "atime": 1436810538.5635824, - "isdir": false, - "ctime": 1436810538.5635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7855823, - "inode": 524207, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/941", - "xusr": false, - "atime": 1436810538.7855823, - "isdir": false, - "ctime": 1436810538.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7805824, - "inode": 525429, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2163", - "xusr": false, - "atime": 1436810539.7805824, - "isdir": false, - "ctime": 1436810539.7805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6045823, - "inode": 526432, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3166", - "xusr": false, - "atime": 1436810540.6045823, - "isdir": false, - "ctime": 1436810540.6045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1895823, - "inode": 527243, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3977", - "xusr": false, - "atime": 1436810541.1895823, - "isdir": false, - "ctime": 1436810541.1895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6135824, - "inode": 523983, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/717", - "xusr": false, - "atime": 1436810538.6135824, - "isdir": false, - "ctime": 1436810538.6135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5935824, - "inode": 527758, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4492", - "xusr": false, - "atime": 1436810541.5935824, - "isdir": false, - "ctime": 1436810541.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5175824, - "inode": 527653, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4387", - "xusr": false, - "atime": 1436810541.5175824, - "isdir": false, - "ctime": 1436810541.5175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6605823, - "inode": 527849, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4583", - "xusr": false, - "atime": 1436810541.6605823, - "isdir": false, - "ctime": 1436810541.6605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6115823, - "inode": 526442, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3176", - "xusr": false, - "atime": 1436810540.6115823, - "isdir": false, - "ctime": 1436810540.6115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7565823, - "inode": 524173, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/907", - "xusr": false, - "atime": 1436810538.7565823, - "isdir": false, - "ctime": 1436810538.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0705824, - "inode": 523277, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/11", - "xusr": false, - "atime": 1436810538.0705824, - "isdir": false, - "ctime": 1436810538.0705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2255824, - "inode": 527294, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4028", - "xusr": false, - "atime": 1436810541.2255824, - "isdir": false, - "ctime": 1436810541.2255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2145822, - "inode": 527279, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4013", - "xusr": false, - "atime": 1436810541.2145822, - "isdir": false, - "ctime": 1436810541.2145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5595822, - "inode": 525180, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1914", - "xusr": false, - "atime": 1436810539.5595822, - "isdir": false, - "ctime": 1436810539.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2085824, - "inode": 524798, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1532", - "xusr": false, - "atime": 1436810539.2085824, - "isdir": false, - "ctime": 1436810539.2085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1915822, - "inode": 524773, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1507", - "xusr": false, - "atime": 1436810539.1915822, - "isdir": false, - "ctime": 1436810539.1915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6425824, - "inode": 526485, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3219", - "xusr": false, - "atime": 1436810540.6425824, - "isdir": false, - "ctime": 1436810540.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3925824, - "inode": 523685, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/419", - "xusr": false, - "atime": 1436810538.3925824, - "isdir": false, - "ctime": 1436810538.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2505822, - "inode": 524858, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1592", - "xusr": false, - "atime": 1436810539.2505822, - "isdir": false, - "ctime": 1436810539.2505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7375822, - "inode": 526618, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3352", - "xusr": false, - "atime": 1436810540.7375822, - "isdir": false, - "ctime": 1436810540.7375822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6955824, - "inode": 525329, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2063", - "xusr": false, - "atime": 1436810539.6955824, - "isdir": false, - "ctime": 1436810539.6955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3785822, - "inode": 525003, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1737", - "xusr": false, - "atime": 1436810539.3785822, - "isdir": false, - "ctime": 1436810539.3785822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8205824, - "inode": 525480, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2214", - "xusr": false, - "atime": 1436810539.8205824, - "isdir": false, - "ctime": 1436810539.8205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5125823, - "inode": 523845, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/579", - "xusr": false, - "atime": 1436810538.5125823, - "isdir": false, - "ctime": 1436810538.5125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5545824, - "inode": 527704, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4438", - "xusr": false, - "atime": 1436810541.5545824, - "isdir": false, - "ctime": 1436810541.5545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9485824, - "inode": 524427, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1161", - "xusr": false, - "atime": 1436810538.9485824, - "isdir": false, - "ctime": 1436810538.9485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5305824, - "inode": 527670, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4404", - "xusr": false, - "atime": 1436810541.5305824, - "isdir": false, - "ctime": 1436810541.5305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7035823, - "inode": 527910, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4644", - "xusr": false, - "atime": 1436810541.7035823, - "isdir": false, - "ctime": 1436810541.7035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0965824, - "inode": 527119, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3853", - "xusr": false, - "atime": 1436810541.0965824, - "isdir": false, - "ctime": 1436810541.0965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3925824, - "inode": 523686, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/420", - "xusr": false, - "atime": 1436810538.3925824, - "isdir": false, - "ctime": 1436810538.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4675822, - "inode": 525084, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1818", - "xusr": false, - "atime": 1436810539.4675822, - "isdir": false, - "ctime": 1436810539.4675822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2225823, - "inode": 524818, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1552", - "xusr": false, - "atime": 1436810539.2225823, - "isdir": false, - "ctime": 1436810539.2225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6645823, - "inode": 526514, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3248", - "xusr": false, - "atime": 1436810540.6645823, - "isdir": false, - "ctime": 1436810540.6645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5775824, - "inode": 523933, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/667", - "xusr": false, - "atime": 1436810538.5775824, - "isdir": false, - "ctime": 1436810538.5775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8895824, - "inode": 526831, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3565", - "xusr": false, - "atime": 1436810540.8895824, - "isdir": false, - "ctime": 1436810540.8895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8405824, - "inode": 524282, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1016", - "xusr": false, - "atime": 1436810538.8405824, - "isdir": false, - "ctime": 1436810538.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5435822, - "inode": 523886, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/620", - "xusr": false, - "atime": 1436810538.5435822, - "isdir": false, - "ctime": 1436810538.5435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0675824, - "inode": 524596, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1330", - "xusr": false, - "atime": 1436810539.0675824, - "isdir": false, - "ctime": 1436810539.0675824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5715823, - "inode": 527728, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4462", - "xusr": false, - "atime": 1436810541.5715823, - "isdir": false, - "ctime": 1436810541.5715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3695824, - "inode": 524998, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1732", - "xusr": false, - "atime": 1436810539.3695824, - "isdir": false, - "ctime": 1436810539.3695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3775823, - "inode": 527468, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4202", - "xusr": false, - "atime": 1436810541.3775823, - "isdir": false, - "ctime": 1436810541.3775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2515824, - "inode": 524859, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1593", - "xusr": false, - "atime": 1436810539.2515824, - "isdir": false, - "ctime": 1436810539.2515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5535824, - "inode": 527702, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4436", - "xusr": false, - "atime": 1436810541.5535824, - "isdir": false, - "ctime": 1436810541.5535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1435823, - "inode": 524704, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1438", - "xusr": false, - "atime": 1436810539.1435823, - "isdir": false, - "ctime": 1436810539.1435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3455822, - "inode": 524976, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1710", - "xusr": false, - "atime": 1436810539.3455822, - "isdir": false, - "ctime": 1436810539.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5085824, - "inode": 526305, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3039", - "xusr": false, - "atime": 1436810540.5085824, - "isdir": false, - "ctime": 1436810540.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2585824, - "inode": 527339, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4073", - "xusr": false, - "atime": 1436810541.2585824, - "isdir": false, - "ctime": 1436810541.2585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0885823, - "inode": 523302, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/36", - "xusr": false, - "atime": 1436810538.0885823, - "isdir": false, - "ctime": 1436810538.0885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6995823, - "inode": 524100, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/834", - "xusr": false, - "atime": 1436810538.6995823, - "isdir": false, - "ctime": 1436810538.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4725823, - "inode": 527591, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4325", - "xusr": false, - "atime": 1436810541.4725823, - "isdir": false, - "ctime": 1436810541.4725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0535824, - "inode": 525797, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2531", - "xusr": false, - "atime": 1436810540.0535824, - "isdir": false, - "ctime": 1436810540.0535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8885822, - "inode": 524346, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1080", - "xusr": false, - "atime": 1436810538.8885822, - "isdir": false, - "ctime": 1436810538.8885822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8975823, - "inode": 525589, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2323", - "xusr": false, - "atime": 1436810539.8975823, - "isdir": false, - "ctime": 1436810539.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1005824, - "inode": 524642, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1376", - "xusr": false, - "atime": 1436810539.1005824, - "isdir": false, - "ctime": 1436810539.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2775824, - "inode": 523567, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/301", - "xusr": false, - "atime": 1436810538.2775824, - "isdir": false, - "ctime": 1436810538.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3115823, - "inode": 523611, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/345", - "xusr": false, - "atime": 1436810538.3115823, - "isdir": false, - "ctime": 1436810538.3115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6505823, - "inode": 527835, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4569", - "xusr": false, - "atime": 1436810541.6505823, - "isdir": false, - "ctime": 1436810541.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6745822, - "inode": 524065, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/799", - "xusr": false, - "atime": 1436810538.6745822, - "isdir": false, - "ctime": 1436810538.6745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9735823, - "inode": 525691, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2425", - "xusr": false, - "atime": 1436810539.9735823, - "isdir": false, - "ctime": 1436810539.9735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7315824, - "inode": 524139, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/873", - "xusr": false, - "atime": 1436810538.7315824, - "isdir": false, - "ctime": 1436810538.7315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8065822, - "inode": 524235, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/969", - "xusr": false, - "atime": 1436810538.8065822, - "isdir": false, - "ctime": 1436810538.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4405823, - "inode": 527547, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4281", - "xusr": false, - "atime": 1436810541.4405823, - "isdir": false, - "ctime": 1436810541.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3185823, - "inode": 526078, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2812", - "xusr": false, - "atime": 1436810540.3185823, - "isdir": false, - "ctime": 1436810540.3185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2865822, - "inode": 524909, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1643", - "xusr": false, - "atime": 1436810539.2865822, - "isdir": false, - "ctime": 1436810539.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3185823, - "inode": 523617, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/351", - "xusr": false, - "atime": 1436810538.3185823, - "isdir": false, - "ctime": 1436810538.3185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7765822, - "inode": 526671, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3405", - "xusr": false, - "atime": 1436810540.7765822, - "isdir": false, - "ctime": 1436810540.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0455823, - "inode": 527047, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3781", - "xusr": false, - "atime": 1436810541.0455823, - "isdir": false, - "ctime": 1436810541.0455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0415823, - "inode": 525784, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2518", - "xusr": false, - "atime": 1436810540.0415823, - "isdir": false, - "ctime": 1436810540.0415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7025824, - "inode": 526568, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3302", - "xusr": false, - "atime": 1436810540.7025824, - "isdir": false, - "ctime": 1436810540.7025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6375823, - "inode": 526477, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3211", - "xusr": false, - "atime": 1436810540.6375823, - "isdir": false, - "ctime": 1436810540.6375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7895823, - "inode": 524212, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/946", - "xusr": false, - "atime": 1436810538.7895823, - "isdir": false, - "ctime": 1436810538.7895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6845822, - "inode": 527883, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4617", - "xusr": false, - "atime": 1436810541.6845822, - "isdir": false, - "ctime": 1436810541.6845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7795823, - "inode": 528013, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4747", - "xusr": false, - "atime": 1436810541.7795823, - "isdir": false, - "ctime": 1436810541.7795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5975823, - "inode": 525220, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1954", - "xusr": false, - "atime": 1436810539.5975823, - "isdir": false, - "ctime": 1436810539.5975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9925823, - "inode": 526975, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3709", - "xusr": false, - "atime": 1436810540.9925823, - "isdir": false, - "ctime": 1436810540.9925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8025823, - "inode": 526709, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3443", - "xusr": false, - "atime": 1436810540.8025823, - "isdir": false, - "ctime": 1436810540.8025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6855824, - "inode": 525319, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2053", - "xusr": false, - "atime": 1436810539.6855824, - "isdir": false, - "ctime": 1436810539.6855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2055824, - "inode": 527266, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4000", - "xusr": false, - "atime": 1436810541.2055824, - "isdir": false, - "ctime": 1436810541.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1975822, - "inode": 527255, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3989", - "xusr": false, - "atime": 1436810541.1975822, - "isdir": false, - "ctime": 1436810541.1975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1165824, - "inode": 527147, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3881", - "xusr": false, - "atime": 1436810541.1165824, - "isdir": false, - "ctime": 1436810541.1165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8685822, - "inode": 525548, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2282", - "xusr": false, - "atime": 1436810539.8685822, - "isdir": false, - "ctime": 1436810539.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6575823, - "inode": 524042, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/776", - "xusr": false, - "atime": 1436810538.6575823, - "isdir": false, - "ctime": 1436810538.6575823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2405822, - "inode": 527315, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4049", - "xusr": false, - "atime": 1436810541.2405822, - "isdir": false, - "ctime": 1436810541.2405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5015824, - "inode": 527631, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4365", - "xusr": false, - "atime": 1436810541.5015824, - "isdir": false, - "ctime": 1436810541.5015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8275824, - "inode": 524264, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/998", - "xusr": false, - "atime": 1436810538.8275824, - "isdir": false, - "ctime": 1436810538.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6995823, - "inode": 524099, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/833", - "xusr": false, - "atime": 1436810538.6995823, - "isdir": false, - "ctime": 1436810538.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9345822, - "inode": 524409, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1143", - "xusr": false, - "atime": 1436810538.9345822, - "isdir": false, - "ctime": 1436810538.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8125823, - "inode": 526723, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3457", - "xusr": false, - "atime": 1436810540.8125823, - "isdir": false, - "ctime": 1436810540.8125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6705823, - "inode": 527863, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4597", - "xusr": false, - "atime": 1436810541.6705823, - "isdir": false, - "ctime": 1436810541.6705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5025823, - "inode": 527632, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4366", - "xusr": false, - "atime": 1436810541.5025823, - "isdir": false, - "ctime": 1436810541.5025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8755822, - "inode": 525557, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2291", - "xusr": false, - "atime": 1436810539.8755822, - "isdir": false, - "ctime": 1436810539.8755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7765822, - "inode": 528010, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4744", - "xusr": false, - "atime": 1436810541.7765822, - "isdir": false, - "ctime": 1436810541.7765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2445824, - "inode": 523520, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/254", - "xusr": false, - "atime": 1436810538.2445824, - "isdir": false, - "ctime": 1436810538.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3195822, - "inode": 527420, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4154", - "xusr": false, - "atime": 1436810541.3195822, - "isdir": false, - "ctime": 1436810541.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9895823, - "inode": 526972, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3706", - "xusr": false, - "atime": 1436810540.9895823, - "isdir": false, - "ctime": 1436810540.9895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2485824, - "inode": 523526, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/260", - "xusr": false, - "atime": 1436810538.2485824, - "isdir": false, - "ctime": 1436810538.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7965822, - "inode": 528037, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4771", - "xusr": false, - "atime": 1436810541.7965822, - "isdir": false, - "ctime": 1436810541.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4485824, - "inode": 525068, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1802", - "xusr": false, - "atime": 1436810539.4485824, - "isdir": false, - "ctime": 1436810539.4485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9805822, - "inode": 524473, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1207", - "xusr": false, - "atime": 1436810538.9805822, - "isdir": false, - "ctime": 1436810538.9805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7915823, - "inode": 525443, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2177", - "xusr": false, - "atime": 1436810539.7915823, - "isdir": false, - "ctime": 1436810539.7915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5045824, - "inode": 523834, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/568", - "xusr": false, - "atime": 1436810538.5045824, - "isdir": false, - "ctime": 1436810538.5045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3995824, - "inode": 523695, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/429", - "xusr": false, - "atime": 1436810538.3995824, - "isdir": false, - "ctime": 1436810538.3995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0905824, - "inode": 524628, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1362", - "xusr": false, - "atime": 1436810539.0905824, - "isdir": false, - "ctime": 1436810539.0905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5225823, - "inode": 525141, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1875", - "xusr": false, - "atime": 1436810539.5225823, - "isdir": false, - "ctime": 1436810539.5225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1175823, - "inode": 523340, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/74", - "xusr": false, - "atime": 1436810538.1175823, - "isdir": false, - "ctime": 1436810538.1175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1975822, - "inode": 523454, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/188", - "xusr": false, - "atime": 1436810538.1975822, - "isdir": false, - "ctime": 1436810538.1975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5665822, - "inode": 527721, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4455", - "xusr": false, - "atime": 1436810541.5665822, - "isdir": false, - "ctime": 1436810541.5665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6255822, - "inode": 526460, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3194", - "xusr": false, - "atime": 1436810540.6255822, - "isdir": false, - "ctime": 1436810540.6255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2295823, - "inode": 527300, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4034", - "xusr": false, - "atime": 1436810541.2295823, - "isdir": false, - "ctime": 1436810541.2295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8255823, - "inode": 525487, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2221", - "xusr": false, - "atime": 1436810539.8255823, - "isdir": false, - "ctime": 1436810539.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3325822, - "inode": 527431, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4165", - "xusr": false, - "atime": 1436810541.3325822, - "isdir": false, - "ctime": 1436810541.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4975822, - "inode": 525118, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1852", - "xusr": false, - "atime": 1436810539.4975822, - "isdir": false, - "ctime": 1436810539.4975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8995824, - "inode": 526845, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3579", - "xusr": false, - "atime": 1436810540.8995824, - "isdir": false, - "ctime": 1436810540.8995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3745823, - "inode": 527465, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4199", - "xusr": false, - "atime": 1436810541.3745823, - "isdir": false, - "ctime": 1436810541.3745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1415823, - "inode": 524702, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1436", - "xusr": false, - "atime": 1436810539.1415823, - "isdir": false, - "ctime": 1436810539.1415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4705822, - "inode": 525088, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1822", - "xusr": false, - "atime": 1436810539.4705822, - "isdir": false, - "ctime": 1436810539.4705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9445822, - "inode": 528242, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4976", - "xusr": false, - "atime": 1436810541.9445822, - "isdir": false, - "ctime": 1436810541.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1005824, - "inode": 523317, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/51", - "xusr": false, - "atime": 1436810538.1005824, - "isdir": false, - "ctime": 1436810538.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6265824, - "inode": 526461, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3195", - "xusr": false, - "atime": 1436810540.6265824, - "isdir": false, - "ctime": 1436810540.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8065822, - "inode": 528051, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4785", - "xusr": false, - "atime": 1436810541.8065822, - "isdir": false, - "ctime": 1436810541.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2935822, - "inode": 527390, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4124", - "xusr": false, - "atime": 1436810541.2935822, - "isdir": false, - "ctime": 1436810541.2935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4715824, - "inode": 525090, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1824", - "xusr": false, - "atime": 1436810539.4715824, - "isdir": false, - "ctime": 1436810539.4715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0395823, - "inode": 525782, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2516", - "xusr": false, - "atime": 1436810540.0395823, - "isdir": false, - "ctime": 1436810540.0395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0435822, - "inode": 525787, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2521", - "xusr": false, - "atime": 1436810540.0435822, - "isdir": false, - "ctime": 1436810540.0435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2775824, - "inode": 527367, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4101", - "xusr": false, - "atime": 1436810541.2775824, - "isdir": false, - "ctime": 1436810541.2775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1985824, - "inode": 524783, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1517", - "xusr": false, - "atime": 1436810539.1985824, - "isdir": false, - "ctime": 1436810539.1985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2115824, - "inode": 527274, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4008", - "xusr": false, - "atime": 1436810541.2115824, - "isdir": false, - "ctime": 1436810541.2115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2665823, - "inode": 523550, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/284", - "xusr": false, - "atime": 1436810538.2665823, - "isdir": false, - "ctime": 1436810538.2665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3325822, - "inode": 523630, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/364", - "xusr": false, - "atime": 1436810538.3325822, - "isdir": false, - "ctime": 1436810538.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2395823, - "inode": 523513, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/247", - "xusr": false, - "atime": 1436810538.2395823, - "isdir": false, - "ctime": 1436810538.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1565824, - "inode": 524723, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1457", - "xusr": false, - "atime": 1436810539.1565824, - "isdir": false, - "ctime": 1436810539.1565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0795822, - "inode": 524613, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1347", - "xusr": false, - "atime": 1436810539.0795822, - "isdir": false, - "ctime": 1436810539.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6465824, - "inode": 526490, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3224", - "xusr": false, - "atime": 1436810540.6465824, - "isdir": false, - "ctime": 1436810540.6465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9195824, - "inode": 528207, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4941", - "xusr": false, - "atime": 1436810541.9195824, - "isdir": false, - "ctime": 1436810541.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9505823, - "inode": 528250, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4984", - "xusr": false, - "atime": 1436810541.9505823, - "isdir": false, - "ctime": 1436810541.9505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4775822, - "inode": 526281, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3015", - "xusr": false, - "atime": 1436810540.4775822, - "isdir": false, - "ctime": 1436810540.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7545824, - "inode": 524169, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/903", - "xusr": false, - "atime": 1436810538.7545824, - "isdir": false, - "ctime": 1436810538.7545824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7905824, - "inode": 528029, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4763", - "xusr": false, - "atime": 1436810541.7905824, - "isdir": false, - "ctime": 1436810541.7905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7005823, - "inode": 525336, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2070", - "xusr": false, - "atime": 1436810539.7005823, - "isdir": false, - "ctime": 1436810539.7005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3275824, - "inode": 524956, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1690", - "xusr": false, - "atime": 1436810539.3275824, - "isdir": false, - "ctime": 1436810539.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9815824, - "inode": 525702, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2436", - "xusr": false, - "atime": 1436810539.9815824, - "isdir": false, - "ctime": 1436810539.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0295823, - "inode": 525768, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2502", - "xusr": false, - "atime": 1436810540.0295823, - "isdir": false, - "ctime": 1436810540.0295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9705822, - "inode": 524459, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1193", - "xusr": false, - "atime": 1436810538.9705822, - "isdir": false, - "ctime": 1436810538.9705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6925824, - "inode": 525326, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2060", - "xusr": false, - "atime": 1436810539.6925824, - "isdir": false, - "ctime": 1436810539.6925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8395822, - "inode": 526760, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3494", - "xusr": false, - "atime": 1436810540.8395822, - "isdir": false, - "ctime": 1436810540.8395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9605823, - "inode": 525674, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2408", - "xusr": false, - "atime": 1436810539.9605823, - "isdir": false, - "ctime": 1436810539.9605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7775824, - "inode": 524197, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/931", - "xusr": false, - "atime": 1436810538.7775824, - "isdir": false, - "ctime": 1436810538.7775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7395823, - "inode": 524150, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/884", - "xusr": false, - "atime": 1436810538.7395823, - "isdir": false, - "ctime": 1436810538.7395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6875823, - "inode": 524083, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/817", - "xusr": false, - "atime": 1436810538.6875823, - "isdir": false, - "ctime": 1436810538.6875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6245823, - "inode": 527801, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4535", - "xusr": false, - "atime": 1436810541.6245823, - "isdir": false, - "ctime": 1436810541.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9865823, - "inode": 524482, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1216", - "xusr": false, - "atime": 1436810538.9865823, - "isdir": false, - "ctime": 1436810538.9865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5295823, - "inode": 527669, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4403", - "xusr": false, - "atime": 1436810541.5295823, - "isdir": false, - "ctime": 1436810541.5295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5405824, - "inode": 526343, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3077", - "xusr": false, - "atime": 1436810540.5405824, - "isdir": false, - "ctime": 1436810540.5405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6365824, - "inode": 527817, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4551", - "xusr": false, - "atime": 1436810541.6365824, - "isdir": false, - "ctime": 1436810541.6365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8155823, - "inode": 528064, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4798", - "xusr": false, - "atime": 1436810541.8155823, - "isdir": false, - "ctime": 1436810541.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0385823, - "inode": 525781, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2515", - "xusr": false, - "atime": 1436810540.0385823, - "isdir": false, - "ctime": 1436810540.0385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8425822, - "inode": 524284, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1018", - "xusr": false, - "atime": 1436810538.8425822, - "isdir": false, - "ctime": 1436810538.8425822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6695824, - "inode": 524059, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/793", - "xusr": false, - "atime": 1436810538.6695824, - "isdir": false, - "ctime": 1436810538.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7885823, - "inode": 528026, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4760", - "xusr": false, - "atime": 1436810541.7885823, - "isdir": false, - "ctime": 1436810541.7885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0975823, - "inode": 524638, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1372", - "xusr": false, - "atime": 1436810539.0975823, - "isdir": false, - "ctime": 1436810539.0975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7405822, - "inode": 525378, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2112", - "xusr": false, - "atime": 1436810539.7405822, - "isdir": false, - "ctime": 1436810539.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1495824, - "inode": 525888, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2622", - "xusr": false, - "atime": 1436810540.1495824, - "isdir": false, - "ctime": 1436810540.1495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0445824, - "inode": 525789, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2523", - "xusr": false, - "atime": 1436810540.0445824, - "isdir": false, - "ctime": 1436810540.0445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6265824, - "inode": 526462, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3196", - "xusr": false, - "atime": 1436810540.6265824, - "isdir": false, - "ctime": 1436810540.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3415823, - "inode": 527439, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4173", - "xusr": false, - "atime": 1436810541.3415823, - "isdir": false, - "ctime": 1436810541.3415823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9895823, - "inode": 525714, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2448", - "xusr": false, - "atime": 1436810539.9895823, - "isdir": false, - "ctime": 1436810539.9895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9125824, - "inode": 525609, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2343", - "xusr": false, - "atime": 1436810539.9125824, - "isdir": false, - "ctime": 1436810539.9125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8325822, - "inode": 524271, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1005", - "xusr": false, - "atime": 1436810538.8325822, - "isdir": false, - "ctime": 1436810538.8325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5895822, - "inode": 526410, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3144", - "xusr": false, - "atime": 1436810540.5895822, - "isdir": false, - "ctime": 1436810540.5895822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4245822, - "inode": 523729, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/463", - "xusr": false, - "atime": 1436810538.4245822, - "isdir": false, - "ctime": 1436810538.4245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6625824, - "inode": 526511, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3245", - "xusr": false, - "atime": 1436810540.6625824, - "isdir": false, - "ctime": 1436810540.6625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3655822, - "inode": 524993, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1727", - "xusr": false, - "atime": 1436810539.3655822, - "isdir": false, - "ctime": 1436810539.3655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7735822, - "inode": 526667, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3401", - "xusr": false, - "atime": 1436810540.7735822, - "isdir": false, - "ctime": 1436810540.7735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1745822, - "inode": 527223, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3957", - "xusr": false, - "atime": 1436810541.1745822, - "isdir": false, - "ctime": 1436810541.1745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9325824, - "inode": 525635, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2369", - "xusr": false, - "atime": 1436810539.9325824, - "isdir": false, - "ctime": 1436810539.9325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1965823, - "inode": 524780, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1514", - "xusr": false, - "atime": 1436810539.1965823, - "isdir": false, - "ctime": 1436810539.1965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7595823, - "inode": 526648, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3382", - "xusr": false, - "atime": 1436810540.7595823, - "isdir": false, - "ctime": 1436810540.7595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8615823, - "inode": 525537, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2271", - "xusr": false, - "atime": 1436810539.8615823, - "isdir": false, - "ctime": 1436810539.8615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7725823, - "inode": 524191, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/925", - "xusr": false, - "atime": 1436810538.7725823, - "isdir": false, - "ctime": 1436810538.7725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3795824, - "inode": 523673, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/407", - "xusr": false, - "atime": 1436810538.3795824, - "isdir": false, - "ctime": 1436810538.3795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9085822, - "inode": 524374, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1108", - "xusr": false, - "atime": 1436810538.9085822, - "isdir": false, - "ctime": 1436810538.9085822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9645822, - "inode": 526936, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3670", - "xusr": false, - "atime": 1436810540.9645822, - "isdir": false, - "ctime": 1436810540.9645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9495823, - "inode": 528248, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4982", - "xusr": false, - "atime": 1436810541.9495823, - "isdir": false, - "ctime": 1436810541.9495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4225824, - "inode": 526223, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2957", - "xusr": false, - "atime": 1436810540.4225824, - "isdir": false, - "ctime": 1436810540.4225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6015823, - "inode": 527770, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4504", - "xusr": false, - "atime": 1436810541.6015823, - "isdir": false, - "ctime": 1436810541.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3675823, - "inode": 526146, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2880", - "xusr": false, - "atime": 1436810540.3675823, - "isdir": false, - "ctime": 1436810540.3675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2785823, - "inode": 524899, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1633", - "xusr": false, - "atime": 1436810539.2785823, - "isdir": false, - "ctime": 1436810539.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3095822, - "inode": 524940, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1674", - "xusr": false, - "atime": 1436810539.3095822, - "isdir": false, - "ctime": 1436810539.3095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8275824, - "inode": 525490, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2224", - "xusr": false, - "atime": 1436810539.8275824, - "isdir": false, - "ctime": 1436810539.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8315823, - "inode": 526749, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3483", - "xusr": false, - "atime": 1436810540.8315823, - "isdir": false, - "ctime": 1436810540.8315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5275824, - "inode": 525148, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1882", - "xusr": false, - "atime": 1436810539.5275824, - "isdir": false, - "ctime": 1436810539.5275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0985823, - "inode": 523314, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/48", - "xusr": false, - "atime": 1436810538.0985823, - "isdir": false, - "ctime": 1436810538.0985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1925824, - "inode": 524774, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1508", - "xusr": false, - "atime": 1436810539.1925824, - "isdir": false, - "ctime": 1436810539.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5265822, - "inode": 527665, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4399", - "xusr": false, - "atime": 1436810541.5265822, - "isdir": false, - "ctime": 1436810541.5265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8275824, - "inode": 528079, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4813", - "xusr": false, - "atime": 1436810541.8275824, - "isdir": false, - "ctime": 1436810541.8275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4715824, - "inode": 527589, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4323", - "xusr": false, - "atime": 1436810541.4715824, - "isdir": false, - "ctime": 1436810541.4715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9145823, - "inode": 525612, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2346", - "xusr": false, - "atime": 1436810539.9145823, - "isdir": false, - "ctime": 1436810539.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8695824, - "inode": 526802, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3536", - "xusr": false, - "atime": 1436810540.8695824, - "isdir": false, - "ctime": 1436810540.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3995824, - "inode": 526192, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2926", - "xusr": false, - "atime": 1436810540.3995824, - "isdir": false, - "ctime": 1436810540.3995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3585823, - "inode": 527452, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4186", - "xusr": false, - "atime": 1436810541.3585823, - "isdir": false, - "ctime": 1436810541.3585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8525822, - "inode": 526778, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3512", - "xusr": false, - "atime": 1436810540.8525822, - "isdir": false, - "ctime": 1436810540.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3025823, - "inode": 526056, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2790", - "xusr": false, - "atime": 1436810540.3025823, - "isdir": false, - "ctime": 1436810540.3025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1375823, - "inode": 523368, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/102", - "xusr": false, - "atime": 1436810538.1375823, - "isdir": false, - "ctime": 1436810538.1375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6455822, - "inode": 527829, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4563", - "xusr": false, - "atime": 1436810541.6455822, - "isdir": false, - "ctime": 1436810541.6455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9725823, - "inode": 524461, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1195", - "xusr": false, - "atime": 1436810538.9725823, - "isdir": false, - "ctime": 1436810538.9725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0845823, - "inode": 525827, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2561", - "xusr": false, - "atime": 1436810540.0845823, - "isdir": false, - "ctime": 1436810540.0845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6435823, - "inode": 527826, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4560", - "xusr": false, - "atime": 1436810541.6435823, - "isdir": false, - "ctime": 1436810541.6435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4695823, - "inode": 523785, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/519", - "xusr": false, - "atime": 1436810538.4695823, - "isdir": false, - "ctime": 1436810538.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2785823, - "inode": 527369, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4103", - "xusr": false, - "atime": 1436810541.2785823, - "isdir": false, - "ctime": 1436810541.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6085823, - "inode": 525235, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1969", - "xusr": false, - "atime": 1436810539.6085823, - "isdir": false, - "ctime": 1436810539.6085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5355823, - "inode": 523875, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/609", - "xusr": false, - "atime": 1436810538.5355823, - "isdir": false, - "ctime": 1436810538.5355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3735824, - "inode": 526155, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2889", - "xusr": false, - "atime": 1436810540.3735824, - "isdir": false, - "ctime": 1436810540.3735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7565823, - "inode": 527982, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4716", - "xusr": false, - "atime": 1436810541.7565823, - "isdir": false, - "ctime": 1436810541.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2135823, - "inode": 523477, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/211", - "xusr": false, - "atime": 1436810538.2135823, - "isdir": false, - "ctime": 1436810538.2135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2715824, - "inode": 527358, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4092", - "xusr": false, - "atime": 1436810541.2715824, - "isdir": false, - "ctime": 1436810541.2715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9025824, - "inode": 524365, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1099", - "xusr": false, - "atime": 1436810538.9025824, - "isdir": false, - "ctime": 1436810538.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8895824, - "inode": 525577, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2311", - "xusr": false, - "atime": 1436810539.8895824, - "isdir": false, - "ctime": 1436810539.8895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6495824, - "inode": 527834, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4568", - "xusr": false, - "atime": 1436810541.6495824, - "isdir": false, - "ctime": 1436810541.6495824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6425824, - "inode": 524022, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/756", - "xusr": false, - "atime": 1436810538.6425824, - "isdir": false, - "ctime": 1436810538.6425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8815823, - "inode": 528154, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4888", - "xusr": false, - "atime": 1436810541.8815823, - "isdir": false, - "ctime": 1436810541.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8155823, - "inode": 525473, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2207", - "xusr": false, - "atime": 1436810539.8155823, - "isdir": false, - "ctime": 1436810539.8155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9295824, - "inode": 524402, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1136", - "xusr": false, - "atime": 1436810538.9295824, - "isdir": false, - "ctime": 1436810538.9295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8745823, - "inode": 524327, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1061", - "xusr": false, - "atime": 1436810538.8745823, - "isdir": false, - "ctime": 1436810538.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6325824, - "inode": 525266, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2000", - "xusr": false, - "atime": 1436810539.6325824, - "isdir": false, - "ctime": 1436810539.6325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5525823, - "inode": 523899, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/633", - "xusr": false, - "atime": 1436810538.5525823, - "isdir": false, - "ctime": 1436810538.5525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1325824, - "inode": 523361, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/95", - "xusr": false, - "atime": 1436810538.1325824, - "isdir": false, - "ctime": 1436810538.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6675823, - "inode": 525304, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2038", - "xusr": false, - "atime": 1436810539.6675823, - "isdir": false, - "ctime": 1436810539.6675823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2125823, - "inode": 527276, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4010", - "xusr": false, - "atime": 1436810541.2125823, - "isdir": false, - "ctime": 1436810541.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4835823, - "inode": 525105, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1839", - "xusr": false, - "atime": 1436810539.4835823, - "isdir": false, - "ctime": 1436810539.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9505823, - "inode": 524430, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1164", - "xusr": false, - "atime": 1436810538.9505823, - "isdir": false, - "ctime": 1436810538.9505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8625822, - "inode": 526793, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3527", - "xusr": false, - "atime": 1436810540.8625822, - "isdir": false, - "ctime": 1436810540.8625822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2845824, - "inode": 526035, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2769", - "xusr": false, - "atime": 1436810540.2845824, - "isdir": false, - "ctime": 1436810540.2845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9965823, - "inode": 525723, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2457", - "xusr": false, - "atime": 1436810539.9965823, - "isdir": false, - "ctime": 1436810539.9965823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0385823, - "inode": 525780, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2514", - "xusr": false, - "atime": 1436810540.0385823, - "isdir": false, - "ctime": 1436810540.0385823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4615824, - "inode": 523773, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/507", - "xusr": false, - "atime": 1436810538.4615824, - "isdir": false, - "ctime": 1436810538.4615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8255823, - "inode": 528076, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4810", - "xusr": false, - "atime": 1436810541.8255823, - "isdir": false, - "ctime": 1436810541.8255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3205824, - "inode": 526081, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2815", - "xusr": false, - "atime": 1436810540.3205824, - "isdir": false, - "ctime": 1436810540.3205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6075823, - "inode": 523974, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/708", - "xusr": false, - "atime": 1436810538.6075823, - "isdir": false, - "ctime": 1436810538.6075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3475823, - "inode": 523646, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/380", - "xusr": false, - "atime": 1436810538.3475823, - "isdir": false, - "ctime": 1436810538.3475823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9515824, - "inode": 525661, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2395", - "xusr": false, - "atime": 1436810539.9515824, - "isdir": false, - "ctime": 1436810539.9515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7865822, - "inode": 528024, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4758", - "xusr": false, - "atime": 1436810541.7865822, - "isdir": false, - "ctime": 1436810541.7865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3635824, - "inode": 523657, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/391", - "xusr": false, - "atime": 1436810538.3635824, - "isdir": false, - "ctime": 1436810538.3635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3905823, - "inode": 526179, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2913", - "xusr": false, - "atime": 1436810540.3905823, - "isdir": false, - "ctime": 1436810540.3905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5505824, - "inode": 525170, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1904", - "xusr": false, - "atime": 1436810539.5505824, - "isdir": false, - "ctime": 1436810539.5505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9985824, - "inode": 524498, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1232", - "xusr": false, - "atime": 1436810538.9985824, - "isdir": false, - "ctime": 1436810538.9985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3175824, - "inode": 523616, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/350", - "xusr": false, - "atime": 1436810538.3175824, - "isdir": false, - "ctime": 1436810538.3175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0955822, - "inode": 527118, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3852", - "xusr": false, - "atime": 1436810541.0955822, - "isdir": false, - "ctime": 1436810541.0955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1515822, - "inode": 525890, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2624", - "xusr": false, - "atime": 1436810540.1515822, - "isdir": false, - "ctime": 1436810540.1515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0345824, - "inode": 527032, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3766", - "xusr": false, - "atime": 1436810541.0345824, - "isdir": false, - "ctime": 1436810541.0345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9075823, - "inode": 526856, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3590", - "xusr": false, - "atime": 1436810540.9075823, - "isdir": false, - "ctime": 1436810540.9075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6245823, - "inode": 523997, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/731", - "xusr": false, - "atime": 1436810538.6245823, - "isdir": false, - "ctime": 1436810538.6245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8215823, - "inode": 526735, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3469", - "xusr": false, - "atime": 1436810540.8215823, - "isdir": false, - "ctime": 1436810540.8215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8495822, - "inode": 524293, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1027", - "xusr": false, - "atime": 1436810538.8495822, - "isdir": false, - "ctime": 1436810538.8495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9025824, - "inode": 525596, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2330", - "xusr": false, - "atime": 1436810539.9025824, - "isdir": false, - "ctime": 1436810539.9025824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3765824, - "inode": 526158, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2892", - "xusr": false, - "atime": 1436810540.3765824, - "isdir": false, - "ctime": 1436810540.3765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7055824, - "inode": 526573, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3307", - "xusr": false, - "atime": 1436810540.7055824, - "isdir": false, - "ctime": 1436810540.7055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6385822, - "inode": 525274, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2008", - "xusr": false, - "atime": 1436810539.6385822, - "isdir": false, - "ctime": 1436810539.6385822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7215824, - "inode": 524127, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/861", - "xusr": false, - "atime": 1436810538.7215824, - "isdir": false, - "ctime": 1436810538.7215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6735823, - "inode": 527867, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4601", - "xusr": false, - "atime": 1436810541.6735823, - "isdir": false, - "ctime": 1436810541.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8635824, - "inode": 528128, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4862", - "xusr": false, - "atime": 1436810541.8635824, - "isdir": false, - "ctime": 1436810541.8635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4695823, - "inode": 527587, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4321", - "xusr": false, - "atime": 1436810541.4695823, - "isdir": false, - "ctime": 1436810541.4695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4235823, - "inode": 527523, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4257", - "xusr": false, - "atime": 1436810541.4235823, - "isdir": false, - "ctime": 1436810541.4235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5935824, - "inode": 527759, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4493", - "xusr": false, - "atime": 1436810541.5935824, - "isdir": false, - "ctime": 1436810541.5935824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3195822, - "inode": 526079, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2813", - "xusr": false, - "atime": 1436810540.3195822, - "isdir": false, - "ctime": 1436810540.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4005823, - "inode": 523696, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/430", - "xusr": false, - "atime": 1436810538.4005823, - "isdir": false, - "ctime": 1436810538.4005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6975822, - "inode": 527901, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4635", - "xusr": false, - "atime": 1436810541.6975822, - "isdir": false, - "ctime": 1436810541.6975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8905823, - "inode": 525579, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2313", - "xusr": false, - "atime": 1436810539.8905823, - "isdir": false, - "ctime": 1436810539.8905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1915822, - "inode": 527246, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3980", - "xusr": false, - "atime": 1436810541.1915822, - "isdir": false, - "ctime": 1436810541.1915822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5395823, - "inode": 526342, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3076", - "xusr": false, - "atime": 1436810540.5395823, - "isdir": false, - "ctime": 1436810540.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1105824, - "inode": 525852, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2586", - "xusr": false, - "atime": 1436810540.1105824, - "isdir": false, - "ctime": 1436810540.1105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9375823, - "inode": 524412, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1146", - "xusr": false, - "atime": 1436810538.9375823, - "isdir": false, - "ctime": 1436810538.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2905824, - "inode": 524916, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1650", - "xusr": false, - "atime": 1436810539.2905824, - "isdir": false, - "ctime": 1436810539.2905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2135823, - "inode": 525957, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2691", - "xusr": false, - "atime": 1436810540.2135823, - "isdir": false, - "ctime": 1436810540.2135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2615824, - "inode": 523543, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/277", - "xusr": false, - "atime": 1436810538.2615824, - "isdir": false, - "ctime": 1436810538.2615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6035824, - "inode": 527773, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4507", - "xusr": false, - "atime": 1436810541.6035824, - "isdir": false, - "ctime": 1436810541.6035824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3305824, - "inode": 527428, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4162", - "xusr": false, - "atime": 1436810541.3305824, - "isdir": false, - "ctime": 1436810541.3305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0375824, - "inode": 527036, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3770", - "xusr": false, - "atime": 1436810541.0375824, - "isdir": false, - "ctime": 1436810541.0375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2155824, - "inode": 523480, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/214", - "xusr": false, - "atime": 1436810538.2155824, - "isdir": false, - "ctime": 1436810538.2155824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5595822, - "inode": 526368, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3102", - "xusr": false, - "atime": 1436810540.5595822, - "isdir": false, - "ctime": 1436810540.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3995824, - "inode": 525025, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1759", - "xusr": false, - "atime": 1436810539.3995824, - "isdir": false, - "ctime": 1436810539.3995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5245824, - "inode": 525144, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1878", - "xusr": false, - "atime": 1436810539.5245824, - "isdir": false, - "ctime": 1436810539.5245824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6295824, - "inode": 524004, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/738", - "xusr": false, - "atime": 1436810538.6295824, - "isdir": false, - "ctime": 1436810538.6295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3925824, - "inode": 527484, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4218", - "xusr": false, - "atime": 1436810541.3925824, - "isdir": false, - "ctime": 1436810541.3925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1975822, - "inode": 527254, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3988", - "xusr": false, - "atime": 1436810541.1975822, - "isdir": false, - "ctime": 1436810541.1975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2395823, - "inode": 527313, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4047", - "xusr": false, - "atime": 1436810541.2395823, - "isdir": false, - "ctime": 1436810541.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5015824, - "inode": 523830, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/564", - "xusr": false, - "atime": 1436810538.5015824, - "isdir": false, - "ctime": 1436810538.5015824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5855823, - "inode": 526405, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3139", - "xusr": false, - "atime": 1436810540.5855823, - "isdir": false, - "ctime": 1436810540.5855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3065822, - "inode": 523606, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/340", - "xusr": false, - "atime": 1436810538.3065822, - "isdir": false, - "ctime": 1436810538.3065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4355824, - "inode": 525062, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1796", - "xusr": false, - "atime": 1436810539.4355824, - "isdir": false, - "ctime": 1436810539.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7165823, - "inode": 525353, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2087", - "xusr": false, - "atime": 1436810539.7165823, - "isdir": false, - "ctime": 1436810539.7165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1545823, - "inode": 527199, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3933", - "xusr": false, - "atime": 1436810541.1545823, - "isdir": false, - "ctime": 1436810541.1545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3965824, - "inode": 523691, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/425", - "xusr": false, - "atime": 1436810538.3965824, - "isdir": false, - "ctime": 1436810538.3965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2885823, - "inode": 524912, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1646", - "xusr": false, - "atime": 1436810539.2885823, - "isdir": false, - "ctime": 1436810539.2885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8395822, - "inode": 524280, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1014", - "xusr": false, - "atime": 1436810538.8395822, - "isdir": false, - "ctime": 1436810538.8395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5845823, - "inode": 526404, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3138", - "xusr": false, - "atime": 1436810540.5845823, - "isdir": false, - "ctime": 1436810540.5845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0985823, - "inode": 527121, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3855", - "xusr": false, - "atime": 1436810541.0985823, - "isdir": false, - "ctime": 1436810541.0985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7415824, - "inode": 526624, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3358", - "xusr": false, - "atime": 1436810540.7415824, - "isdir": false, - "ctime": 1436810540.7415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4645822, - "inode": 527580, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4314", - "xusr": false, - "atime": 1436810541.4645822, - "isdir": false, - "ctime": 1436810541.4645822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6435823, - "inode": 525280, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2014", - "xusr": false, - "atime": 1436810539.6435823, - "isdir": false, - "ctime": 1436810539.6435823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6935823, - "inode": 524092, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/826", - "xusr": false, - "atime": 1436810538.6935823, - "isdir": false, - "ctime": 1436810538.6935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4785824, - "inode": 523797, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/531", - "xusr": false, - "atime": 1436810538.4785824, - "isdir": false, - "ctime": 1436810538.4785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3735824, - "inode": 523664, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/398", - "xusr": false, - "atime": 1436810538.3735824, - "isdir": false, - "ctime": 1436810538.3735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5395823, - "inode": 525160, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1894", - "xusr": false, - "atime": 1436810539.5395823, - "isdir": false, - "ctime": 1436810539.5395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9265823, - "inode": 526883, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3617", - "xusr": false, - "atime": 1436810540.9265823, - "isdir": false, - "ctime": 1436810540.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7465823, - "inode": 527968, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4702", - "xusr": false, - "atime": 1436810541.7465823, - "isdir": false, - "ctime": 1436810541.7465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9145823, - "inode": 525611, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2345", - "xusr": false, - "atime": 1436810539.9145823, - "isdir": false, - "ctime": 1436810539.9145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0025823, - "inode": 525732, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2466", - "xusr": false, - "atime": 1436810540.0025823, - "isdir": false, - "ctime": 1436810540.0025823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1275823, - "inode": 524681, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1415", - "xusr": false, - "atime": 1436810539.1275823, - "isdir": false, - "ctime": 1436810539.1275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3745823, - "inode": 523665, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/399", - "xusr": false, - "atime": 1436810538.3745823, - "isdir": false, - "ctime": 1436810538.3745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5565822, - "inode": 525176, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1910", - "xusr": false, - "atime": 1436810539.5565822, - "isdir": false, - "ctime": 1436810539.5565822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9845824, - "inode": 525707, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2441", - "xusr": false, - "atime": 1436810539.9845824, - "isdir": false, - "ctime": 1436810539.9845824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4805822, - "inode": 525101, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1835", - "xusr": false, - "atime": 1436810539.4805822, - "isdir": false, - "ctime": 1436810539.4805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3665824, - "inode": 524994, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1728", - "xusr": false, - "atime": 1436810539.3665824, - "isdir": false, - "ctime": 1436810539.3665824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6555824, - "inode": 527842, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4576", - "xusr": false, - "atime": 1436810541.6555824, - "isdir": false, - "ctime": 1436810541.6555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9725823, - "inode": 524462, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1196", - "xusr": false, - "atime": 1436810538.9725823, - "isdir": false, - "ctime": 1436810538.9725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5285823, - "inode": 526326, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3060", - "xusr": false, - "atime": 1436810540.5285823, - "isdir": false, - "ctime": 1436810540.5285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1135824, - "inode": 525854, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2588", - "xusr": false, - "atime": 1436810540.1135824, - "isdir": false, - "ctime": 1436810540.1135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6985824, - "inode": 524098, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/832", - "xusr": false, - "atime": 1436810538.6985824, - "isdir": false, - "ctime": 1436810538.6985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5345824, - "inode": 527676, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4410", - "xusr": false, - "atime": 1436810541.5345824, - "isdir": false, - "ctime": 1436810541.5345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0225823, - "inode": 525757, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2491", - "xusr": false, - "atime": 1436810540.0225823, - "isdir": false, - "ctime": 1436810540.0225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1055822, - "inode": 525848, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2582", - "xusr": false, - "atime": 1436810540.1055822, - "isdir": false, - "ctime": 1436810540.1055822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7565823, - "inode": 524172, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/906", - "xusr": false, - "atime": 1436810538.7565823, - "isdir": false, - "ctime": 1436810538.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4275823, - "inode": 526231, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2965", - "xusr": false, - "atime": 1436810540.4275823, - "isdir": false, - "ctime": 1436810540.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0285823, - "inode": 525766, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2500", - "xusr": false, - "atime": 1436810540.0285823, - "isdir": false, - "ctime": 1436810540.0285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6235824, - "inode": 525254, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1988", - "xusr": false, - "atime": 1436810539.6235824, - "isdir": false, - "ctime": 1436810539.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8655822, - "inode": 526797, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3531", - "xusr": false, - "atime": 1436810540.8655822, - "isdir": false, - "ctime": 1436810540.8655822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5825822, - "inode": 527743, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4477", - "xusr": false, - "atime": 1436810541.5825822, - "isdir": false, - "ctime": 1436810541.5825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5765822, - "inode": 527735, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4469", - "xusr": false, - "atime": 1436810541.5765822, - "isdir": false, - "ctime": 1436810541.5765822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4355824, - "inode": 527539, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4273", - "xusr": false, - "atime": 1436810541.4355824, - "isdir": false, - "ctime": 1436810541.4355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9235823, - "inode": 525623, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2357", - "xusr": false, - "atime": 1436810539.9235823, - "isdir": false, - "ctime": 1436810539.9235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0195823, - "inode": 527011, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3745", - "xusr": false, - "atime": 1436810541.0195823, - "isdir": false, - "ctime": 1436810541.0195823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8185823, - "inode": 525477, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2211", - "xusr": false, - "atime": 1436810539.8185823, - "isdir": false, - "ctime": 1436810539.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1815822, - "inode": 524759, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1493", - "xusr": false, - "atime": 1436810539.1815822, - "isdir": false, - "ctime": 1436810539.1815822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6125822, - "inode": 523982, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/716", - "xusr": false, - "atime": 1436810538.6125822, - "isdir": false, - "ctime": 1436810538.6125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1935823, - "inode": 524776, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1510", - "xusr": false, - "atime": 1436810539.1935823, - "isdir": false, - "ctime": 1436810539.1935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7505822, - "inode": 524164, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/898", - "xusr": false, - "atime": 1436810538.7505822, - "isdir": false, - "ctime": 1436810538.7505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7985823, - "inode": 528041, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4775", - "xusr": false, - "atime": 1436810541.7985823, - "isdir": false, - "ctime": 1436810541.7985823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3055823, - "inode": 526060, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2794", - "xusr": false, - "atime": 1436810540.3055823, - "isdir": false, - "ctime": 1436810540.3055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0275824, - "inode": 525765, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2499", - "xusr": false, - "atime": 1436810540.0275824, - "isdir": false, - "ctime": 1436810540.0275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7475822, - "inode": 526632, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3366", - "xusr": false, - "atime": 1436810540.7475822, - "isdir": false, - "ctime": 1436810540.7475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1395824, - "inode": 527178, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3912", - "xusr": false, - "atime": 1436810541.1395824, - "isdir": false, - "ctime": 1436810541.1395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3965824, - "inode": 525021, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1755", - "xusr": false, - "atime": 1436810539.3965824, - "isdir": false, - "ctime": 1436810539.3965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5785823, - "inode": 525204, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1938", - "xusr": false, - "atime": 1436810539.5785823, - "isdir": false, - "ctime": 1436810539.5785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1585822, - "inode": 527204, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3938", - "xusr": false, - "atime": 1436810541.1585822, - "isdir": false, - "ctime": 1436810541.1585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5695822, - "inode": 527725, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4459", - "xusr": false, - "atime": 1436810541.5695822, - "isdir": false, - "ctime": 1436810541.5695822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3445823, - "inode": 526114, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2848", - "xusr": false, - "atime": 1436810540.3445823, - "isdir": false, - "ctime": 1436810540.3445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1645823, - "inode": 525903, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2637", - "xusr": false, - "atime": 1436810540.1645823, - "isdir": false, - "ctime": 1436810540.1645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2445824, - "inode": 527320, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4054", - "xusr": false, - "atime": 1436810541.2445824, - "isdir": false, - "ctime": 1436810541.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9515822, - "inode": 528252, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4986", - "xusr": false, - "atime": 1436810541.9515822, - "isdir": false, - "ctime": 1436810541.9515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0855823, - "inode": 525828, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2562", - "xusr": false, - "atime": 1436810540.0855823, - "isdir": false, - "ctime": 1436810540.0855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3545823, - "inode": 524988, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1722", - "xusr": false, - "atime": 1436810539.3545823, - "isdir": false, - "ctime": 1436810539.3545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0365822, - "inode": 527035, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3769", - "xusr": false, - "atime": 1436810541.0365822, - "isdir": false, - "ctime": 1436810541.0365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7045822, - "inode": 526572, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3306", - "xusr": false, - "atime": 1436810540.7045822, - "isdir": false, - "ctime": 1436810540.7045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9905822, - "inode": 526973, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3707", - "xusr": false, - "atime": 1436810540.9905822, - "isdir": false, - "ctime": 1436810540.9905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1925824, - "inode": 523447, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/181", - "xusr": false, - "atime": 1436810538.1925824, - "isdir": false, - "ctime": 1436810538.1925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4475822, - "inode": 525067, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1801", - "xusr": false, - "atime": 1436810539.4475822, - "isdir": false, - "ctime": 1436810539.4475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2405822, - "inode": 524844, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1578", - "xusr": false, - "atime": 1436810539.2405822, - "isdir": false, - "ctime": 1436810539.2405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6305823, - "inode": 525264, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1998", - "xusr": false, - "atime": 1436810539.6305823, - "isdir": false, - "ctime": 1436810539.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0475824, - "inode": 524567, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1301", - "xusr": false, - "atime": 1436810539.0475824, - "isdir": false, - "ctime": 1436810539.0475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2605822, - "inode": 524873, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1607", - "xusr": false, - "atime": 1436810539.2605822, - "isdir": false, - "ctime": 1436810539.2605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2445824, - "inode": 524850, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1584", - "xusr": false, - "atime": 1436810539.2445824, - "isdir": false, - "ctime": 1436810539.2445824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4205823, - "inode": 523723, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/457", - "xusr": false, - "atime": 1436810538.4205823, - "isdir": false, - "ctime": 1436810538.4205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4075823, - "inode": 523706, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/440", - "xusr": false, - "atime": 1436810538.4075823, - "isdir": false, - "ctime": 1436810538.4075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2465823, - "inode": 523522, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/256", - "xusr": false, - "atime": 1436810538.2465823, - "isdir": false, - "ctime": 1436810538.2465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6805823, - "inode": 524074, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/808", - "xusr": false, - "atime": 1436810538.6805823, - "isdir": false, - "ctime": 1436810538.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0525823, - "inode": 525796, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2530", - "xusr": false, - "atime": 1436810540.0525823, - "isdir": false, - "ctime": 1436810540.0525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3935823, - "inode": 526183, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2917", - "xusr": false, - "atime": 1436810540.3935823, - "isdir": false, - "ctime": 1436810540.3935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8335824, - "inode": 528087, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4821", - "xusr": false, - "atime": 1436810541.8335824, - "isdir": false, - "ctime": 1436810541.8335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3455822, - "inode": 527444, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4178", - "xusr": false, - "atime": 1436810541.3455822, - "isdir": false, - "ctime": 1436810541.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2335823, - "inode": 524833, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1567", - "xusr": false, - "atime": 1436810539.2335823, - "isdir": false, - "ctime": 1436810539.2335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1355822, - "inode": 524693, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1427", - "xusr": false, - "atime": 1436810539.1355822, - "isdir": false, - "ctime": 1436810539.1355822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8095822, - "inode": 528056, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4790", - "xusr": false, - "atime": 1436810541.8095822, - "isdir": false, - "ctime": 1436810541.8095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4985824, - "inode": 523825, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/559", - "xusr": false, - "atime": 1436810538.4985824, - "isdir": false, - "ctime": 1436810538.4985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0375824, - "inode": 524553, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1287", - "xusr": false, - "atime": 1436810539.0375824, - "isdir": false, - "ctime": 1436810539.0375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7535822, - "inode": 524168, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/902", - "xusr": false, - "atime": 1436810538.7535822, - "isdir": false, - "ctime": 1436810538.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1275823, - "inode": 525868, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2602", - "xusr": false, - "atime": 1436810540.1275823, - "isdir": false, - "ctime": 1436810540.1275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2495823, - "inode": 524857, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1591", - "xusr": false, - "atime": 1436810539.2495823, - "isdir": false, - "ctime": 1436810539.2495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7605822, - "inode": 525400, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2134", - "xusr": false, - "atime": 1436810539.7605822, - "isdir": false, - "ctime": 1436810539.7605822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6805823, - "inode": 525315, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2049", - "xusr": false, - "atime": 1436810539.6805823, - "isdir": false, - "ctime": 1436810539.6805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2785823, - "inode": 523568, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/302", - "xusr": false, - "atime": 1436810538.2785823, - "isdir": false, - "ctime": 1436810538.2785823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8965824, - "inode": 526841, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3575", - "xusr": false, - "atime": 1436810540.8965824, - "isdir": false, - "ctime": 1436810540.8965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7815824, - "inode": 526679, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3413", - "xusr": false, - "atime": 1436810540.7815824, - "isdir": false, - "ctime": 1436810540.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3875823, - "inode": 526175, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2909", - "xusr": false, - "atime": 1436810540.3875823, - "isdir": false, - "ctime": 1436810540.3875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8305824, - "inode": 525494, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2228", - "xusr": false, - "atime": 1436810539.8305824, - "isdir": false, - "ctime": 1436810539.8305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3045824, - "inode": 523604, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/338", - "xusr": false, - "atime": 1436810538.3045824, - "isdir": false, - "ctime": 1436810538.3045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4175823, - "inode": 523720, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/454", - "xusr": false, - "atime": 1436810538.4175823, - "isdir": false, - "ctime": 1436810538.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5085824, - "inode": 525129, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1863", - "xusr": false, - "atime": 1436810539.5085824, - "isdir": false, - "ctime": 1436810539.5085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1945822, - "inode": 523449, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/183", - "xusr": false, - "atime": 1436810538.1945822, - "isdir": false, - "ctime": 1436810538.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7115824, - "inode": 527920, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4654", - "xusr": false, - "atime": 1436810541.7115824, - "isdir": false, - "ctime": 1436810541.7115824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2175822, - "inode": 523482, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/216", - "xusr": false, - "atime": 1436810538.2175822, - "isdir": false, - "ctime": 1436810538.2175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1715822, - "inode": 523416, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/150", - "xusr": false, - "atime": 1436810538.1715822, - "isdir": false, - "ctime": 1436810538.1715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5205822, - "inode": 523855, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/589", - "xusr": false, - "atime": 1436810538.5205822, - "isdir": false, - "ctime": 1436810538.5205822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5295823, - "inode": 523868, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/602", - "xusr": false, - "atime": 1436810538.5295823, - "isdir": false, - "ctime": 1436810538.5295823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9865823, - "inode": 526968, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3702", - "xusr": false, - "atime": 1436810540.9865823, - "isdir": false, - "ctime": 1436810540.9865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9805822, - "inode": 525701, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2435", - "xusr": false, - "atime": 1436810539.9805822, - "isdir": false, - "ctime": 1436810539.9805822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9835823, - "inode": 526964, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3698", - "xusr": false, - "atime": 1436810540.9835823, - "isdir": false, - "ctime": 1436810540.9835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4975822, - "inode": 527626, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4360", - "xusr": false, - "atime": 1436810541.4975822, - "isdir": false, - "ctime": 1436810541.4975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1325824, - "inode": 524688, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1422", - "xusr": false, - "atime": 1436810539.1325824, - "isdir": false, - "ctime": 1436810539.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8405824, - "inode": 528098, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4832", - "xusr": false, - "atime": 1436810541.8405824, - "isdir": false, - "ctime": 1436810541.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6205823, - "inode": 523992, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/726", - "xusr": false, - "atime": 1436810538.6205823, - "isdir": false, - "ctime": 1436810538.6205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0915823, - "inode": 523305, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/39", - "xusr": false, - "atime": 1436810538.0915823, - "isdir": false, - "ctime": 1436810538.0915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9305823, - "inode": 524404, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1138", - "xusr": false, - "atime": 1436810538.9305823, - "isdir": false, - "ctime": 1436810538.9305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1465824, - "inode": 527187, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3921", - "xusr": false, - "atime": 1436810541.1465824, - "isdir": false, - "ctime": 1436810541.1465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0355823, - "inode": 524549, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1283", - "xusr": false, - "atime": 1436810539.0355823, - "isdir": false, - "ctime": 1436810539.0355823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7005823, - "inode": 524101, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/835", - "xusr": false, - "atime": 1436810538.7005823, - "isdir": false, - "ctime": 1436810538.7005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8245823, - "inode": 524260, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/994", - "xusr": false, - "atime": 1436810538.8245823, - "isdir": false, - "ctime": 1436810538.8245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2015822, - "inode": 527260, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3994", - "xusr": false, - "atime": 1436810541.2015822, - "isdir": false, - "ctime": 1436810541.2015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3555822, - "inode": 526129, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2863", - "xusr": false, - "atime": 1436810540.3555822, - "isdir": false, - "ctime": 1436810540.3555822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3095822, - "inode": 526065, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2799", - "xusr": false, - "atime": 1436810540.3095822, - "isdir": false, - "ctime": 1436810540.3095822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6305823, - "inode": 524005, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/739", - "xusr": false, - "atime": 1436810538.6305823, - "isdir": false, - "ctime": 1436810538.6305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6975822, - "inode": 524097, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/831", - "xusr": false, - "atime": 1436810538.6975822, - "isdir": false, - "ctime": 1436810538.6975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4865823, - "inode": 525108, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1842", - "xusr": false, - "atime": 1436810539.4865823, - "isdir": false, - "ctime": 1436810539.4865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9225824, - "inode": 524393, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1127", - "xusr": false, - "atime": 1436810538.9225824, - "isdir": false, - "ctime": 1436810538.9225824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2045822, - "inode": 524792, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1526", - "xusr": false, - "atime": 1436810539.2045822, - "isdir": false, - "ctime": 1436810539.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8615823, - "inode": 526791, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3525", - "xusr": false, - "atime": 1436810540.8615823, - "isdir": false, - "ctime": 1436810540.8615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5525823, - "inode": 526359, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3093", - "xusr": false, - "atime": 1436810540.5525823, - "isdir": false, - "ctime": 1436810540.5525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0435822, - "inode": 525788, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2522", - "xusr": false, - "atime": 1436810540.0435822, - "isdir": false, - "ctime": 1436810540.0435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9265823, - "inode": 524399, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1133", - "xusr": false, - "atime": 1436810538.9265823, - "isdir": false, - "ctime": 1436810538.9265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5275824, - "inode": 527666, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4400", - "xusr": false, - "atime": 1436810541.5275824, - "isdir": false, - "ctime": 1436810541.5275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5435822, - "inode": 527689, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4423", - "xusr": false, - "atime": 1436810541.5435822, - "isdir": false, - "ctime": 1436810541.5435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6975822, - "inode": 525332, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2066", - "xusr": false, - "atime": 1436810539.6975822, - "isdir": false, - "ctime": 1436810539.6975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0285823, - "inode": 527023, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3757", - "xusr": false, - "atime": 1436810541.0285823, - "isdir": false, - "ctime": 1436810541.0285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3915823, - "inode": 527482, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4216", - "xusr": false, - "atime": 1436810541.3915823, - "isdir": false, - "ctime": 1436810541.3915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1905823, - "inode": 523444, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/178", - "xusr": false, - "atime": 1436810538.1905823, - "isdir": false, - "ctime": 1436810538.1905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7915823, - "inode": 524215, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/949", - "xusr": false, - "atime": 1436810538.7915823, - "isdir": false, - "ctime": 1436810538.7915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2525823, - "inode": 524861, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1595", - "xusr": false, - "atime": 1436810539.2525823, - "isdir": false, - "ctime": 1436810539.2525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1635823, - "inode": 527210, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3944", - "xusr": false, - "atime": 1436810541.1635823, - "isdir": false, - "ctime": 1436810541.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9555824, - "inode": 528256, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4990", - "xusr": false, - "atime": 1436810541.9555824, - "isdir": false, - "ctime": 1436810541.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9425824, - "inode": 526905, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3639", - "xusr": false, - "atime": 1436810540.9425824, - "isdir": false, - "ctime": 1436810540.9425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2975824, - "inode": 524926, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1660", - "xusr": false, - "atime": 1436810539.2975824, - "isdir": false, - "ctime": 1436810539.2975824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8855822, - "inode": 526825, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3559", - "xusr": false, - "atime": 1436810540.8855822, - "isdir": false, - "ctime": 1436810540.8855822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5465822, - "inode": 527693, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4427", - "xusr": false, - "atime": 1436810541.5465822, - "isdir": false, - "ctime": 1436810541.5465822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4235823, - "inode": 525053, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1787", - "xusr": false, - "atime": 1436810539.4235823, - "isdir": false, - "ctime": 1436810539.4235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9095824, - "inode": 525605, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2339", - "xusr": false, - "atime": 1436810539.9095824, - "isdir": false, - "ctime": 1436810539.9095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2735822, - "inode": 527361, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4095", - "xusr": false, - "atime": 1436810541.2735822, - "isdir": false, - "ctime": 1436810541.2735822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8375823, - "inode": 525503, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2237", - "xusr": false, - "atime": 1436810539.8375823, - "isdir": false, - "ctime": 1436810539.8375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9445822, - "inode": 525652, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2386", - "xusr": false, - "atime": 1436810539.9445822, - "isdir": false, - "ctime": 1436810539.9445822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8365824, - "inode": 525502, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2236", - "xusr": false, - "atime": 1436810539.8365824, - "isdir": false, - "ctime": 1436810539.8365824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0125823, - "inode": 527002, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3736", - "xusr": false, - "atime": 1436810541.0125823, - "isdir": false, - "ctime": 1436810541.0125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7815824, - "inode": 524202, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/936", - "xusr": false, - "atime": 1436810538.7815824, - "isdir": false, - "ctime": 1436810538.7815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3275824, - "inode": 527424, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4158", - "xusr": false, - "atime": 1436810541.3275824, - "isdir": false, - "ctime": 1436810541.3275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6845822, - "inode": 524079, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/813", - "xusr": false, - "atime": 1436810538.6845822, - "isdir": false, - "ctime": 1436810538.6845822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7745824, - "inode": 526669, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3403", - "xusr": false, - "atime": 1436810540.7745824, - "isdir": false, - "ctime": 1436810540.7745824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9495823, - "inode": 528249, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4983", - "xusr": false, - "atime": 1436810541.9495823, - "isdir": false, - "ctime": 1436810541.9495823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4115822, - "inode": 527508, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4242", - "xusr": false, - "atime": 1436810541.4115822, - "isdir": false, - "ctime": 1436810541.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9125824, - "inode": 524379, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1113", - "xusr": false, - "atime": 1436810538.9125824, - "isdir": false, - "ctime": 1436810538.9125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3205824, - "inode": 526080, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2814", - "xusr": false, - "atime": 1436810540.3205824, - "isdir": false, - "ctime": 1436810540.3205824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7395823, - "inode": 527959, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4693", - "xusr": false, - "atime": 1436810541.7395823, - "isdir": false, - "ctime": 1436810541.7395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8545823, - "inode": 528115, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4849", - "xusr": false, - "atime": 1436810541.8545823, - "isdir": false, - "ctime": 1436810541.8545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2725823, - "inode": 526021, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2755", - "xusr": false, - "atime": 1436810540.2725823, - "isdir": false, - "ctime": 1436810540.2725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7885823, - "inode": 528027, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4761", - "xusr": false, - "atime": 1436810541.7885823, - "isdir": false, - "ctime": 1436810541.7885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3375823, - "inode": 526105, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2839", - "xusr": false, - "atime": 1436810540.3375823, - "isdir": false, - "ctime": 1436810540.3375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7705822, - "inode": 525414, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2148", - "xusr": false, - "atime": 1436810539.7705822, - "isdir": false, - "ctime": 1436810539.7705822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1295824, - "inode": 524684, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1418", - "xusr": false, - "atime": 1436810539.1295824, - "isdir": false, - "ctime": 1436810539.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7225823, - "inode": 526597, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3331", - "xusr": false, - "atime": 1436810540.7225823, - "isdir": false, - "ctime": 1436810540.7225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8775823, - "inode": 525560, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2294", - "xusr": false, - "atime": 1436810539.8775823, - "isdir": false, - "ctime": 1436810539.8775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8995824, - "inode": 525591, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2325", - "xusr": false, - "atime": 1436810539.8995824, - "isdir": false, - "ctime": 1436810539.8995824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7215824, - "inode": 526596, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3330", - "xusr": false, - "atime": 1436810540.7215824, - "isdir": false, - "ctime": 1436810540.7215824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5655823, - "inode": 526377, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3111", - "xusr": false, - "atime": 1436810540.5655823, - "isdir": false, - "ctime": 1436810540.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2915823, - "inode": 526042, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2776", - "xusr": false, - "atime": 1436810540.2915823, - "isdir": false, - "ctime": 1436810540.2915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4295824, - "inode": 527531, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4265", - "xusr": false, - "atime": 1436810541.4295824, - "isdir": false, - "ctime": 1436810541.4295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4835823, - "inode": 523804, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/538", - "xusr": false, - "atime": 1436810538.4835823, - "isdir": false, - "ctime": 1436810538.4835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0585823, - "inode": 527065, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3799", - "xusr": false, - "atime": 1436810541.0585823, - "isdir": false, - "ctime": 1436810541.0585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2415824, - "inode": 523516, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/250", - "xusr": false, - "atime": 1436810538.2415824, - "isdir": false, - "ctime": 1436810538.2415824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6525824, - "inode": 526498, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3232", - "xusr": false, - "atime": 1436810540.6525824, - "isdir": false, - "ctime": 1436810540.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8635824, - "inode": 524312, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1046", - "xusr": false, - "atime": 1436810538.8635824, - "isdir": false, - "ctime": 1436810538.8635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6195824, - "inode": 527795, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4529", - "xusr": false, - "atime": 1436810541.6195824, - "isdir": false, - "ctime": 1436810541.6195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3325822, - "inode": 524962, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1696", - "xusr": false, - "atime": 1436810539.3325822, - "isdir": false, - "ctime": 1436810539.3325822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8135824, - "inode": 525470, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2204", - "xusr": false, - "atime": 1436810539.8135824, - "isdir": false, - "ctime": 1436810539.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4745822, - "inode": 523792, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/526", - "xusr": false, - "atime": 1436810538.4745822, - "isdir": false, - "ctime": 1436810538.4745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2355824, - "inode": 523507, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/241", - "xusr": false, - "atime": 1436810538.2355824, - "isdir": false, - "ctime": 1436810538.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2505822, - "inode": 525998, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2732", - "xusr": false, - "atime": 1436810540.2505822, - "isdir": false, - "ctime": 1436810540.2505822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2685823, - "inode": 524884, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1618", - "xusr": false, - "atime": 1436810539.2685823, - "isdir": false, - "ctime": 1436810539.2685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1785824, - "inode": 527229, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3963", - "xusr": false, - "atime": 1436810541.1785824, - "isdir": false, - "ctime": 1436810541.1785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6065824, - "inode": 525232, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1966", - "xusr": false, - "atime": 1436810539.6065824, - "isdir": false, - "ctime": 1436810539.6065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4265823, - "inode": 526229, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2963", - "xusr": false, - "atime": 1436810540.4265823, - "isdir": false, - "ctime": 1436810540.4265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9555824, - "inode": 525667, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2401", - "xusr": false, - "atime": 1436810539.9555824, - "isdir": false, - "ctime": 1436810539.9555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4545822, - "inode": 525073, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1807", - "xusr": false, - "atime": 1436810539.4545822, - "isdir": false, - "ctime": 1436810539.4545822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4795823, - "inode": 525100, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1834", - "xusr": false, - "atime": 1436810539.4795823, - "isdir": false, - "ctime": 1436810539.4795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2425823, - "inode": 527317, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4051", - "xusr": false, - "atime": 1436810541.2425823, - "isdir": false, - "ctime": 1436810541.2425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0805824, - "inode": 527096, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3830", - "xusr": false, - "atime": 1436810541.0805824, - "isdir": false, - "ctime": 1436810541.0805824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8735824, - "inode": 526808, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3542", - "xusr": false, - "atime": 1436810540.8735824, - "isdir": false, - "ctime": 1436810540.8735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1635823, - "inode": 524733, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1467", - "xusr": false, - "atime": 1436810539.1635823, - "isdir": false, - "ctime": 1436810539.1635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0775824, - "inode": 527092, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3826", - "xusr": false, - "atime": 1436810541.0775824, - "isdir": false, - "ctime": 1436810541.0775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3455822, - "inode": 526115, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2849", - "xusr": false, - "atime": 1436810540.3455822, - "isdir": false, - "ctime": 1436810540.3455822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6025822, - "inode": 525227, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1961", - "xusr": false, - "atime": 1436810539.6025822, - "isdir": false, - "ctime": 1436810539.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4185822, - "inode": 527517, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4251", - "xusr": false, - "atime": 1436810541.4185822, - "isdir": false, - "ctime": 1436810541.4185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1825824, - "inode": 527234, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3968", - "xusr": false, - "atime": 1436810541.1825824, - "isdir": false, - "ctime": 1436810541.1825824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5315824, - "inode": 525152, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1886", - "xusr": false, - "atime": 1436810539.5315824, - "isdir": false, - "ctime": 1436810539.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4565823, - "inode": 525074, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1808", - "xusr": false, - "atime": 1436810539.4565823, - "isdir": false, - "ctime": 1436810539.4565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8965824, - "inode": 524356, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1090", - "xusr": false, - "atime": 1436810538.8965824, - "isdir": false, - "ctime": 1436810538.8965824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1215823, - "inode": 527153, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3887", - "xusr": false, - "atime": 1436810541.1215823, - "isdir": false, - "ctime": 1436810541.1215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8875823, - "inode": 526828, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3562", - "xusr": false, - "atime": 1436810540.8875823, - "isdir": false, - "ctime": 1436810540.8875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1005824, - "inode": 527124, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3858", - "xusr": false, - "atime": 1436810541.1005824, - "isdir": false, - "ctime": 1436810541.1005824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9315822, - "inode": 526890, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3624", - "xusr": false, - "atime": 1436810540.9315822, - "isdir": false, - "ctime": 1436810540.9315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9135823, - "inode": 524381, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1115", - "xusr": false, - "atime": 1436810538.9135823, - "isdir": false, - "ctime": 1436810538.9135823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8405824, - "inode": 526761, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3495", - "xusr": false, - "atime": 1436810540.8405824, - "isdir": false, - "ctime": 1436810540.8405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7255824, - "inode": 526601, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3335", - "xusr": false, - "atime": 1436810540.7255824, - "isdir": false, - "ctime": 1436810540.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8695824, - "inode": 525549, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2283", - "xusr": false, - "atime": 1436810539.8695824, - "isdir": false, - "ctime": 1436810539.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1335824, - "inode": 524690, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1424", - "xusr": false, - "atime": 1436810539.1335824, - "isdir": false, - "ctime": 1436810539.1335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0655823, - "inode": 524593, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1327", - "xusr": false, - "atime": 1436810539.0655823, - "isdir": false, - "ctime": 1436810539.0655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6025822, - "inode": 526428, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3162", - "xusr": false, - "atime": 1436810540.6025822, - "isdir": false, - "ctime": 1436810540.6025822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1995823, - "inode": 523457, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/191", - "xusr": false, - "atime": 1436810538.1995823, - "isdir": false, - "ctime": 1436810538.1995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8765824, - "inode": 526812, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3546", - "xusr": false, - "atime": 1436810540.8765824, - "isdir": false, - "ctime": 1436810540.8765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7085824, - "inode": 525345, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2079", - "xusr": false, - "atime": 1436810539.7085824, - "isdir": false, - "ctime": 1436810539.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1115823, - "inode": 527140, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3874", - "xusr": false, - "atime": 1436810541.1115823, - "isdir": false, - "ctime": 1436810541.1115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9575822, - "inode": 528260, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4994", - "xusr": false, - "atime": 1436810541.9575822, - "isdir": false, - "ctime": 1436810541.9575822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5815823, - "inode": 527741, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4475", - "xusr": false, - "atime": 1436810541.5815823, - "isdir": false, - "ctime": 1436810541.5815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3085823, - "inode": 526064, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2798", - "xusr": false, - "atime": 1436810540.3085823, - "isdir": false, - "ctime": 1436810540.3085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0175824, - "inode": 524525, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1259", - "xusr": false, - "atime": 1436810539.0175824, - "isdir": false, - "ctime": 1436810539.0175824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7325823, - "inode": 527949, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4683", - "xusr": false, - "atime": 1436810541.7325823, - "isdir": false, - "ctime": 1436810541.7325823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2965822, - "inode": 524924, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1658", - "xusr": false, - "atime": 1436810539.2965822, - "isdir": false, - "ctime": 1436810539.2965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0655823, - "inode": 527075, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3809", - "xusr": false, - "atime": 1436810541.0655823, - "isdir": false, - "ctime": 1436810541.0655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9745822, - "inode": 524464, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1198", - "xusr": false, - "atime": 1436810538.9745822, - "isdir": false, - "ctime": 1436810538.9745822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6325824, - "inode": 524008, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/742", - "xusr": false, - "atime": 1436810538.6325824, - "isdir": false, - "ctime": 1436810538.6325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6525824, - "inode": 526497, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3231", - "xusr": false, - "atime": 1436810540.6525824, - "isdir": false, - "ctime": 1436810540.6525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5235822, - "inode": 525142, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1876", - "xusr": false, - "atime": 1436810539.5235822, - "isdir": false, - "ctime": 1436810539.5235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5595822, - "inode": 527710, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4444", - "xusr": false, - "atime": 1436810541.5595822, - "isdir": false, - "ctime": 1436810541.5595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5485823, - "inode": 525168, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1902", - "xusr": false, - "atime": 1436810539.5485823, - "isdir": false, - "ctime": 1436810539.5485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5915823, - "inode": 526413, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3147", - "xusr": false, - "atime": 1436810540.5915823, - "isdir": false, - "ctime": 1436810540.5915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4485824, - "inode": 523755, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/489", - "xusr": false, - "atime": 1436810538.4485824, - "isdir": false, - "ctime": 1436810538.4485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8015823, - "inode": 528044, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4778", - "xusr": false, - "atime": 1436810541.8015823, - "isdir": false, - "ctime": 1436810541.8015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7125823, - "inode": 527921, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4655", - "xusr": false, - "atime": 1436810541.7125823, - "isdir": false, - "ctime": 1436810541.7125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5625823, - "inode": 526372, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3106", - "xusr": false, - "atime": 1436810540.5625823, - "isdir": false, - "ctime": 1436810540.5625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9695823, - "inode": 524458, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1192", - "xusr": false, - "atime": 1436810538.9695823, - "isdir": false, - "ctime": 1436810538.9695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4525824, - "inode": 527563, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4297", - "xusr": false, - "atime": 1436810541.4525824, - "isdir": false, - "ctime": 1436810541.4525824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8285823, - "inode": 525491, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2225", - "xusr": false, - "atime": 1436810539.8285823, - "isdir": false, - "ctime": 1436810539.8285823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7955823, - "inode": 525447, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2181", - "xusr": false, - "atime": 1436810539.7955823, - "isdir": false, - "ctime": 1436810539.7955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5825822, - "inode": 523939, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/673", - "xusr": false, - "atime": 1436810538.5825822, - "isdir": false, - "ctime": 1436810538.5825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2085824, - "inode": 523470, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/204", - "xusr": false, - "atime": 1436810538.2085824, - "isdir": false, - "ctime": 1436810538.2085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8195822, - "inode": 526733, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3467", - "xusr": false, - "atime": 1436810540.8195822, - "isdir": false, - "ctime": 1436810540.8195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3445823, - "inode": 523642, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/376", - "xusr": false, - "atime": 1436810538.3445823, - "isdir": false, - "ctime": 1436810538.3445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0585823, - "inode": 524583, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1317", - "xusr": false, - "atime": 1436810539.0585823, - "isdir": false, - "ctime": 1436810539.0585823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7065823, - "inode": 525343, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2077", - "xusr": false, - "atime": 1436810539.7065823, - "isdir": false, - "ctime": 1436810539.7065823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2935822, - "inode": 524920, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1654", - "xusr": false, - "atime": 1436810539.2935822, - "isdir": false, - "ctime": 1436810539.2935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7365823, - "inode": 525373, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2107", - "xusr": false, - "atime": 1436810539.7365823, - "isdir": false, - "ctime": 1436810539.7365823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3165822, - "inode": 524948, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1682", - "xusr": false, - "atime": 1436810539.3165822, - "isdir": false, - "ctime": 1436810539.3165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1285822, - "inode": 524683, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1417", - "xusr": false, - "atime": 1436810539.1285822, - "isdir": false, - "ctime": 1436810539.1285822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6765823, - "inode": 527871, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4605", - "xusr": false, - "atime": 1436810541.6765823, - "isdir": false, - "ctime": 1436810541.6765823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2235823, - "inode": 525967, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2701", - "xusr": false, - "atime": 1436810540.2235823, - "isdir": false, - "ctime": 1436810540.2235823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7725823, - "inode": 524192, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/926", - "xusr": false, - "atime": 1436810538.7725823, - "isdir": false, - "ctime": 1436810538.7725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5605824, - "inode": 525182, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1916", - "xusr": false, - "atime": 1436810539.5605824, - "isdir": false, - "ctime": 1436810539.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8225822, - "inode": 528072, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4806", - "xusr": false, - "atime": 1436810541.8225822, - "isdir": false, - "ctime": 1436810541.8225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5605824, - "inode": 523910, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/644", - "xusr": false, - "atime": 1436810538.5605824, - "isdir": false, - "ctime": 1436810538.5605824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3065822, - "inode": 527405, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4139", - "xusr": false, - "atime": 1436810541.3065822, - "isdir": false, - "ctime": 1436810541.3065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7715824, - "inode": 526664, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3398", - "xusr": false, - "atime": 1436810540.7715824, - "isdir": false, - "ctime": 1436810540.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3485823, - "inode": 527448, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4182", - "xusr": false, - "atime": 1436810541.3485823, - "isdir": false, - "ctime": 1436810541.3485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9825823, - "inode": 525704, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2438", - "xusr": false, - "atime": 1436810539.9825823, - "isdir": false, - "ctime": 1436810539.9825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8295822, - "inode": 524267, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1001", - "xusr": false, - "atime": 1436810538.8295822, - "isdir": false, - "ctime": 1436810538.8295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1835823, - "inode": 524762, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1496", - "xusr": false, - "atime": 1436810539.1835823, - "isdir": false, - "ctime": 1436810539.1835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7285824, - "inode": 524135, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/869", - "xusr": false, - "atime": 1436810538.7285824, - "isdir": false, - "ctime": 1436810538.7285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9615824, - "inode": 526932, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3666", - "xusr": false, - "atime": 1436810540.9615824, - "isdir": false, - "ctime": 1436810540.9615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3635824, - "inode": 527458, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4192", - "xusr": false, - "atime": 1436810541.3635824, - "isdir": false, - "ctime": 1436810541.3635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5945823, - "inode": 526417, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3151", - "xusr": false, - "atime": 1436810540.5945823, - "isdir": false, - "ctime": 1436810540.5945823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9625823, - "inode": 528266, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/5000", - "xusr": false, - "atime": 1436810541.9625823, - "isdir": false, - "ctime": 1436810541.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2315824, - "inode": 523501, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/235", - "xusr": false, - "atime": 1436810538.2315824, - "isdir": false, - "ctime": 1436810538.2315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9105823, - "inode": 528195, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4929", - "xusr": false, - "atime": 1436810541.9105823, - "isdir": false, - "ctime": 1436810541.9105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5955822, - "inode": 527761, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4495", - "xusr": false, - "atime": 1436810541.5955822, - "isdir": false, - "ctime": 1436810541.5955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0595822, - "inode": 527066, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3800", - "xusr": false, - "atime": 1436810541.0595822, - "isdir": false, - "ctime": 1436810541.0595822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7855823, - "inode": 524208, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/942", - "xusr": false, - "atime": 1436810538.7855823, - "isdir": false, - "ctime": 1436810538.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3045824, - "inode": 526058, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2792", - "xusr": false, - "atime": 1436810540.3045824, - "isdir": false, - "ctime": 1436810540.3045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7005823, - "inode": 527905, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4639", - "xusr": false, - "atime": 1436810541.7005823, - "isdir": false, - "ctime": 1436810541.7005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8695824, - "inode": 528137, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4871", - "xusr": false, - "atime": 1436810541.8695824, - "isdir": false, - "ctime": 1436810541.8695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1125822, - "inode": 527141, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3875", - "xusr": false, - "atime": 1436810541.1125822, - "isdir": false, - "ctime": 1436810541.1125822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2355824, - "inode": 525982, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2716", - "xusr": false, - "atime": 1436810540.2355824, - "isdir": false, - "ctime": 1436810540.2355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2895823, - "inode": 527384, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4118", - "xusr": false, - "atime": 1436810541.2895823, - "isdir": false, - "ctime": 1436810541.2895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4075823, - "inode": 526203, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2937", - "xusr": false, - "atime": 1436810540.4075823, - "isdir": false, - "ctime": 1436810540.4075823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5125823, - "inode": 525132, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1866", - "xusr": false, - "atime": 1436810539.5125823, - "isdir": false, - "ctime": 1436810539.5125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6995823, - "inode": 525334, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2068", - "xusr": false, - "atime": 1436810539.6995823, - "isdir": false, - "ctime": 1436810539.6995823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4615824, - "inode": 525078, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1812", - "xusr": false, - "atime": 1436810539.4615824, - "isdir": false, - "ctime": 1436810539.4615824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0345824, - "inode": 527031, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3765", - "xusr": false, - "atime": 1436810541.0345824, - "isdir": false, - "ctime": 1436810541.0345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6905823, - "inode": 527891, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4625", - "xusr": false, - "atime": 1436810541.6905823, - "isdir": false, - "ctime": 1436810541.6905823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9195824, - "inode": 524389, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1123", - "xusr": false, - "atime": 1436810538.9195824, - "isdir": false, - "ctime": 1436810538.9195824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0305824, - "inode": 527026, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3760", - "xusr": false, - "atime": 1436810541.0305824, - "isdir": false, - "ctime": 1436810541.0305824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9345822, - "inode": 526895, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3629", - "xusr": false, - "atime": 1436810540.9345822, - "isdir": false, - "ctime": 1436810540.9345822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8935823, - "inode": 528170, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4904", - "xusr": false, - "atime": 1436810541.8935823, - "isdir": false, - "ctime": 1436810541.8935823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8495822, - "inode": 528109, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4843", - "xusr": false, - "atime": 1436810541.8495822, - "isdir": false, - "ctime": 1436810541.8495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1155822, - "inode": 525856, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2590", - "xusr": false, - "atime": 1436810540.1155822, - "isdir": false, - "ctime": 1436810540.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3495822, - "inode": 523649, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/383", - "xusr": false, - "atime": 1436810538.3495822, - "isdir": false, - "ctime": 1436810538.3495822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9305823, - "inode": 525633, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2367", - "xusr": false, - "atime": 1436810539.9305823, - "isdir": false, - "ctime": 1436810539.9305823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8055823, - "inode": 525458, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2192", - "xusr": false, - "atime": 1436810539.8055823, - "isdir": false, - "ctime": 1436810539.8055823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5905824, - "inode": 526412, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3146", - "xusr": false, - "atime": 1436810540.5905824, - "isdir": false, - "ctime": 1436810540.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6885824, - "inode": 526548, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3282", - "xusr": false, - "atime": 1436810540.6885824, - "isdir": false, - "ctime": 1436810540.6885824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2695823, - "inode": 526017, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2751", - "xusr": false, - "atime": 1436810540.2695823, - "isdir": false, - "ctime": 1436810540.2695823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9625823, - "inode": 524447, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1181", - "xusr": false, - "atime": 1436810538.9625823, - "isdir": false, - "ctime": 1436810538.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9215822, - "inode": 525621, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2355", - "xusr": false, - "atime": 1436810539.9215822, - "isdir": false, - "ctime": 1436810539.9215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4865823, - "inode": 527610, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4344", - "xusr": false, - "atime": 1436810541.4865823, - "isdir": false, - "ctime": 1436810541.4865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2585824, - "inode": 523539, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/273", - "xusr": false, - "atime": 1436810538.2585824, - "isdir": false, - "ctime": 1436810538.2585824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7095823, - "inode": 526579, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3313", - "xusr": false, - "atime": 1436810540.7095823, - "isdir": false, - "ctime": 1436810540.7095823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7995822, - "inode": 525451, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2185", - "xusr": false, - "atime": 1436810539.7995822, - "isdir": false, - "ctime": 1436810539.7995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0665822, - "inode": 523271, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/5", - "xusr": false, - "atime": 1436810538.0665822, - "isdir": false, - "ctime": 1436810538.0665822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5435822, - "inode": 526347, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3081", - "xusr": false, - "atime": 1436810540.5435822, - "isdir": false, - "ctime": 1436810540.5435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3075824, - "inode": 526062, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2796", - "xusr": false, - "atime": 1436810540.3075824, - "isdir": false, - "ctime": 1436810540.3075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1535823, - "inode": 523390, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/124", - "xusr": false, - "atime": 1436810538.1535823, - "isdir": false, - "ctime": 1436810538.1535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7145822, - "inode": 524119, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/853", - "xusr": false, - "atime": 1436810538.7145822, - "isdir": false, - "ctime": 1436810538.7145822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3165822, - "inode": 526075, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2809", - "xusr": false, - "atime": 1436810540.3165822, - "isdir": false, - "ctime": 1436810540.3165822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7085824, - "inode": 524111, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/845", - "xusr": false, - "atime": 1436810538.7085824, - "isdir": false, - "ctime": 1436810538.7085824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9035823, - "inode": 528185, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4919", - "xusr": false, - "atime": 1436810541.9035823, - "isdir": false, - "ctime": 1436810541.9035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6535823, - "inode": 526499, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3233", - "xusr": false, - "atime": 1436810540.6535823, - "isdir": false, - "ctime": 1436810540.6535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3315823, - "inode": 526096, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2830", - "xusr": false, - "atime": 1436810540.3315823, - "isdir": false, - "ctime": 1436810540.3315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6185822, - "inode": 526450, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3184", - "xusr": false, - "atime": 1436810540.6185822, - "isdir": false, - "ctime": 1436810540.6185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3465824, - "inode": 524977, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1711", - "xusr": false, - "atime": 1436810539.3465824, - "isdir": false, - "ctime": 1436810539.3465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9855824, - "inode": 526967, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3701", - "xusr": false, - "atime": 1436810540.9855824, - "isdir": false, - "ctime": 1436810540.9855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5795822, - "inode": 525205, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1939", - "xusr": false, - "atime": 1436810539.5795822, - "isdir": false, - "ctime": 1436810539.5795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2865822, - "inode": 524910, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1644", - "xusr": false, - "atime": 1436810539.2865822, - "isdir": false, - "ctime": 1436810539.2865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1185822, - "inode": 523341, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/75", - "xusr": false, - "atime": 1436810538.1185822, - "isdir": false, - "ctime": 1436810538.1185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7645824, - "inode": 527993, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4727", - "xusr": false, - "atime": 1436810541.7645824, - "isdir": false, - "ctime": 1436810541.7645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6505823, - "inode": 526494, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3228", - "xusr": false, - "atime": 1436810540.6505823, - "isdir": false, - "ctime": 1436810540.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3315823, - "inode": 527430, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4164", - "xusr": false, - "atime": 1436810541.3315823, - "isdir": false, - "ctime": 1436810541.3315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7725823, - "inode": 525417, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2151", - "xusr": false, - "atime": 1436810539.7725823, - "isdir": false, - "ctime": 1436810539.7725823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0975823, - "inode": 524639, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1373", - "xusr": false, - "atime": 1436810539.0975823, - "isdir": false, - "ctime": 1436810539.0975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1445823, - "inode": 524706, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1440", - "xusr": false, - "atime": 1436810539.1445823, - "isdir": false, - "ctime": 1436810539.1445823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9915824, - "inode": 524488, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1222", - "xusr": false, - "atime": 1436810538.9915824, - "isdir": false, - "ctime": 1436810538.9915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8685822, - "inode": 525547, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2281", - "xusr": false, - "atime": 1436810539.8685822, - "isdir": false, - "ctime": 1436810539.8685822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8975823, - "inode": 526842, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3576", - "xusr": false, - "atime": 1436810540.8975823, - "isdir": false, - "ctime": 1436810540.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9045823, - "inode": 524368, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1102", - "xusr": false, - "atime": 1436810538.9045823, - "isdir": false, - "ctime": 1436810538.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0315824, - "inode": 527027, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3761", - "xusr": false, - "atime": 1436810541.0315824, - "isdir": false, - "ctime": 1436810541.0315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4425824, - "inode": 527549, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4283", - "xusr": false, - "atime": 1436810541.4425824, - "isdir": false, - "ctime": 1436810541.4425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1945822, - "inode": 524777, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1511", - "xusr": false, - "atime": 1436810539.1945822, - "isdir": false, - "ctime": 1436810539.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8115823, - "inode": 528058, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4792", - "xusr": false, - "atime": 1436810541.8115823, - "isdir": false, - "ctime": 1436810541.8115823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1045823, - "inode": 524648, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1382", - "xusr": false, - "atime": 1436810539.1045823, - "isdir": false, - "ctime": 1436810539.1045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5655823, - "inode": 525189, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1923", - "xusr": false, - "atime": 1436810539.5655823, - "isdir": false, - "ctime": 1436810539.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1795824, - "inode": 527230, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3964", - "xusr": false, - "atime": 1436810541.1795824, - "isdir": false, - "ctime": 1436810541.1795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4915824, - "inode": 527618, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4352", - "xusr": false, - "atime": 1436810541.4915824, - "isdir": false, - "ctime": 1436810541.4915824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8185823, - "inode": 524252, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/986", - "xusr": false, - "atime": 1436810538.8185823, - "isdir": false, - "ctime": 1436810538.8185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8395822, - "inode": 528096, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4830", - "xusr": false, - "atime": 1436810541.8395822, - "isdir": false, - "ctime": 1436810541.8395822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1975822, - "inode": 524782, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1516", - "xusr": false, - "atime": 1436810539.1975822, - "isdir": false, - "ctime": 1436810539.1975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3155823, - "inode": 526074, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2808", - "xusr": false, - "atime": 1436810540.3155823, - "isdir": false, - "ctime": 1436810540.3155823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3895824, - "inode": 525016, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1750", - "xusr": false, - "atime": 1436810539.3895824, - "isdir": false, - "ctime": 1436810539.3895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1315823, - "inode": 527166, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3900", - "xusr": false, - "atime": 1436810541.1315823, - "isdir": false, - "ctime": 1436810541.1315823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3805823, - "inode": 523674, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/408", - "xusr": false, - "atime": 1436810538.3805823, - "isdir": false, - "ctime": 1436810538.3805823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6335824, - "inode": 527814, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4548", - "xusr": false, - "atime": 1436810541.6335824, - "isdir": false, - "ctime": 1436810541.6335824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2685823, - "inode": 523553, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/287", - "xusr": false, - "atime": 1436810538.2685823, - "isdir": false, - "ctime": 1436810538.2685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1625824, - "inode": 524732, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1466", - "xusr": false, - "atime": 1436810539.1625824, - "isdir": false, - "ctime": 1436810539.1625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4905822, - "inode": 527616, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4350", - "xusr": false, - "atime": 1436810541.4905822, - "isdir": false, - "ctime": 1436810541.4905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4925823, - "inode": 525113, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1847", - "xusr": false, - "atime": 1436810539.4925823, - "isdir": false, - "ctime": 1436810539.4925823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5405824, - "inode": 527684, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4418", - "xusr": false, - "atime": 1436810541.5405824, - "isdir": false, - "ctime": 1436810541.5405824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5225823, - "inode": 523858, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/592", - "xusr": false, - "atime": 1436810538.5225823, - "isdir": false, - "ctime": 1436810538.5225823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0165823, - "inode": 525751, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2485", - "xusr": false, - "atime": 1436810540.0165823, - "isdir": false, - "ctime": 1436810540.0165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6695824, - "inode": 525306, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2040", - "xusr": false, - "atime": 1436810539.6695824, - "isdir": false, - "ctime": 1436810539.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2105823, - "inode": 524800, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1534", - "xusr": false, - "atime": 1436810539.2105823, - "isdir": false, - "ctime": 1436810539.2105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8235824, - "inode": 524258, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/992", - "xusr": false, - "atime": 1436810538.8235824, - "isdir": false, - "ctime": 1436810538.8235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2555823, - "inode": 524865, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1599", - "xusr": false, - "atime": 1436810539.2555823, - "isdir": false, - "ctime": 1436810539.2555823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6505823, - "inode": 525287, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2021", - "xusr": false, - "atime": 1436810539.6505823, - "isdir": false, - "ctime": 1436810539.6505823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7485824, - "inode": 526633, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3367", - "xusr": false, - "atime": 1436810540.7485824, - "isdir": false, - "ctime": 1436810540.7485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1795824, - "inode": 523428, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/162", - "xusr": false, - "atime": 1436810538.1795824, - "isdir": false, - "ctime": 1436810538.1795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4145823, - "inode": 527512, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4246", - "xusr": false, - "atime": 1436810541.4145823, - "isdir": false, - "ctime": 1436810541.4145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2055824, - "inode": 524794, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1528", - "xusr": false, - "atime": 1436810539.2055824, - "isdir": false, - "ctime": 1436810539.2055824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5635824, - "inode": 526374, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3108", - "xusr": false, - "atime": 1436810540.5635824, - "isdir": false, - "ctime": 1436810540.5635824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2475822, - "inode": 525994, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2728", - "xusr": false, - "atime": 1436810540.2475822, - "isdir": false, - "ctime": 1436810540.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8745823, - "inode": 528144, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4878", - "xusr": false, - "atime": 1436810541.8745823, - "isdir": false, - "ctime": 1436810541.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7045822, - "inode": 524107, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/841", - "xusr": false, - "atime": 1436810538.7045822, - "isdir": false, - "ctime": 1436810538.7045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9065824, - "inode": 528188, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4922", - "xusr": false, - "atime": 1436810541.9065824, - "isdir": false, - "ctime": 1436810541.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2795823, - "inode": 524900, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1634", - "xusr": false, - "atime": 1436810539.2795823, - "isdir": false, - "ctime": 1436810539.2795823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5655823, - "inode": 527719, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4453", - "xusr": false, - "atime": 1436810541.5655823, - "isdir": false, - "ctime": 1436810541.5655823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9625823, - "inode": 526934, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3668", - "xusr": false, - "atime": 1436810540.9625823, - "isdir": false, - "ctime": 1436810540.9625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7855823, - "inode": 525436, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2170", - "xusr": false, - "atime": 1436810539.7855823, - "isdir": false, - "ctime": 1436810539.7855823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0815823, - "inode": 524615, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1349", - "xusr": false, - "atime": 1436810539.0815823, - "isdir": false, - "ctime": 1436810539.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2125823, - "inode": 523475, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/209", - "xusr": false, - "atime": 1436810538.2125823, - "isdir": false, - "ctime": 1436810538.2125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4105823, - "inode": 526207, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2941", - "xusr": false, - "atime": 1436810540.4105823, - "isdir": false, - "ctime": 1436810540.4105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1425824, - "inode": 524703, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1437", - "xusr": false, - "atime": 1436810539.1425824, - "isdir": false, - "ctime": 1436810539.1425824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4775822, - "inode": 526280, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3014", - "xusr": false, - "atime": 1436810540.4775822, - "isdir": false, - "ctime": 1436810540.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4465823, - "inode": 526251, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2985", - "xusr": false, - "atime": 1436810540.4465823, - "isdir": false, - "ctime": 1436810540.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3765824, - "inode": 523668, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/402", - "xusr": false, - "atime": 1436810538.3765824, - "isdir": false, - "ctime": 1436810538.3765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8485823, - "inode": 525519, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2253", - "xusr": false, - "atime": 1436810539.8485823, - "isdir": false, - "ctime": 1436810539.8485823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1865823, - "inode": 527239, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3973", - "xusr": false, - "atime": 1436810541.1865823, - "isdir": false, - "ctime": 1436810541.1865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6395824, - "inode": 527821, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4555", - "xusr": false, - "atime": 1436810541.6395824, - "isdir": false, - "ctime": 1436810541.6395824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2685823, - "inode": 523554, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/288", - "xusr": false, - "atime": 1436810538.2685823, - "isdir": false, - "ctime": 1436810538.2685823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1295824, - "inode": 527163, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3897", - "xusr": false, - "atime": 1436810541.1295824, - "isdir": false, - "ctime": 1436810541.1295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4775822, - "inode": 523796, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/530", - "xusr": false, - "atime": 1436810538.4775822, - "isdir": false, - "ctime": 1436810538.4775822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0705824, - "inode": 527082, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3816", - "xusr": false, - "atime": 1436810541.0705824, - "isdir": false, - "ctime": 1436810541.0705824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5315824, - "inode": 526330, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3064", - "xusr": false, - "atime": 1436810540.5315824, - "isdir": false, - "ctime": 1436810540.5315824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4535823, - "inode": 526260, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2994", - "xusr": false, - "atime": 1436810540.4535823, - "isdir": false, - "ctime": 1436810540.4535823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8705823, - "inode": 525550, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2284", - "xusr": false, - "atime": 1436810539.8705823, - "isdir": false, - "ctime": 1436810539.8705823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8065822, - "inode": 525460, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2194", - "xusr": false, - "atime": 1436810539.8065822, - "isdir": false, - "ctime": 1436810539.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0775824, - "inode": 525821, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2555", - "xusr": false, - "atime": 1436810540.0775824, - "isdir": false, - "ctime": 1436810540.0775824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8775823, - "inode": 528148, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4882", - "xusr": false, - "atime": 1436810541.8775823, - "isdir": false, - "ctime": 1436810541.8775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4115822, - "inode": 525037, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1771", - "xusr": false, - "atime": 1436810539.4115822, - "isdir": false, - "ctime": 1436810539.4115822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9595823, - "inode": 525672, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2406", - "xusr": false, - "atime": 1436810539.9595823, - "isdir": false, - "ctime": 1436810539.9595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7175822, - "inode": 525354, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2088", - "xusr": false, - "atime": 1436810539.7175822, - "isdir": false, - "ctime": 1436810539.7175822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6465824, - "inode": 525284, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2018", - "xusr": false, - "atime": 1436810539.6465824, - "isdir": false, - "ctime": 1436810539.6465824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1165824, - "inode": 525857, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2591", - "xusr": false, - "atime": 1436810540.1165824, - "isdir": false, - "ctime": 1436810540.1165824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6665823, - "inode": 527858, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4592", - "xusr": false, - "atime": 1436810541.6665823, - "isdir": false, - "ctime": 1436810541.6665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6325824, - "inode": 526470, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3204", - "xusr": false, - "atime": 1436810540.6325824, - "isdir": false, - "ctime": 1436810540.6325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3125823, - "inode": 523612, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/346", - "xusr": false, - "atime": 1436810538.3125823, - "isdir": false, - "ctime": 1436810538.3125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2825823, - "inode": 526033, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2767", - "xusr": false, - "atime": 1436810540.2825823, - "isdir": false, - "ctime": 1436810540.2825823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7965822, - "inode": 524222, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/956", - "xusr": false, - "atime": 1436810538.7965822, - "isdir": false, - "ctime": 1436810538.7965822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6545823, - "inode": 526501, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3235", - "xusr": false, - "atime": 1436810540.6545823, - "isdir": false, - "ctime": 1436810540.6545823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4595823, - "inode": 527572, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4306", - "xusr": false, - "atime": 1436810541.4595823, - "isdir": false, - "ctime": 1436810541.4595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7425823, - "inode": 527963, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4697", - "xusr": false, - "atime": 1436810541.7425823, - "isdir": false, - "ctime": 1436810541.7425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6865823, - "inode": 527886, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4620", - "xusr": false, - "atime": 1436810541.6865823, - "isdir": false, - "ctime": 1436810541.6865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8875823, - "inode": 524344, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1078", - "xusr": false, - "atime": 1436810538.8875823, - "isdir": false, - "ctime": 1436810538.8875823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4415822, - "inode": 527548, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4282", - "xusr": false, - "atime": 1436810541.4415822, - "isdir": false, - "ctime": 1436810541.4415822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1715822, - "inode": 524745, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1479", - "xusr": false, - "atime": 1436810539.1715822, - "isdir": false, - "ctime": 1436810539.1715822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.3615823, - "inode": 523655, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/389", - "xusr": false, - "atime": 1436810538.3615823, - "isdir": false, - "ctime": 1436810538.3615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0845823, - "inode": 523297, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/31", - "xusr": false, - "atime": 1436810538.0845823, - "isdir": false, - "ctime": 1436810538.0845823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2185824, - "inode": 524813, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1547", - "xusr": false, - "atime": 1436810539.2185824, - "isdir": false, - "ctime": 1436810539.2185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4295824, - "inode": 526233, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2967", - "xusr": false, - "atime": 1436810540.4295824, - "isdir": false, - "ctime": 1436810540.4295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8525822, - "inode": 524297, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1031", - "xusr": false, - "atime": 1436810538.8525822, - "isdir": false, - "ctime": 1436810538.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8505824, - "inode": 526775, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3509", - "xusr": false, - "atime": 1436810540.8505824, - "isdir": false, - "ctime": 1436810540.8505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6295824, - "inode": 526466, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3200", - "xusr": false, - "atime": 1436810540.6295824, - "isdir": false, - "ctime": 1436810540.6295824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6215823, - "inode": 527798, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4532", - "xusr": false, - "atime": 1436810541.6215823, - "isdir": false, - "ctime": 1436810541.6215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1515822, - "inode": 527194, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3928", - "xusr": false, - "atime": 1436810541.1515822, - "isdir": false, - "ctime": 1436810541.1515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0975823, - "inode": 527120, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3854", - "xusr": false, - "atime": 1436810541.0975823, - "isdir": false, - "ctime": 1436810541.0975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4715824, - "inode": 523787, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/521", - "xusr": false, - "atime": 1436810538.4715824, - "isdir": false, - "ctime": 1436810538.4715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0885823, - "inode": 527107, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3841", - "xusr": false, - "atime": 1436810541.0885823, - "isdir": false, - "ctime": 1436810541.0885823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0795822, - "inode": 527094, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3828", - "xusr": false, - "atime": 1436810541.0795822, - "isdir": false, - "ctime": 1436810541.0795822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3895824, - "inode": 527480, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4214", - "xusr": false, - "atime": 1436810541.3895824, - "isdir": false, - "ctime": 1436810541.3895824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4905822, - "inode": 523814, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/548", - "xusr": false, - "atime": 1436810538.4905822, - "isdir": false, - "ctime": 1436810538.4905822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9945824, - "inode": 526977, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3711", - "xusr": false, - "atime": 1436810540.9945824, - "isdir": false, - "ctime": 1436810540.9945824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2935822, - "inode": 523590, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/324", - "xusr": false, - "atime": 1436810538.2935822, - "isdir": false, - "ctime": 1436810538.2935822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9005823, - "inode": 528181, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4915", - "xusr": false, - "atime": 1436810541.9005823, - "isdir": false, - "ctime": 1436810541.9005823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9785824, - "inode": 524470, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1204", - "xusr": false, - "atime": 1436810538.9785824, - "isdir": false, - "ctime": 1436810538.9785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4015822, - "inode": 523698, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/432", - "xusr": false, - "atime": 1436810538.4015822, - "isdir": false, - "ctime": 1436810538.4015822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8955822, - "inode": 525586, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2320", - "xusr": false, - "atime": 1436810539.8955822, - "isdir": false, - "ctime": 1436810539.8955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0125823, - "inode": 525746, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2480", - "xusr": false, - "atime": 1436810540.0125823, - "isdir": false, - "ctime": 1436810540.0125823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1585822, - "inode": 524726, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1460", - "xusr": false, - "atime": 1436810539.1585822, - "isdir": false, - "ctime": 1436810539.1585822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4105823, - "inode": 527506, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4240", - "xusr": false, - "atime": 1436810541.4105823, - "isdir": false, - "ctime": 1436810541.4105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6095824, - "inode": 523977, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/711", - "xusr": false, - "atime": 1436810538.6095824, - "isdir": false, - "ctime": 1436810538.6095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6835823, - "inode": 527881, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4615", - "xusr": false, - "atime": 1436810541.6835823, - "isdir": false, - "ctime": 1436810541.6835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1325824, - "inode": 523360, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/94", - "xusr": false, - "atime": 1436810538.1325824, - "isdir": false, - "ctime": 1436810538.1325824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9375823, - "inode": 525643, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2377", - "xusr": false, - "atime": 1436810539.9375823, - "isdir": false, - "ctime": 1436810539.9375823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1605823, - "inode": 523400, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/134", - "xusr": false, - "atime": 1436810538.1605823, - "isdir": false, - "ctime": 1436810538.1605823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8715823, - "inode": 528140, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4874", - "xusr": false, - "atime": 1436810541.8715823, - "isdir": false, - "ctime": 1436810541.8715823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5045824, - "inode": 525125, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1859", - "xusr": false, - "atime": 1436810539.5045824, - "isdir": false, - "ctime": 1436810539.5045824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8515823, - "inode": 528111, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4845", - "xusr": false, - "atime": 1436810541.8515823, - "isdir": false, - "ctime": 1436810541.8515823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6345823, - "inode": 527815, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4549", - "xusr": false, - "atime": 1436810541.6345823, - "isdir": false, - "ctime": 1436810541.6345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7255824, - "inode": 524131, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/865", - "xusr": false, - "atime": 1436810538.7255824, - "isdir": false, - "ctime": 1436810538.7255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6065824, - "inode": 526435, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3169", - "xusr": false, - "atime": 1436810540.6065824, - "isdir": false, - "ctime": 1436810540.6065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6635823, - "inode": 525301, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2035", - "xusr": false, - "atime": 1436810539.6635823, - "isdir": false, - "ctime": 1436810539.6635823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5425823, - "inode": 523885, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/619", - "xusr": false, - "atime": 1436810538.5425823, - "isdir": false, - "ctime": 1436810538.5425823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9975822, - "inode": 524496, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1230", - "xusr": false, - "atime": 1436810538.9975822, - "isdir": false, - "ctime": 1436810538.9975822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7185824, - "inode": 526591, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3325", - "xusr": false, - "atime": 1436810540.7185824, - "isdir": false, - "ctime": 1436810540.7185824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4125824, - "inode": 525039, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1773", - "xusr": false, - "atime": 1436810539.4125824, - "isdir": false, - "ctime": 1436810539.4125824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8215823, - "inode": 524256, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/990", - "xusr": false, - "atime": 1436810538.8215823, - "isdir": false, - "ctime": 1436810538.8215823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6925824, - "inode": 524090, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/824", - "xusr": false, - "atime": 1436810538.6925824, - "isdir": false, - "ctime": 1436810538.6925824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6595824, - "inode": 526507, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3241", - "xusr": false, - "atime": 1436810540.6595824, - "isdir": false, - "ctime": 1436810540.6595824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9815824, - "inode": 525703, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2437", - "xusr": false, - "atime": 1436810539.9815824, - "isdir": false, - "ctime": 1436810539.9815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7435822, - "inode": 524155, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/889", - "xusr": false, - "atime": 1436810538.7435822, - "isdir": false, - "ctime": 1436810538.7435822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7395823, - "inode": 525377, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2111", - "xusr": false, - "atime": 1436810539.7395823, - "isdir": false, - "ctime": 1436810539.7395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5375824, - "inode": 526339, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3073", - "xusr": false, - "atime": 1436810540.5375824, - "isdir": false, - "ctime": 1436810540.5375824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6735823, - "inode": 526527, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3261", - "xusr": false, - "atime": 1436810540.6735823, - "isdir": false, - "ctime": 1436810540.6735823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0825822, - "inode": 523294, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/28", - "xusr": false, - "atime": 1436810538.0825822, - "isdir": false, - "ctime": 1436810538.0825822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7865822, - "inode": 528023, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4757", - "xusr": false, - "atime": 1436810541.7865822, - "isdir": false, - "ctime": 1436810541.7865822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.4275823, - "inode": 525059, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1793", - "xusr": false, - "atime": 1436810539.4275823, - "isdir": false, - "ctime": 1436810539.4275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6235824, - "inode": 526457, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3191", - "xusr": false, - "atime": 1436810540.6235824, - "isdir": false, - "ctime": 1436810540.6235824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1565824, - "inode": 527201, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3935", - "xusr": false, - "atime": 1436810541.1565824, - "isdir": false, - "ctime": 1436810541.1565824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0745823, - "inode": 524606, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1340", - "xusr": false, - "atime": 1436810539.0745823, - "isdir": false, - "ctime": 1436810539.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7515824, - "inode": 524165, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/899", - "xusr": false, - "atime": 1436810538.7515824, - "isdir": false, - "ctime": 1436810538.7515824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1095824, - "inode": 525851, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2585", - "xusr": false, - "atime": 1436810540.1095824, - "isdir": false, - "ctime": 1436810540.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1095824, - "inode": 527137, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3871", - "xusr": false, - "atime": 1436810541.1095824, - "isdir": false, - "ctime": 1436810541.1095824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3795824, - "inode": 527471, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4205", - "xusr": false, - "atime": 1436810541.3795824, - "isdir": false, - "ctime": 1436810541.3795824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3295822, - "inode": 527427, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4161", - "xusr": false, - "atime": 1436810541.3295822, - "isdir": false, - "ctime": 1436810541.3295822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5255823, - "inode": 525145, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1879", - "xusr": false, - "atime": 1436810539.5255823, - "isdir": false, - "ctime": 1436810539.5255823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5185823, - "inode": 527654, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4388", - "xusr": false, - "atime": 1436810541.5185823, - "isdir": false, - "ctime": 1436810541.5185823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.8815823, - "inode": 525566, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2300", - "xusr": false, - "atime": 1436810539.8815823, - "isdir": false, - "ctime": 1436810539.8815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9035823, - "inode": 525597, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2331", - "xusr": false, - "atime": 1436810539.9035823, - "isdir": false, - "ctime": 1436810539.9035823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1225822, - "inode": 524675, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1409", - "xusr": false, - "atime": 1436810539.1225822, - "isdir": false, - "ctime": 1436810539.1225822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9285824, - "inode": 524401, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1135", - "xusr": false, - "atime": 1436810538.9285824, - "isdir": false, - "ctime": 1436810538.9285824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4405823, - "inode": 523744, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/478", - "xusr": false, - "atime": 1436810538.4405823, - "isdir": false, - "ctime": 1436810538.4405823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6985824, - "inode": 525333, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2067", - "xusr": false, - "atime": 1436810539.6985824, - "isdir": false, - "ctime": 1436810539.6985824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4665823, - "inode": 526271, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3005", - "xusr": false, - "atime": 1436810540.4665823, - "isdir": false, - "ctime": 1436810540.4665823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2645824, - "inode": 524879, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1613", - "xusr": false, - "atime": 1436810539.2645824, - "isdir": false, - "ctime": 1436810539.2645824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1515822, - "inode": 524716, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1450", - "xusr": false, - "atime": 1436810539.1515822, - "isdir": false, - "ctime": 1436810539.1515822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2335823, - "inode": 527305, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4039", - "xusr": false, - "atime": 1436810541.2335823, - "isdir": false, - "ctime": 1436810541.2335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5535824, - "inode": 526360, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3094", - "xusr": false, - "atime": 1436810540.5535824, - "isdir": false, - "ctime": 1436810540.5535824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5455823, - "inode": 527691, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4425", - "xusr": false, - "atime": 1436810541.5455823, - "isdir": false, - "ctime": 1436810541.5455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2345824, - "inode": 525981, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2715", - "xusr": false, - "atime": 1436810540.2345824, - "isdir": false, - "ctime": 1436810540.2345824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1085823, - "inode": 524654, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1388", - "xusr": false, - "atime": 1436810539.1085823, - "isdir": false, - "ctime": 1436810539.1085823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.1105824, - "inode": 523329, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/63", - "xusr": false, - "atime": 1436810538.1105824, - "isdir": false, - "ctime": 1436810538.1105824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1345823, - "inode": 525874, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2608", - "xusr": false, - "atime": 1436810540.1345823, - "isdir": false, - "ctime": 1436810540.1345823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9045823, - "inode": 525598, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2332", - "xusr": false, - "atime": 1436810539.9045823, - "isdir": false, - "ctime": 1436810539.9045823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8525822, - "inode": 526779, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3513", - "xusr": false, - "atime": 1436810540.8525822, - "isdir": false, - "ctime": 1436810540.8525822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6015823, - "inode": 525226, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1960", - "xusr": false, - "atime": 1436810539.6015823, - "isdir": false, - "ctime": 1436810539.6015823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5475824, - "inode": 523892, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/626", - "xusr": false, - "atime": 1436810538.5475824, - "isdir": false, - "ctime": 1436810538.5475824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4175823, - "inode": 526217, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2951", - "xusr": false, - "atime": 1436810540.4175823, - "isdir": false, - "ctime": 1436810540.4175823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.7105823, - "inode": 525346, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2080", - "xusr": false, - "atime": 1436810539.7105823, - "isdir": false, - "ctime": 1436810539.7105823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4785824, - "inode": 526282, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3016", - "xusr": false, - "atime": 1436810540.4785824, - "isdir": false, - "ctime": 1436810540.4785824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2485824, - "inode": 524855, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1589", - "xusr": false, - "atime": 1436810539.2485824, - "isdir": false, - "ctime": 1436810539.2485824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6895823, - "inode": 527890, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4624", - "xusr": false, - "atime": 1436810541.6895823, - "isdir": false, - "ctime": 1436810541.6895823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1955824, - "inode": 524779, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1513", - "xusr": false, - "atime": 1436810539.1955824, - "isdir": false, - "ctime": 1436810539.1955824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3265822, - "inode": 527423, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4157", - "xusr": false, - "atime": 1436810541.3265822, - "isdir": false, - "ctime": 1436810541.3265822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2455823, - "inode": 525992, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2726", - "xusr": false, - "atime": 1436810540.2455823, - "isdir": false, - "ctime": 1436810540.2455823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0525823, - "inode": 527057, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3791", - "xusr": false, - "atime": 1436810541.0525823, - "isdir": false, - "ctime": 1436810541.0525823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1185822, - "inode": 527150, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3884", - "xusr": false, - "atime": 1436810541.1185822, - "isdir": false, - "ctime": 1436810541.1185822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3955822, - "inode": 525020, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1754", - "xusr": false, - "atime": 1436810539.3955822, - "isdir": false, - "ctime": 1436810539.3955822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9275823, - "inode": 524400, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1134", - "xusr": false, - "atime": 1436810538.9275823, - "isdir": false, - "ctime": 1436810538.9275823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.5505824, - "inode": 527698, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4432", - "xusr": false, - "atime": 1436810541.5505824, - "isdir": false, - "ctime": 1436810541.5505824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1485822, - "inode": 527190, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3924", - "xusr": false, - "atime": 1436810541.1485822, - "isdir": false, - "ctime": 1436810541.1485822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1865823, - "inode": 524766, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1500", - "xusr": false, - "atime": 1436810539.1865823, - "isdir": false, - "ctime": 1436810539.1865823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9245822, - "inode": 528214, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4948", - "xusr": false, - "atime": 1436810541.9245822, - "isdir": false, - "ctime": 1436810541.9245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.6775823, - "inode": 524069, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/803", - "xusr": false, - "atime": 1436810538.6775823, - "isdir": false, - "ctime": 1436810538.6775823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2875824, - "inode": 526037, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2771", - "xusr": false, - "atime": 1436810540.2875824, - "isdir": false, - "ctime": 1436810540.2875824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2625823, - "inode": 527345, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4079", - "xusr": false, - "atime": 1436810541.2625823, - "isdir": false, - "ctime": 1436810541.2625823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8755822, - "inode": 526811, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3545", - "xusr": false, - "atime": 1436810540.8755822, - "isdir": false, - "ctime": 1436810540.8755822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8135824, - "inode": 524245, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/979", - "xusr": false, - "atime": 1436810538.8135824, - "isdir": false, - "ctime": 1436810538.8135824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.0745823, - "inode": 523283, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/17", - "xusr": false, - "atime": 1436810538.0745823, - "isdir": false, - "ctime": 1436810538.0745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1855824, - "inode": 527238, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3972", - "xusr": false, - "atime": 1436810541.1855824, - "isdir": false, - "ctime": 1436810541.1855824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2635822, - "inode": 523546, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/280", - "xusr": false, - "atime": 1436810538.2635822, - "isdir": false, - "ctime": 1436810538.2635822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2475822, - "inode": 527325, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4059", - "xusr": false, - "atime": 1436810541.2475822, - "isdir": false, - "ctime": 1436810541.2475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7715824, - "inode": 526665, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3399", - "xusr": false, - "atime": 1436810540.7715824, - "isdir": false, - "ctime": 1436810540.7715824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4335823, - "inode": 523734, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/468", - "xusr": false, - "atime": 1436810538.4335823, - "isdir": false, - "ctime": 1436810538.4335823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4815824, - "inode": 527604, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4338", - "xusr": false, - "atime": 1436810541.4815824, - "isdir": false, - "ctime": 1436810541.4815824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4315822, - "inode": 523732, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/466", - "xusr": false, - "atime": 1436810538.4315822, - "isdir": false, - "ctime": 1436810538.4315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7265823, - "inode": 527941, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4675", - "xusr": false, - "atime": 1436810541.7265823, - "isdir": false, - "ctime": 1436810541.7265823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.1255822, - "inode": 524678, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1412", - "xusr": false, - "atime": 1436810539.1255822, - "isdir": false, - "ctime": 1436810539.1255822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7405822, - "inode": 526622, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3356", - "xusr": false, - "atime": 1436810540.7405822, - "isdir": false, - "ctime": 1436810540.7405822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6265824, - "inode": 525258, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1992", - "xusr": false, - "atime": 1436810539.6265824, - "isdir": false, - "ctime": 1436810539.6265824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0915823, - "inode": 525835, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2569", - "xusr": false, - "atime": 1436810540.0915823, - "isdir": false, - "ctime": 1436810540.0915823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.6065824, - "inode": 527777, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4511", - "xusr": false, - "atime": 1436810541.6065824, - "isdir": false, - "ctime": 1436810541.6065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.4215822, - "inode": 526222, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2956", - "xusr": false, - "atime": 1436810540.4215822, - "isdir": false, - "ctime": 1436810540.4215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5275824, - "inode": 526325, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3059", - "xusr": false, - "atime": 1436810540.5275824, - "isdir": false, - "ctime": 1436810540.5275824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4315822, - "inode": 523731, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/465", - "xusr": false, - "atime": 1436810538.4315822, - "isdir": false, - "ctime": 1436810538.4315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9685824, - "inode": 524456, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1190", - "xusr": false, - "atime": 1436810538.9685824, - "isdir": false, - "ctime": 1436810538.9685824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7565823, - "inode": 526644, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3378", - "xusr": false, - "atime": 1436810540.7565823, - "isdir": false, - "ctime": 1436810540.7565823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8975823, - "inode": 528176, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4910", - "xusr": false, - "atime": 1436810541.8975823, - "isdir": false, - "ctime": 1436810541.8975823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.0365822, - "inode": 525778, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2512", - "xusr": false, - "atime": 1436810540.0365822, - "isdir": false, - "ctime": 1436810540.0365822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5725822, - "inode": 526386, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3120", - "xusr": false, - "atime": 1436810540.5725822, - "isdir": false, - "ctime": 1436810540.5725822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5615823, - "inode": 523911, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/645", - "xusr": false, - "atime": 1436810538.5615823, - "isdir": false, - "ctime": 1436810538.5615823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1245823, - "inode": 525864, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2598", - "xusr": false, - "atime": 1436810540.1245823, - "isdir": false, - "ctime": 1436810540.1245823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4465823, - "inode": 523752, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/486", - "xusr": false, - "atime": 1436810538.4465823, - "isdir": false, - "ctime": 1436810538.4465823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.7475822, - "inode": 524160, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/894", - "xusr": false, - "atime": 1436810538.7475822, - "isdir": false, - "ctime": 1436810538.7475822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0815823, - "inode": 524616, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1350", - "xusr": false, - "atime": 1436810539.0815823, - "isdir": false, - "ctime": 1436810539.0815823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.2995822, - "inode": 527398, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4132", - "xusr": false, - "atime": 1436810541.2995822, - "isdir": false, - "ctime": 1436810541.2995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.1155822, - "inode": 527145, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3879", - "xusr": false, - "atime": 1436810541.1155822, - "isdir": false, - "ctime": 1436810541.1155822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9315822, - "inode": 528223, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4957", - "xusr": false, - "atime": 1436810541.9315822, - "isdir": false, - "ctime": 1436810541.9315822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.4555824, - "inode": 523765, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/499", - "xusr": false, - "atime": 1436810538.4555824, - "isdir": false, - "ctime": 1436810538.4555824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2955823, - "inode": 526047, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2781", - "xusr": false, - "atime": 1436810540.2955823, - "isdir": false, - "ctime": 1436810540.2955823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1205823, - "inode": 525860, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2594", - "xusr": false, - "atime": 1436810540.1205823, - "isdir": false, - "ctime": 1436810540.1205823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9595823, - "inode": 526929, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3663", - "xusr": false, - "atime": 1436810540.9595823, - "isdir": false, - "ctime": 1436810540.9595823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.2045822, - "inode": 525944, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2678", - "xusr": false, - "atime": 1436810540.2045822, - "isdir": false, - "ctime": 1436810540.2045822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.3145823, - "inode": 526072, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2806", - "xusr": false, - "atime": 1436810540.3145823, - "isdir": false, - "ctime": 1436810540.3145823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.8075824, - "inode": 524236, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/970", - "xusr": false, - "atime": 1436810538.8075824, - "isdir": false, - "ctime": 1436810538.8075824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.9215822, - "inode": 528209, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4943", - "xusr": false, - "atime": 1436810541.9215822, - "isdir": false, - "ctime": 1436810541.9215822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.7535822, - "inode": 527977, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4711", - "xusr": false, - "atime": 1436810541.7535822, - "isdir": false, - "ctime": 1436810541.7535822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.5145824, - "inode": 526313, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3047", - "xusr": false, - "atime": 1436810540.5145824, - "isdir": false, - "ctime": 1436810540.5145824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.2245822, - "inode": 523492, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/226", - "xusr": false, - "atime": 1436810538.2245822, - "isdir": false, - "ctime": 1436810538.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.4255824, - "inode": 527526, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4260", - "xusr": false, - "atime": 1436810541.4255824, - "isdir": false, - "ctime": 1436810541.4255824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.8065822, - "inode": 528052, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4786", - "xusr": false, - "atime": 1436810541.8065822, - "isdir": false, - "ctime": 1436810541.8065822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2245822, - "inode": 524821, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1555", - "xusr": false, - "atime": 1436810539.2245822, - "isdir": false, - "ctime": 1436810539.2245822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.1945822, - "inode": 525934, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2668", - "xusr": false, - "atime": 1436810540.1945822, - "isdir": false, - "ctime": 1436810540.1945822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6695824, - "inode": 526522, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3256", - "xusr": false, - "atime": 1436810540.6695824, - "isdir": false, - "ctime": 1436810540.6695824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.8745823, - "inode": 526809, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3543", - "xusr": false, - "atime": 1436810540.8745823, - "isdir": false, - "ctime": 1436810540.8745823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.9065824, - "inode": 525601, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2335", - "xusr": false, - "atime": 1436810539.9065824, - "isdir": false, - "ctime": 1436810539.9065824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.2395823, - "inode": 524843, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1577", - "xusr": false, - "atime": 1436810539.2395823, - "isdir": false, - "ctime": 1436810539.2395823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0735824, - "inode": 524604, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1338", - "xusr": false, - "atime": 1436810539.0735824, - "isdir": false, - "ctime": 1436810539.0735824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.3645823, - "inode": 524991, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1725", - "xusr": false, - "atime": 1436810539.3645823, - "isdir": false, - "ctime": 1436810539.3645823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.9165823, - "inode": 526869, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3603", - "xusr": false, - "atime": 1436810540.9165823, - "isdir": false, - "ctime": 1436810540.9165823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.0235822, - "inode": 527016, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3750", - "xusr": false, - "atime": 1436810541.0235822, - "isdir": false, - "ctime": 1436810541.0235822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.0765824, - "inode": 524608, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1342", - "xusr": false, - "atime": 1436810539.0765824, - "isdir": false, - "ctime": 1436810539.0765824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.6835823, - "inode": 525317, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/2051", - "xusr": false, - "atime": 1436810539.6835823, - "isdir": false, - "ctime": 1436810539.6835823, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810541.3195822, - "inode": 527419, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/4153", - "xusr": false, - "atime": 1436810541.3195822, - "isdir": false, - "ctime": 1436810541.3195822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.6625824, - "inode": 526512, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3246", - "xusr": false, - "atime": 1436810540.6625824, - "isdir": false, - "ctime": 1436810540.6625824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810540.7355824, - "inode": 526615, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/3349", - "xusr": false, - "atime": 1436810540.7355824, - "isdir": false, - "ctime": 1436810540.7355824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810539.5995822, - "inode": 525222, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1956", - "xusr": false, - "atime": 1436810539.5995822, - "isdir": false, - "ctime": 1436810539.5995822, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.9385824, - "inode": 524413, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/1147", - "xusr": false, - "atime": 1436810538.9385824, - "isdir": false, - "ctime": 1436810538.9385824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - }, - { - "uid": 0, - "woth": false, - "mtime": 1436810538.5905824, - "inode": 523951, - "isgid": false, - "size": 0, - "isuid": false, - "isreg": true, - "gid": 0, - "ischr": false, - "wusr": true, - "xoth": false, - "islnk": false, - "nlink": 1, - "issock": false, - "rgrp": true, - "path": "/test/685", - "xusr": false, - "atime": 1436810538.5905824, - "isdir": false, - "ctime": 1436810538.5905824, - "isblk": false, - "wgrp": false, - "xgrp": false, - "dev": 64768, - "roth": true, - "isfifo": false, - "mode": "0644", - "rusr": true - } - ] -} diff --git a/awx/fact/tests/models/__init__.py b/awx/fact/tests/models/__init__.py deleted file mode 100644 index 049720a11a..0000000000 --- a/awx/fact/tests/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .fact import * # noqa diff --git a/awx/fact/tests/models/fact/__init__.py b/awx/fact/tests/models/fact/__init__.py deleted file mode 100644 index bdb0d01136..0000000000 --- a/awx/fact/tests/models/fact/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .fact_simple import * # noqa -from .fact_transform_pymongo import * # noqa -from .fact_transform import * # noqa -from .fact_get_single_facts import * # noqa diff --git a/awx/fact/tests/models/fact/fact_get_single_facts.py b/awx/fact/tests/models/fact/fact_get_single_facts.py deleted file mode 100644 index ef1d4befa9..0000000000 --- a/awx/fact/tests/models/fact/fact_get_single_facts.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from __future__ import absolute_import - -# Django - -# AWX -from awx.fact.models.fact import * # noqa -from awx.fact.tests.base import BaseFactTest, FactScanBuilder, TEST_FACT_PACKAGES - -__all__ = ['FactGetSingleFactsTest', 'FactGetSingleFactsMultipleScansTest',] - -class FactGetSingleFactsTest(BaseFactTest): - def setUp(self): - super(FactGetSingleFactsTest, self).setUp() - self.builder = FactScanBuilder() - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.add_fact('nested', TEST_FACT_PACKAGES) - self.builder.build(scan_count=1, host_count=20) - - def check_query_results(self, facts_known, facts): - self.assertIsNotNone(facts) - self.assertEqual(len(facts_known), len(facts), "More or less facts found than expected") - # Ensure only 'acpid' is returned - for fact in facts: - self.assertEqual(len(fact.fact), 1) - self.assertEqual(fact.fact[0]['name'], 'acpid') - - # Transpose facts to a dict with key id - count = 0 - facts_dict = {} - for fact in facts: - count += 1 - facts_dict[fact.id] = fact - self.assertEqual(count, len(facts_known)) - - # For each fact that we put into the database on setup, - # we should find that fact in the result set returned - for fact_known in facts_known: - key = fact_known.id - self.assertIn(key, facts_dict) - self.assertEqual(len(facts_dict[key].fact), 1) - - def check_query_results_nested(self, facts): - self.assertIsNotNone(facts) - for fact in facts: - self.assertEqual(len(fact.fact), 1) - self.assertEqual(fact.fact['nested'][0]['name'], 'acpid') - - def test_single_host(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(0, 1), 'name', 'acpid', self.builder.get_timestamp(0), 'packages') - - self.check_query_results(self.builder.get_scan(0, 'packages')[:1], facts) - - def test_all(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(), 'name', 'acpid', self.builder.get_timestamp(0), 'packages') - - self.check_query_results(self.builder.get_scan(0, 'packages'), facts) - - def test_subset_hosts(self): - host_count = (self.builder.get_host_count() / 2) - facts = Fact.get_single_facts(self.builder.get_hostnames(0, host_count), 'name', 'acpid', self.builder.get_timestamp(0), 'packages') - - self.check_query_results(self.builder.get_scan(0, 'packages')[:host_count], facts) - - def test_get_single_facts_nested(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(), 'nested.name', 'acpid', self.builder.get_timestamp(0), 'packages') - - self.check_query_results_nested(facts) - -class FactGetSingleFactsMultipleScansTest(BaseFactTest): - def setUp(self): - super(FactGetSingleFactsMultipleScansTest, self).setUp() - self.builder = FactScanBuilder() - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.build(scan_count=10, host_count=10) - - def test_1_host(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(0, 1), 'name', 'acpid', self.builder.get_timestamp(0), 'packages') - self.assertEqual(len(facts), 1) - self.assertEqual(facts[0], self.builder.get_scan(0, 'packages')[0]) - - def test_multiple_hosts(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(0, 3), 'name', 'acpid', self.builder.get_timestamp(0), 'packages') - self.assertEqual(len(facts), 3) - for i, fact in enumerate(facts): - self.assertEqual(fact, self.builder.get_scan(0, 'packages')[i]) - - def test_middle_of_timeline(self): - facts = Fact.get_single_facts(self.builder.get_hostnames(0, 3), 'name', 'acpid', self.builder.get_timestamp(4), 'packages') - self.assertEqual(len(facts), 3) - for i, fact in enumerate(facts): - self.assertEqual(fact, self.builder.get_scan(4, 'packages')[i]) - diff --git a/awx/fact/tests/models/fact/fact_simple.py b/awx/fact/tests/models/fact/fact_simple.py deleted file mode 100644 index 142accdbd3..0000000000 --- a/awx/fact/tests/models/fact/fact_simple.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from __future__ import absolute_import -import os -import json - -# Django -from django.utils.timezone import now -from dateutil.relativedelta import relativedelta - -# AWX -from awx.fact.models.fact import * # noqa -from awx.fact.tests.base import BaseFactTest, FactScanBuilder, TEST_FACT_PACKAGES - -__all__ = ['FactHostTest', 'FactTest', 'FactGetHostVersionTest', 'FactGetHostTimelineTest'] - -# damn you python 2.6 -def timedelta_total_seconds(timedelta): - return ( - timedelta.microseconds + 0.0 + - (timedelta.seconds + timedelta.days * 24 * 3600) * 10 ** 6) / 10 ** 6 - - -class FactHostTest(BaseFactTest): - def test_create_host(self): - host = FactHost(hostname='hosty', inventory_id=1) - host.save() - - host = FactHost.objects.get(hostname='hosty', inventory_id=1) - self.assertIsNotNone(host, "Host added but not found") - self.assertEqual('hosty', host.hostname, "Gotten record hostname does not match expected hostname") - self.assertEqual(1, host.inventory_id, "Gotten record inventory_id does not match expected inventory_id") - - # Ensure an error is raised for .get() that doesn't match a record. - def test_get_host_id_no_result(self): - host = FactHost(hostname='hosty', inventory_id=1) - host.save() - - self.assertRaises(FactHost.DoesNotExist, FactHost.objects.get, hostname='doesnotexist', inventory_id=1) - -class FactTest(BaseFactTest): - def setUp(self): - super(FactTest, self).setUp() - - def test_add_fact(self): - timestamp = now().replace(microsecond=0) - host = FactHost(hostname="hosty", inventory_id=1).save() - (f_obj, v_obj) = Fact.add_fact(host=host, timestamp=timestamp, module='packages', fact=TEST_FACT_PACKAGES) - f = Fact.objects.get(id=f_obj.id) - v = FactVersion.objects.get(id=v_obj.id) - - self.assertEqual(f.id, f_obj.id) - self.assertEqual(f.module, 'packages') - self.assertEqual(f.fact, TEST_FACT_PACKAGES) - self.assertEqual(f.timestamp, timestamp) - - # host relationship created - self.assertEqual(f.host.id, host.id) - - # version created and related - self.assertEqual(v.id, v_obj.id) - self.assertEqual(v.timestamp, timestamp) - self.assertEqual(v.host.id, host.id) - self.assertEqual(v.fact.id, f_obj.id) - self.assertEqual(v.fact.module, 'packages') - - # Note: Take the failure of this with a grain of salt. - # The test almost entirely depends on the specs of the system running on. - def test_add_fact_performance_4mb_file(self): - timestamp = now().replace(microsecond=0) - host = FactHost(hostname="hosty", inventory_id=1).save() - - from awx.fact import tests - with open('%s/data/file_scan.json' % os.path.dirname(os.path.realpath(tests.__file__))) as f: - data = json.load(f) - - t1 = now() - (f_obj, v_obj) = Fact.add_fact(host=host, timestamp=timestamp, module='packages', fact=data) - t2 = now() - diff = timedelta_total_seconds(t2 - t1) - print("add_fact save time: %s (s)" % diff) - # Note: 20 is realllly high. This should complete in < 2 seconds - self.assertLessEqual(diff, 20) - - Fact.objects.get(id=f_obj.id) - FactVersion.objects.get(id=v_obj.id) - -class FactGetHostVersionTest(BaseFactTest): - def setUp(self): - super(FactGetHostVersionTest, self).setUp() - self.builder = FactScanBuilder() - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.build(scan_count=2, host_count=1) - - def test_get_host_version_exact_timestamp(self): - fact_known = self.builder.get_scan(0, 'packages')[0] - fact = Fact.get_host_version(hostname=self.builder.get_hostname(0), inventory_id=self.builder.get_inventory_id(), timestamp=self.builder.get_timestamp(0), module='packages') - self.assertIsNotNone(fact) - self.assertEqual(fact_known, fact) - - def test_get_host_version_lte_timestamp(self): - timestamp = self.builder.get_timestamp(0) + relativedelta(days=1) - fact_known = self.builder.get_scan(0, 'packages')[0] - fact = Fact.get_host_version(hostname=self.builder.get_hostname(0), inventory_id=self.builder.get_inventory_id(), timestamp=timestamp, module='packages') - self.assertIsNotNone(fact) - self.assertEqual(fact_known, fact) - - def test_get_host_version_none(self): - timestamp = self.builder.get_timestamp(0) - relativedelta(years=20) - fact = Fact.get_host_version(hostname=self.builder.get_hostname(0), inventory_id=self.builder.get_inventory_id(), timestamp=timestamp, module='packages') - self.assertIsNone(fact) - -class FactGetHostTimelineTest(BaseFactTest): - def setUp(self): - super(FactGetHostTimelineTest, self).setUp() - self.builder = FactScanBuilder() - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.build(scan_count=20, host_count=1) - - def test_get_host_timeline_ok(self): - timestamps = Fact.get_host_timeline(hostname=self.builder.get_hostname(0), inventory_id=self.builder.get_inventory_id(), module='packages') - self.assertIsNotNone(timestamps) - self.assertEqual(len(timestamps), self.builder.get_scan_count()) - for i in range(0, self.builder.get_scan_count()): - self.assertEqual(timestamps[i], self.builder.get_timestamp(i)) diff --git a/awx/fact/tests/models/fact/fact_transform.py b/awx/fact/tests/models/fact/fact_transform.py deleted file mode 100644 index 0e2d31c846..0000000000 --- a/awx/fact/tests/models/fact/fact_transform.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from __future__ import absolute_import -from datetime import datetime - -# Django -from django.conf import settings - -# Pymongo -import pymongo - -# AWX -from awx.fact.models.fact import * # noqa -from awx.fact.tests.base import BaseFactTest - -__all__ = ['FactTransformTest', 'FactTransformUpdateTest',] - -TEST_FACT_PACKAGES_WITH_DOTS = [ - { - "name": "acpid3.4", - "version": "1:2.0.21-1ubuntu2", - "deeper.key": "some_value" - }, - { - "name": "adduser.2", - "source": "apt", - "version": "3.113+nmu3ubuntu3" - }, - { - "what.ever." : { - "shallowish.key": "some_shallow_value" - } - } -] - -TEST_FACT_PACKAGES_WITH_DOLLARS = [ - { - "name": "acpid3$4", - "version": "1:2.0.21-1ubuntu2", - "deeper.key": "some_value" - }, - { - "name": "adduser$2", - "source": "apt", - "version": "3.113+nmu3ubuntu3" - }, - { - "what.ever." : { - "shallowish.key": "some_shallow_value" - } - } -] -class FactTransformTest(BaseFactTest): - def setUp(self): - super(FactTransformTest, self).setUp() - # TODO: get host settings from config - self.client = pymongo.MongoClient('localhost', 27017) - self.db2 = self.client[settings.MONGO_DB] - - self.timestamp = datetime.now().replace(microsecond=0) - - def setup_create_fact_dot(self): - self.host = FactHost(hostname='hosty', inventory_id=1).save() - self.f = Fact(timestamp=self.timestamp, module='packages', fact=TEST_FACT_PACKAGES_WITH_DOTS, host=self.host) - self.f.save() - - def setup_create_fact_dollar(self): - self.host = FactHost(hostname='hosty', inventory_id=1).save() - self.f = Fact(timestamp=self.timestamp, module='packages', fact=TEST_FACT_PACKAGES_WITH_DOLLARS, host=self.host) - self.f.save() - - def test_fact_with_dot_serialized(self): - self.setup_create_fact_dot() - - q = { - '_id': self.f.id - } - - # Bypass mongoengine and pymongo transform to get record - f_dict = self.db2['fact'].find_one(q) - self.assertIn('what\uff0Eever\uff0E', f_dict['fact'][2]) - - def test_fact_with_dot_serialized_pymongo(self): - #self.setup_create_fact_dot() - - host = FactHost(hostname='hosty', inventory_id=1).save() - f = self.db['fact'].insert({ - 'hostname': 'hosty', - 'fact': TEST_FACT_PACKAGES_WITH_DOTS, - 'timestamp': self.timestamp, - 'host': host.id, - 'module': 'packages', - }) - - q = { - '_id': f - } - # Bypass mongoengine and pymongo transform to get record - f_dict = self.db2['fact'].find_one(q) - self.assertIn('what\uff0Eever\uff0E', f_dict['fact'][2]) - - def test_fact_with_dot_deserialized_pymongo(self): - self.setup_create_fact_dot() - - q = { - '_id': self.f.id - } - f_dict = self.db['fact'].find_one(q) - self.assertIn('what.ever.', f_dict['fact'][2]) - - def test_fact_with_dot_deserialized(self): - self.setup_create_fact_dot() - - f = Fact.objects.get(id=self.f.id) - self.assertIn('what.ever.', f.fact[2]) - -class FactTransformUpdateTest(BaseFactTest): - pass diff --git a/awx/fact/tests/models/fact/fact_transform_pymongo.py b/awx/fact/tests/models/fact/fact_transform_pymongo.py deleted file mode 100644 index ac7c329980..0000000000 --- a/awx/fact/tests/models/fact/fact_transform_pymongo.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from __future__ import absolute_import -from datetime import datetime - -# Django -from django.conf import settings - -# Pymongo -import pymongo - -# AWX -from awx.fact.models.fact import * # noqa -from awx.fact.tests.base import BaseFactTest - -__all__ = ['FactSerializePymongoTest', 'FactDeserializePymongoTest',] - -class FactPymongoBaseTest(BaseFactTest): - def setUp(self): - super(FactPymongoBaseTest, self).setUp() - # TODO: get host settings from config - self.client = pymongo.MongoClient('localhost', 27017) - self.db2 = self.client[settings.MONGO_DB] - - def _create_fact(self): - fact = {} - fact[self.k] = self.v - q = { - 'hostname': 'blah' - } - h = self.db['fact_host'].insert(q) - q = { - 'host': h, - 'module': 'blah', - 'timestamp': datetime.now(), - 'fact': fact - } - f = self.db['fact'].insert(q) - return f - - def check_transform(self, id): - raise RuntimeError("Must override") - - def create_dot_fact(self): - self.k = 'this.is.a.key' - self.v = 'this.is.a.value' - - self.k_uni = 'this\uff0Eis\uff0Ea\uff0Ekey' - - return self._create_fact() - - def create_dollar_fact(self): - self.k = 'this$is$a$key' - self.v = 'this$is$a$value' - - self.k_uni = 'this\uff04is\uff04a\uff04key' - - return self._create_fact() - -class FactSerializePymongoTest(FactPymongoBaseTest): - def check_transform(self, id): - q = { - '_id': id - } - f = self.db2.fact.find_one(q) - self.assertIn(self.k_uni, f['fact']) - self.assertEqual(f['fact'][self.k_uni], self.v) - - # Ensure key . are being transformed to the equivalent unicode into the database - def test_key_transform_dot(self): - f = self.create_dot_fact() - self.check_transform(f) - - # Ensure key $ are being transformed to the equivalent unicode into the database - def test_key_transform_dollar(self): - f = self.create_dollar_fact() - self.check_transform(f) - -class FactDeserializePymongoTest(FactPymongoBaseTest): - def check_transform(self, id): - q = { - '_id': id - } - f = self.db.fact.find_one(q) - self.assertIn(self.k, f['fact']) - self.assertEqual(f['fact'][self.k], self.v) - - def test_key_transform_dot(self): - f = self.create_dot_fact() - self.check_transform(f) - - def test_key_transform_dollar(self): - f = self.create_dollar_fact() - self.check_transform(f) diff --git a/awx/fact/tests/utils/__init__.py b/awx/fact/tests/utils/__init__.py deleted file mode 100644 index 80e83d4661..0000000000 --- a/awx/fact/tests/utils/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .dbtransform import * # noqa diff --git a/awx/fact/tests/utils/dbtransform.py b/awx/fact/tests/utils/dbtransform.py deleted file mode 100644 index 97bfad9c65..0000000000 --- a/awx/fact/tests/utils/dbtransform.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# AWX -from awx.main.tests.base import BaseTest -from awx.fact.models.fact import * # noqa -from awx.fact.utils.dbtransform import KeyTransform - -#__all__ = ['DBTransformTest', 'KeyTransformUnitTest'] -__all__ = ['KeyTransformUnitTest'] - -class KeyTransformUnitTest(BaseTest): - def setUp(self): - super(KeyTransformUnitTest, self).setUp() - self.key_transform = KeyTransform([('.', '\uff0E'), ('$', '\uff04')]) - - def test_no_replace(self): - value = { - "a_key_with_a_dict" : { - "key" : "value", - "nested_key_with_dict": { - "nested_key_with_value" : "deep_value" - } - } - } - - data = self.key_transform.transform_incoming(value, None) - self.assertEqual(data, value) - - data = self.key_transform.transform_outgoing(value, None) - self.assertEqual(data, value) - - def test_complex(self): - value = { - "a.key.with.a.dict" : { - "key" : "value", - "nested.key.with.dict": { - "nested.key.with.value" : "deep_value" - } - } - } - value_transformed = { - "a\uff0Ekey\uff0Ewith\uff0Ea\uff0Edict" : { - "key" : "value", - "nested\uff0Ekey\uff0Ewith\uff0Edict": { - "nested\uff0Ekey\uff0Ewith\uff0Evalue" : "deep_value" - } - } - } - - data = self.key_transform.transform_incoming(value, None) - self.assertEqual(data, value_transformed) - - data = self.key_transform.transform_outgoing(value_transformed, None) - self.assertEqual(data, value) - - def test_simple(self): - value = { - "a.key" : "value" - } - value_transformed = { - "a\uff0Ekey" : "value" - } - - data = self.key_transform.transform_incoming(value, None) - self.assertEqual(data, value_transformed) - - data = self.key_transform.transform_outgoing(value_transformed, None) - self.assertEqual(data, value) - - def test_nested_dict(self): - value = { - "a.key.with.a.dict" : { - "nested.key." : "value" - } - } - value_transformed = { - "a\uff0Ekey\uff0Ewith\uff0Ea\uff0Edict" : { - "nested\uff0Ekey\uff0E" : "value" - } - } - - data = self.key_transform.transform_incoming(value, None) - self.assertEqual(data, value_transformed) - - data = self.key_transform.transform_outgoing(value_transformed, None) - self.assertEqual(data, value) - - def test_array(self): - value = { - "a.key.with.an.array" : [ - { - "key.with.dot" : "value" - } - ] - } - value_transformed = { - "a\uff0Ekey\uff0Ewith\uff0Ean\uff0Earray" : [ - { - "key\uff0Ewith\uff0Edot" : "value" - } - ] - } - data = self.key_transform.transform_incoming(value, None) - self.assertEqual(data, value_transformed) - - data = self.key_transform.transform_outgoing(value_transformed, None) - self.assertEqual(data, value) - -''' -class DBTransformTest(BaseTest, MongoDBRequired): -''' diff --git a/awx/fact/utils/connection.py b/awx/fact/utils/connection.py deleted file mode 100644 index 4c4019e24d..0000000000 --- a/awx/fact/utils/connection.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -from django.conf import settings -from mongoengine import connect -from mongoengine.connection import ConnectionError -from pymongo.errors import AutoReconnect - -def test_mongo_connection(): - # Connect to Mongo - try: - # Sanity check: If we have intentionally invalid settings, then we - # know we cannot connect. - if settings.MONGO_HOST == NotImplemented: - raise ConnectionError - - # Attempt to connect to the MongoDB database. - db = connect(settings.MONGO_DB, - host=settings.MONGO_HOST, - port=int(settings.MONGO_PORT), - username=settings.MONGO_USERNAME, - password=settings.MONGO_PASSWORD, - tz_aware=settings.USE_TZ) - db[settings.MONGO_DB].command('ping') - return True - except (ConnectionError, AutoReconnect): - return False - diff --git a/awx/fact/utils/dbtransform.py b/awx/fact/utils/dbtransform.py index f808281d28..0541c32fe0 100644 --- a/awx/fact/utils/dbtransform.py +++ b/awx/fact/utils/dbtransform.py @@ -11,12 +11,12 @@ class KeyTransform(SONManipulator): def replace_key(self, key): for (replace, replacement) in self.replace: - key = key.replace(replace, replacement) + key = key.replace(replace, replacement) return key def revert_key(self, key): for (replacement, replace) in self.replace: - key = key.replace(replace, replacement) + key = key.replace(replace, replacement) return key def replace_incoming(self, obj): @@ -49,7 +49,10 @@ class KeyTransform(SONManipulator): return self.replace_incoming(son) def transform_outgoing(self, son, collection): + if not collection or collection.name != 'fact': + return son return self.replace_outgoing(son) def register_key_transform(db): - db.add_son_manipulator(KeyTransform([('.', '\uff0E'), ('$', '\uff04')])) + #db.add_son_manipulator(KeyTransform([('.', '\uff0E'), ('$', '\uff04')])) + pass diff --git a/awx/main/access.py b/awx/main/access.py index 18ae3a91b1..5b2ee91851 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -7,20 +7,25 @@ import sys import logging # Django -from django.conf import settings -from django.db.models import F, Q +from django.db.models import Q from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType # Django REST Framework -from rest_framework.exceptions import ParseError, PermissionDenied +from rest_framework.exceptions import ParseError, PermissionDenied, ValidationError # AWX from awx.main.utils import * # noqa from awx.main.models import * # noqa +from awx.main.models.unified_jobs import ACTIVE_STATES +from awx.main.models.mixins import ResourceMixin from awx.api.license import LicenseForbids from awx.main.task_engine import TaskSerializer +from awx.main.conf import tower_settings -__all__ = ['get_user_queryset', 'check_user_access'] +__all__ = ['get_user_queryset', 'check_user_access', + 'user_accessible_objects', + 'user_admin_role', 'StateConflict',] PERMISSION_TYPES = [ PERM_INVENTORY_ADMIN, @@ -52,10 +57,27 @@ access_registry = { # ... } +class StateConflict(ValidationError): + status_code = 409 + def register_access(model_class, access_class): access_classes = access_registry.setdefault(model_class, []) access_classes.append(access_class) +@property +def user_admin_role(self): + role = Role.objects.get( + content_type=ContentType.objects.get_for_model(User), + object_id=self.id, + role_field='admin_role' + ) + # Trick the user.admin_role so that the signal filtering for RBAC activity stream works as intended. + role.parents = [org.admin_role.pk for org in self.organizations] + return role + +def user_accessible_objects(user, role_name): + return ResourceMixin._accessible_objects(User, user, role_name) + def get_user_queryset(user, model_class): ''' Return a queryset for the given model_class containing only the instances @@ -94,6 +116,17 @@ def check_user_access(user, model_class, action, *args, **kwargs): return result return False +def check_superuser(func): + ''' + check_superuser is a decorator that provides a simple short circuit + for access checks. If the User object is a superuser, return True, otherwise + execute the logic of the can_access method. + ''' + def wrapper(self, *args, **kwargs): + if self.user.is_superuser: + return True + return func(self, *args, **kwargs) + return wrapper class BaseAccess(object): ''' @@ -109,7 +142,7 @@ class BaseAccess(object): self.user = user def get_queryset(self): - if self.user.is_superuser: + if self.user.is_superuser or self.user.is_system_auditor: return self.model.objects.all() else: return self.model.objects.none() @@ -143,47 +176,45 @@ class BaseAccess(object): return bool(self.can_change(obj, None) and self.user.can_access(type(sub_obj), 'read', sub_obj)) - def can_unattach(self, obj, sub_obj, relationship): - return self.can_change(obj, None) + def can_unattach(self, obj, sub_obj, relationship, data=None): + return self.can_change(obj, data) def check_license(self, add_host=False, feature=None, check_expiration=True): reader = TaskSerializer() - validation_info = reader.from_file() - if ('test' in sys.argv or 'jenkins' in sys.argv) and not os.environ.get('SKIP_LICENSE_FIXUP_FOR_TEST', ''): + validation_info = reader.from_database() + if ('test' in sys.argv or 'py.test' in sys.argv[0] or 'jenkins' in sys.argv) and not os.environ.get('SKIP_LICENSE_FIXUP_FOR_TEST', ''): validation_info['free_instances'] = 99999999 validation_info['time_remaining'] = 99999999 validation_info['grace_period_remaining'] = 99999999 if check_expiration and validation_info.get('time_remaining', None) is None: - raise PermissionDenied("license is missing") + raise PermissionDenied("License is missing.") if check_expiration and validation_info.get("grace_period_remaining") <= 0: - raise PermissionDenied("license has expired") + raise PermissionDenied("License has expired.") free_instances = validation_info.get('free_instances', 0) available_instances = validation_info.get('available_instances', 0) if add_host and free_instances == 0: - raise PermissionDenied("license count of %s instances has been reached" % available_instances) + raise PermissionDenied("License count of %s instances has been reached." % available_instances) elif add_host and free_instances < 0: - raise PermissionDenied("license count of %s instances has been exceeded" % available_instances) + raise PermissionDenied("License count of %s instances has been exceeded." % available_instances) elif not add_host and free_instances < 0: - raise PermissionDenied("host count exceeds available instances") + raise PermissionDenied("Host count exceeds available instances.") if feature is not None: if "features" in validation_info and not validation_info["features"].get(feature, False): - raise LicenseForbids("Feature %s is not enabled in the active license" % feature) + raise LicenseForbids("Feature %s is not enabled in the active license." % feature) elif "features" not in validation_info: - raise LicenseForbids("Features not found in active license") + raise LicenseForbids("Features not found in active license.") class UserAccess(BaseAccess): ''' I can see user records when: - - I'm a superuser. - - I'm that user. - - I'm an org admin (org admins should be able to see all users, in order - to add those users to the org). - - I'm in an org with that user. - - I'm on a team with that user. + - I'm a useruser + - I'm in a role with them (such as in an organization or team) + - They are in a role which includes a role of mine + - I am in a role that includes a role of theirs I can change some fields for a user (mainly password) when I am that user. I can change all fields for a user (admin access) or delete when: - I'm a superuser. @@ -193,24 +224,33 @@ class UserAccess(BaseAccess): model = User def get_queryset(self): - qs = self.model.objects.filter(is_active=True).distinct() - if self.user.is_superuser: - return qs - if settings.ORG_ADMINS_CAN_SEE_ALL_USERS and self.user.admin_of_organizations.filter(active=True).exists(): - return qs - return qs.filter( - Q(pk=self.user.pk) | - Q(organizations__in=self.user.admin_of_organizations.filter(active=True)) | - Q(organizations__in=self.user.organizations.filter(active=True)) | - Q(teams__in=self.user.teams.filter(active=True)) + if self.user.is_superuser or self.user.is_system_auditor: + return User.objects.all() + + if tower_settings.ORG_ADMINS_CAN_SEE_ALL_USERS and \ + (self.user.admin_of_organizations.exists() or self.user.auditor_of_organizations.exists()): + return User.objects.all() + + return ( + User.objects.filter( + pk__in=Organization.accessible_objects(self.user, 'read_role').values('member_role__members') + ) | + User.objects.filter( + pk=self.user.id + ) | + User.objects.filter( + pk__in=Role.objects.filter(singleton_name__in = [ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, ROLE_SINGLETON_SYSTEM_AUDITOR]).values('members') + ) ).distinct() + def can_add(self, data): if data is not None and 'is_superuser' in data: if to_python_boolean(data['is_superuser'], allow_none=True) and not self.user.is_superuser: return False - return bool(self.user.is_superuser or - self.user.admin_of_organizations.filter(active=True).exists()) + if self.user.is_superuser: + return True + return Organization.accessible_objects(self.user, 'admin_role').exists() def can_change(self, obj, data): if data is not None and 'is_superuser' in data: @@ -221,22 +261,35 @@ class UserAccess(BaseAccess): # that a user should be able to edit for themselves. return bool(self.user == obj or self.can_admin(obj, data)) + @check_superuser def can_admin(self, obj, data): - # Admin implies changing all user fields. - if self.user.is_superuser: - return True - return bool(obj.organizations.filter(active=True, admins__in=[self.user]).exists()) + return Organization.objects.filter(member_role__members=obj, admin_role__members=self.user).exists() def can_delete(self, obj): if obj == self.user: # cannot delete yourself return False - super_users = User.objects.filter(is_active=True, is_superuser=True) + super_users = User.objects.filter(is_superuser=True) if obj.is_superuser and super_users.count() == 1: # cannot delete the last active superuser return False - return bool(self.user.is_superuser or - obj.organizations.filter(active=True, admins__in=[self.user]).exists()) + if self.user.is_superuser: + return True + return False + + def can_attach(self, obj, sub_obj, relationship, *args, **kwargs): + "Reverse obj and sub_obj, defer to RoleAccess if this is a role assignment." + if relationship == 'roles': + role_access = RoleAccess(self.user) + return role_access.can_attach(sub_obj, obj, 'members', *args, **kwargs) + return super(UserAccess, self).can_attach(obj, sub_obj, relationship, *args, **kwargs) + + def can_unattach(self, obj, sub_obj, relationship, *args, **kwargs): + if relationship == 'roles': + role_access = RoleAccess(self.user) + return role_access.can_unattach(sub_obj, obj, 'members', *args, **kwargs) + return super(UserAccess, self).can_unattach(obj, sub_obj, relationship, *args, **kwargs) + class OrganizationAccess(BaseAccess): ''' @@ -251,19 +304,29 @@ class OrganizationAccess(BaseAccess): model = Organization def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by') - if self.user.is_superuser: - return qs - return qs.filter(Q(admins__in=[self.user]) | Q(users__in=[self.user])) + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('created_by', 'modified_by').all() + @check_superuser def can_change(self, obj, data): - return bool(self.user.is_superuser or - self.user in obj.admins.all()) + return self.user in obj.admin_role def can_delete(self, obj): self.check_license(feature='multiple_organizations', check_expiration=False) - return self.can_change(obj, None) + is_change_possible = self.can_change(obj, None) + if not is_change_possible: + return False + active_jobs = [] + active_jobs.extend([dict(type="job", id=o.id) + for o in Job.objects.filter(project__in=obj.projects.all(), status__in=ACTIVE_STATES)]) + active_jobs.extend([dict(type="project_update", id=o.id) + for o in ProjectUpdate.objects.filter(project__in=obj.projects.all(), status__in=ACTIVE_STATES)]) + active_jobs.extend([dict(type="inventory_update", id=o.id) + for o in InventoryUpdate.objects.filter(inventory_source__inventory__organization=obj, status__in=ACTIVE_STATES)]) + if len(active_jobs) > 0: + raise StateConflict({"conflict": "Resource is being used by running jobs", + "active_jobs": active_jobs}) + return True class InventoryAccess(BaseAccess): ''' @@ -288,81 +351,59 @@ class InventoryAccess(BaseAccess): model = Inventory def get_queryset(self, allowed=None, ad_hoc=None): - allowed = allowed or PERMISSION_TYPES_ALLOWING_INVENTORY_READ - qs = Inventory.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by', 'organization') - if self.user.is_superuser: - return qs - qs = qs.filter(organization__active=True) - admin_of = qs.filter(organization__admins__in=[self.user]).distinct() - has_user_kw = dict( - permissions__user__in=[self.user], - permissions__permission_type__in=allowed, - permissions__active=True, - ) - if ad_hoc is not None: - has_user_kw['permissions__run_ad_hoc_commands'] = ad_hoc - has_user_perms = qs.filter(**has_user_kw).distinct() - has_team_kw = dict( - permissions__team__users__in=[self.user], - permissions__team__active=True, - permissions__permission_type__in=allowed, - permissions__active=True, - ) - if ad_hoc is not None: - has_team_kw['permissions__run_ad_hoc_commands'] = ad_hoc - has_team_perms = qs.filter(**has_team_kw).distinct() - return admin_of | has_user_perms | has_team_perms - - def has_permission_types(self, obj, allowed, ad_hoc=None): - return bool(obj and self.get_queryset(allowed, ad_hoc).filter(pk=obj.pk).exists()) + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('created_by', 'modified_by', 'organization').all() + @check_superuser def can_read(self, obj): - return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_READ) + return self.user in obj.read_role + @check_superuser + def can_use(self, obj): + return self.user in obj.use_role + + @check_superuser def can_add(self, data): # If no data is specified, just checking for generic add permission? if not data: - return bool(self.user.is_superuser or - self.user.admin_of_organizations.filter(active=True).exists()) - # Otherwise, verify that the user has access to change the parent - # organization of this inventory. - if self.user.is_superuser: - return True - else: - org_pk = get_pk_from_dict(data, 'organization') - org = get_object_or_400(Organization, pk=org_pk) - if self.user.can_access(Organization, 'change', org, None): - return True - return False + return Organization.accessible_objects(self.user, 'admin_role').exists() - def can_change(self, obj, data): - # Verify that the user has access to the new organization if moving an - # inventory to a new organization. org_pk = get_pk_from_dict(data, 'organization') - if obj and org_pk and obj.organization.pk != org_pk: - org = get_object_or_400(Organization, pk=org_pk) - if not self.user.can_access(Organization, 'change', org, None): - return False - # Otherwise, just check for write permission. - return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_WRITE) + org = get_object_or_400(Organization, pk=org_pk) + return self.user in org.admin_role + @check_superuser + def can_change(self, obj, data): + return self.can_admin(obj, data) + + @check_superuser def can_admin(self, obj, data): # Verify that the user has access to the new organization if moving an # inventory to a new organization. org_pk = get_pk_from_dict(data, 'organization') if obj and org_pk and obj.organization.pk != org_pk: org = get_object_or_400(Organization, pk=org_pk) - if not self.user.can_access(Organization, 'change', org, None): + if self.user not in org.admin_role: return False # Otherwise, just check for admin permission. - return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_ADMIN) + return self.user in obj.admin_role def can_delete(self, obj): - return self.can_admin(obj, None) + is_can_admin = self.can_admin(obj, None) + if not is_can_admin: + return False + active_jobs = [] + active_jobs.extend([dict(type="job", id=o.id) + for o in Job.objects.filter(inventory=obj, status__in=ACTIVE_STATES)]) + active_jobs.extend([dict(type="inventory_update", id=o.id) + for o in InventoryUpdate.objects.filter(inventory_source__inventory=obj, status__in=ACTIVE_STATES)]) + if len(active_jobs) > 0: + raise StateConflict({"conflict": "Resource is being used by running jobs", + "active_jobs": active_jobs}) + return True def can_run_ad_hoc_commands(self, obj): - return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_READ, True) + return self.user in obj.adhoc_role class HostAccess(BaseAccess): ''' @@ -373,16 +414,16 @@ class HostAccess(BaseAccess): model = Host def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + inv_qs = Inventory.accessible_objects(self.user, 'read_role') + qs = self.model.objects.filter(inventory__in=inv_qs) qs = qs.select_related('created_by', 'modified_by', 'inventory', 'last_job__job_template', 'last_job_host_summary__job') - qs = qs.prefetch_related('groups') - inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) - return qs.filter(inventory_id__in=inventory_ids) + qs =qs.prefetch_related('groups').all() + return qs def can_read(self, obj): - return obj and self.user.can_access(Inventory, 'read', obj.inventory) + return obj and self.user in obj.inventory.read_role def can_add(self, data): if not data or 'inventory' not in data: @@ -391,7 +432,7 @@ class HostAccess(BaseAccess): # Checks for admin or change permission on inventory. inventory_pk = get_pk_from_dict(data, 'inventory') inventory = get_object_or_400(Inventory, pk=inventory_pk) - if not self.user.can_access(Inventory, 'change', inventory, None): + if self.user not in inventory.admin_role: return False # Check to see if we have enough licenses @@ -402,10 +443,10 @@ class HostAccess(BaseAccess): # Prevent moving a host to a different inventory. inventory_pk = get_pk_from_dict(data, 'inventory') if obj and inventory_pk and obj.inventory.pk != inventory_pk: - raise PermissionDenied('Unable to change inventory on a host') + raise PermissionDenied('Unable to change inventory on a host.') # Checks for admin or change permission on inventory, controls whether # the user can edit variable data. - return obj and self.user.can_access(Inventory, 'change', obj.inventory, None) + return obj and self.user in obj.inventory.admin_role def can_attach(self, obj, sub_obj, relationship, data, skip_sub_obj_read_check=False): @@ -414,11 +455,11 @@ class HostAccess(BaseAccess): return False # Prevent assignments between different inventories. if obj.inventory != sub_obj.inventory: - raise ParseError('Cannot associate two items from different inventories') + raise ParseError('Cannot associate two items from different inventories.') return True def can_delete(self, obj): - return obj and self.user.can_access(Inventory, 'delete', obj.inventory) + return obj and self.user in obj.inventory.admin_role class GroupAccess(BaseAccess): ''' @@ -429,14 +470,12 @@ class GroupAccess(BaseAccess): model = Group def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = Group.objects.filter(inventory__in=Inventory.accessible_objects(self.user, 'read_role')) qs = qs.select_related('created_by', 'modified_by', 'inventory') - qs = qs.prefetch_related('parents', 'children', 'inventory_source') - inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) - return qs.filter(inventory_id__in=inventory_ids) + return qs.prefetch_related('parents', 'children', 'inventory_source').all() def can_read(self, obj): - return obj and self.user.can_access(Inventory, 'read', obj.inventory) + return obj and self.user in obj.inventory.read_role def can_add(self, data): if not data or 'inventory' not in data: @@ -444,28 +483,25 @@ class GroupAccess(BaseAccess): # Checks for admin or change permission on inventory. inventory_pk = get_pk_from_dict(data, 'inventory') inventory = get_object_or_400(Inventory, pk=inventory_pk) - return self.user.can_access(Inventory, 'change', inventory, None) + return self.user in inventory.admin_role def can_change(self, obj, data): # Prevent moving a group to a different inventory. inventory_pk = get_pk_from_dict(data, 'inventory') if obj and inventory_pk and obj.inventory.pk != inventory_pk: - raise PermissionDenied('Unable to change inventory on a group') + raise PermissionDenied('Unable to change inventory on a group.') # Checks for admin or change permission on inventory, controls whether # the user can attach subgroups or edit variable data. - return obj and self.user.can_access(Inventory, 'change', obj.inventory, None) + return obj and self.user in obj.inventory.admin_role def can_attach(self, obj, sub_obj, relationship, data, skip_sub_obj_read_check=False): if not super(GroupAccess, self).can_attach(obj, sub_obj, relationship, data, skip_sub_obj_read_check): return False - # Don't allow attaching if the sub obj is not active - if not obj.active: - return False # Prevent assignments between different inventories. if obj.inventory != sub_obj.inventory: - raise ParseError('Cannot associate two items from different inventories') + raise ParseError('Cannot associate two items from different inventories.') # Prevent group from being assigned as its own (grand)child. if type(obj) == type(sub_obj): parent_pks = set(obj.all_parents.values_list('pk', flat=True)) @@ -477,8 +513,16 @@ class GroupAccess(BaseAccess): return True def can_delete(self, obj): - return obj and self.user.can_access(Inventory, 'delete', obj.inventory) - + is_delete_allowed = bool(obj and self.user in obj.inventory.admin_role) + if not is_delete_allowed: + return False + active_jobs = [] + active_jobs.extend([dict(type="inventory_update", id=o.id) + for o in InventoryUpdate.objects.filter(inventory_source__in=obj.inventory_sources.all(), status__in=ACTIVE_STATES)]) + if len(active_jobs) > 0: + raise StateConflict({"conflict": "Resource is being used by running jobs", + "active_jobs": active_jobs}) + return True class InventorySourceAccess(BaseAccess): ''' @@ -489,9 +533,9 @@ class InventorySourceAccess(BaseAccess): model = InventorySource def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.all() qs = qs.select_related('created_by', 'modified_by', 'group', 'inventory') - inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) + inventory_ids = self.user.get_queryset(Inventory) return qs.filter(Q(inventory_id__in=inventory_ids) | Q(group__inventory_id__in=inventory_ids)) @@ -517,7 +561,12 @@ class InventorySourceAccess(BaseAccess): return False def can_start(self, obj): - return self.can_change(obj, {}) and obj.can_update + if obj and obj.group: + return obj.can_update and self.user in obj.group.inventory.update_role + elif obj and obj.inventory: + return obj.can_update and self.user in obj.inventory.update_role + return False + class InventoryUpdateAccess(BaseAccess): ''' @@ -529,14 +578,23 @@ class InventoryUpdateAccess(BaseAccess): model = InventoryUpdate def get_queryset(self): - qs = InventoryUpdate.objects.filter(active=True).distinct() + qs = InventoryUpdate.objects.distinct() qs = qs.select_related('created_by', 'modified_by', 'inventory_source__group', 'inventory_source__inventory') inventory_sources_qs = self.user.get_queryset(InventorySource) return qs.filter(inventory_source__in=inventory_sources_qs) def can_cancel(self, obj): - return self.can_change(obj, {}) and obj.can_cancel + if not obj.can_cancel: + return False + if self.user.is_superuser or self.user == obj.created_by: + return True + # Inventory cascade deletes to inventory update, descends from org admin + return self.user in obj.inventory_source.inventory.admin_role + + @check_superuser + def can_delete(self, obj): + return self.user in obj.inventory_source.inventory.admin_role class CredentialAccess(BaseAccess): ''' @@ -560,110 +618,123 @@ class CredentialAccess(BaseAccess): """Return the queryset for credentials, based on what the user is permitted to see. """ - # Create a base queryset. - # If the user is a superuser, and therefore can see everything, this - # is also sufficient, and we are done. - qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by', 'user', 'team') - if self.user.is_superuser: - return qs + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('created_by', 'modified_by').all() - # Get the list of organizations for which the user is an admin - orgs_as_admin_ids = set(self.user.admin_of_organizations.filter(active=True).values_list('id', flat=True)) - return qs.filter( - Q(user=self.user) | - Q(user__organizations__id__in=orgs_as_admin_ids) | - Q(user__admin_of_organizations__id__in=orgs_as_admin_ids) | - Q(team__organization__id__in=orgs_as_admin_ids, team__active=True) | - Q(team__users__in=[self.user], team__active=True) - ) + @check_superuser + def can_read(self, obj): + return self.user in obj.read_role + @check_superuser def can_add(self, data): - if self.user.is_superuser: + if not data: # So the browseable API will work return True user_pk = get_pk_from_dict(data, 'user') if user_pk: user_obj = get_object_or_400(User, pk=user_pk) - return self.user.can_access(User, 'change', user_obj, None) + return check_user_access(self.user, User, 'change', user_obj, None) team_pk = get_pk_from_dict(data, 'team') if team_pk: team_obj = get_object_or_400(Team, pk=team_pk) - return self.user.can_access(Team, 'change', team_obj, None) + return check_user_access(self.user, Team, 'change', team_obj, None) + organization_pk = get_pk_from_dict(data, 'organization') + if organization_pk: + organization_obj = get_object_or_400(Organization, pk=organization_pk) + return check_user_access(self.user, Organization, 'change', organization_obj, None) return False + @check_superuser + def can_use(self, obj): + return self.user in obj.use_role + + @check_superuser def can_change(self, obj, data): - if self.user.is_superuser: - return True - if not self.can_add(data): + if not obj: return False - if self.user == obj.created_by: - return True - if obj.user: - if self.user == obj.user: + + # Check access to organizations + organization_pk = get_pk_from_dict(data, 'organization') + if data and 'organization' in data and organization_pk != getattr(obj, 'organization_id', None): + if organization_pk: + # admin permission to destination organization is mandatory + new_organization_obj = get_object_or_400(Organization, pk=organization_pk) + if self.user not in new_organization_obj.admin_role: + return False + # admin permission to existing organization is also mandatory + if obj.organization: + if self.user not in obj.organization.admin_role: + return False + + if obj.organization: + if self.user in obj.organization.admin_role: return True - if obj.user.organizations.filter(active=True, admins__in=[self.user]).exists(): - return True - if obj.user.admin_of_organizations.filter(active=True, admins__in=[self.user]).exists(): - return True - if obj.team: - if self.user in obj.team.organization.admins.filter(is_active=True): - return True - return False + + return self.user in obj.admin_role def can_delete(self, obj): # Unassociated credentials may be marked deleted by anyone, though we # shouldn't ever end up with those. - if obj.user is None and obj.team is None: - return True + #if obj.user is None and obj.team is None: + # return True return self.can_change(obj, None) class TeamAccess(BaseAccess): ''' I can see a team when: - I'm a superuser. - - I'm an admin of the team's organization. + - I'm an admin of the team - I'm a member of that team. I can create/change a team when: - I'm a superuser. - - I'm an org admin for the team's org. + - I'm an admin for the team ''' model = Team def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by', 'organization') - if self.user.is_superuser: - return qs - return qs.filter( - Q(organization__admins__in=[self.user], organization__active=True) | - Q(users__in=[self.user]) - ) + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('created_by', 'modified_by', 'organization').all() + @check_superuser def can_add(self, data): - if self.user.is_superuser: + if not data: # So the browseable API will work + return Organization.accessible_objects(self.user, 'admin_role').exists() + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + if self.user in org.admin_role: return True - else: - org_pk = get_pk_from_dict(data, 'organization') - org = get_object_or_400(Organization, pk=org_pk) - if self.user.can_access(Organization, 'change', org, None): - return True return False def can_change(self, obj, data): # Prevent moving a team to a different organization. org_pk = get_pk_from_dict(data, 'organization') if obj and org_pk and obj.organization.pk != org_pk: - raise PermissionDenied('Unable to change organization on a team') + raise PermissionDenied('Unable to change organization on a team.') if self.user.is_superuser: return True - if self.user in obj.organization.admins.all(): - return True - return False + return self.user in obj.admin_role def can_delete(self, obj): return self.can_change(obj, None) + def can_attach(self, obj, sub_obj, relationship, *args, **kwargs): + """Reverse obj and sub_obj, defer to RoleAccess if this is an assignment + of a resource role to the team.""" + if isinstance(sub_obj, Role) and isinstance(sub_obj.content_object, ResourceMixin): + role_access = RoleAccess(self.user) + return role_access.can_attach(sub_obj, obj, 'member_role.parents', + *args, **kwargs) + return super(TeamAccess, self).can_attach(obj, sub_obj, relationship, + *args, **kwargs) + + def can_unattach(self, obj, sub_obj, relationship, *args, **kwargs): + if isinstance(sub_obj, Role) and isinstance(sub_obj.content_object, ResourceMixin): + role_access = RoleAccess(self.user) + return role_access.can_unattach(sub_obj, obj, 'member_role.parents', + *args, **kwargs) + return super(TeamAccess, self).can_unattach(obj, sub_obj, relationship, + *args, **kwargs) + class ProjectAccess(BaseAccess): ''' I can see projects when: @@ -683,54 +754,40 @@ class ProjectAccess(BaseAccess): model = Project def get_queryset(self): - qs = Project.objects.filter(active=True).distinct() - qs = qs.select_related('modified_by', 'credential', 'current_update', 'last_update') - if self.user.is_superuser: - return qs - team_ids = set(Team.objects.filter(users__in=[self.user]).values_list('id', flat=True)) - qs = qs.filter(Q(created_by=self.user, organizations__isnull=True) | - Q(organizations__admins__in=[self.user], organizations__active=True) | - Q(organizations__users__in=[self.user], organizations__active=True) | - Q(teams__in=team_ids)) - allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] - allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] - - deploy_permissions_ids = set(Permission.objects.filter( - Q(user=self.user) | Q(team_id__in=team_ids), - active=True, - permission_type__in=allowed_deploy, - ).values_list('id', flat=True)) - check_permissions_ids = set(Permission.objects.filter( - Q(user=self.user) | Q(team_id__in=team_ids), - active=True, - permission_type__in=allowed_check, - ).values_list('id', flat=True)) - - perm_deploy_qs = qs.filter(permissions__in=deploy_permissions_ids) - perm_check_qs = qs.filter(permissions__in=check_permissions_ids) - return qs | perm_deploy_qs | perm_check_qs + if self.user.is_superuser or self.user.is_system_auditor: + return self.model.objects.all() + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('modified_by', 'credential', 'current_job', 'last_job').all() + @check_superuser def can_add(self, data): - if self.user.is_superuser: - return True - if self.user.admin_of_organizations.filter(active=True).exists(): - return True - return False + if not data: # So the browseable API will work + return Organization.accessible_objects(self.user, 'admin_role').exists() + organization_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=organization_pk) + return self.user in org.admin_role + @check_superuser def can_change(self, obj, data): - if self.user.is_superuser: - return True - if obj.created_by == self.user and not obj.organizations.filter(active=True).count(): - return True - if obj.organizations.filter(active=True, admins__in=[self.user]).exists(): - return True - return False + return self.user in obj.admin_role def can_delete(self, obj): - return self.can_change(obj, None) + is_change_allowed = self.can_change(obj, None) + if not is_change_allowed: + return False + active_jobs = [] + active_jobs.extend([dict(type="job", id=o.id) + for o in Job.objects.filter(project=obj, status__in=ACTIVE_STATES)]) + active_jobs.extend([dict(type="project_update", id=o.id) + for o in ProjectUpdate.objects.filter(project=obj, status__in=ACTIVE_STATES)]) + if len(active_jobs) > 0: + raise StateConflict({"conflict": "Resource is being used by running jobs", + "active_jobs": active_jobs}) + return True + @check_superuser def can_start(self, obj): - return self.can_change(obj, {}) and obj.can_update + return obj and self.user in obj.update_role class ProjectUpdateAccess(BaseAccess): ''' @@ -742,109 +799,25 @@ class ProjectUpdateAccess(BaseAccess): model = ProjectUpdate def get_queryset(self): - qs = ProjectUpdate.objects.filter(active=True).distinct() + if self.user.is_superuser or self.user.is_system_auditor: + return self.model.objects.all() + qs = ProjectUpdate.objects.distinct() qs = qs.select_related('created_by', 'modified_by', 'project') project_ids = set(self.user.get_queryset(Project).values_list('id', flat=True)) return qs.filter(project_id__in=project_ids) + @check_superuser def can_cancel(self, obj): - return self.can_change(obj, {}) and obj.can_cancel - - def can_delete(self, obj): - return obj and self.user.can_access(Project, 'delete', obj.project) - -class PermissionAccess(BaseAccess): - ''' - I can see a permission when: - - I'm a superuser. - - I'm an org admin and it's for a user in my org. - - I'm an org admin and it's for a team in my org. - - I'm a user and it's assigned to me. - - I'm a member of a team and it's assigned to the team. - I can create/change/delete when: - - I'm a superuser. - - I'm an org admin and the team/user is in my org and the inventory is in - my org and the project is in my org. - ''' - - model = Permission - - def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by', 'user', 'team', 'inventory', - 'project') - if self.user.is_superuser: - return qs - orgs_as_admin_ids = set(self.user.admin_of_organizations.filter(active=True).values_list('id', flat=True)) - return qs.filter( - Q(user__organizations__in=orgs_as_admin_ids) | - Q(user__admin_of_organizations__in=orgs_as_admin_ids) | - Q(team__organization__in=orgs_as_admin_ids, team__active=True) | - Q(user=self.user) | - Q(team__users__in=[self.user], team__active=True) - ) - - def can_add(self, data): - if not data: - return True # generic add permission check - user_pk = get_pk_from_dict(data, 'user') - team_pk = get_pk_from_dict(data, 'team') - if user_pk: - user = get_object_or_400(User, pk=user_pk) - if not self.user.can_access(User, 'admin', user, None): - return False - elif team_pk: - team = get_object_or_400(Team, pk=team_pk) - if not self.user.can_access(Team, 'admin', team, None): - return False - else: + if not obj.can_cancel: return False - inventory_pk = get_pk_from_dict(data, 'inventory') - if inventory_pk: - inventory = get_object_or_400(Inventory, pk=inventory_pk) - if not self.user.can_access(Inventory, 'admin', inventory, None): - return False - project_pk = get_pk_from_dict(data, 'project') - if project_pk: - project = get_object_or_400(Project, pk=project_pk) - if not self.user.can_access(Project, 'admin', project, None): - return False - # FIXME: user/team, inventory and project should probably all be part - # of the same organization. - return True - - def can_change(self, obj, data): - # Prevent assigning a permission to a different user. - user_pk = get_pk_from_dict(data, 'user') - if obj and user_pk and obj.user and obj.user.pk != user_pk: - raise PermissionDenied('Unable to change user on a permission') - # Prevent assigning a permission to a different team. - team_pk = get_pk_from_dict(data, 'team') - if obj and team_pk and obj.team and obj.team.pk != team_pk: - raise PermissionDenied('Unable to change team on a permission') - if self.user.is_superuser: - return True - # If changing inventory, verify access to the new inventory. - new_inventory_pk = get_pk_from_dict(data, 'inventory') - if obj and new_inventory_pk and obj.inventory and obj.inventory.pk != new_inventory_pk: - inventory = get_object_or_400(Inventory, pk=new_inventory_pk) - if not self.user.can_access(Inventory, 'admin', inventory, None): - return False - # If changing project, verify access to the new project. - new_project = get_pk_from_dict(data, 'project') - if obj and new_project and obj.project and obj.project.pk != new_project: - project = get_object_or_400(Project, pk=new_project) - if not self.user.can_access(Project, 'admin', project, None): - return False - # Check for admin access to the user or team. - if obj.user and self.user.can_access(User, 'admin', obj.user, None): - return True - if obj.team and self.user.can_access(Team, 'admin', obj.team, None): - return True - return False + if self.user == obj.created_by: + return True + # Project updates cascade delete with project, admin role descends from org admin + return self.user in obj.project.admin_role + @check_superuser def can_delete(self, obj): - return self.can_change(obj, None) + return obj and self.user in obj.project.admin_role class JobTemplateAccess(BaseAccess): ''' @@ -862,76 +835,31 @@ class JobTemplateAccess(BaseAccess): model = JobTemplate def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'modified_by', 'inventory', 'project', - 'credential', 'cloud_credential', 'next_schedule') - if self.user.is_superuser: - return qs - credential_ids = self.user.get_queryset(Credential) - inventory_ids = self.user.get_queryset(Inventory) - base_qs = qs.filter( - Q(credential_id__in=credential_ids) | Q(credential__isnull=True), - Q(cloud_credential_id__in=credential_ids) | Q(cloud_credential__isnull=True), - ) - org_admin_ids = base_qs.filter( - Q(project__organizations__admins__in=[self.user]) | - (Q(project__isnull=True) & Q(job_type=PERM_INVENTORY_SCAN) & Q(inventory__organization__admins__in=[self.user])) - ) - - allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] - allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] - - team_ids = Team.objects.filter(users__in=[self.user]) - - # TODO: I think the below queries can be combined - deploy_permissions_ids = Permission.objects.filter( - Q(user=self.user) | Q(team_id__in=team_ids), - active=True, - permission_type__in=allowed_deploy, - ) - check_permissions_ids = Permission.objects.filter( - Q(user=self.user) | Q(team_id__in=team_ids), - active=True, - permission_type__in=allowed_check, - ) - - perm_deploy_ids = base_qs.filter( - job_type=PERM_INVENTORY_DEPLOY, - inventory__permissions__in=deploy_permissions_ids, - project__permissions__in=deploy_permissions_ids, - inventory__permissions__pk=F('project__permissions__pk'), - inventory_id__in=inventory_ids, - ) - - perm_check_ids = base_qs.filter( - job_type=PERM_INVENTORY_CHECK, - inventory__permissions__in=check_permissions_ids, - project__permissions__in=check_permissions_ids, - inventory__permissions__pk=F('project__permissions__pk'), - inventory_id__in=inventory_ids, - ) - - return base_qs.filter( - Q(id__in=org_admin_ids) | - Q(id__in=perm_deploy_ids) | - Q(id__in=perm_check_ids) - ) + if self.user.is_superuser or self.user.is_system_auditor: + qs = self.model.objects.all() + else: + qs = self.model.accessible_objects(self.user, 'read_role') + return qs.select_related('created_by', 'modified_by', 'inventory', 'project', + 'credential', 'cloud_credential', 'next_schedule').all() + @check_superuser def can_read(self, obj): - # you can only see the job templates that you have permission to launch. - return self.can_start(obj, validate_license=False) + return self.user in obj.read_role def can_add(self, data): ''' a user can create a job template if they are a superuser, an org admin of any org that the project is a member, or if they have user or team based permissions tying the project to the inventory source for the - given action as well as the 'create' deploy permission. + given action as well as the 'create' deploy permission. Users who are able to create deploy jobs can also run normal and check (dry run) jobs. ''' - if not data or '_method' in data: # So the browseable API will work? + if not data: # So the browseable API will work return True + # if reference_obj is provided, determine if it can be coppied + reference_obj = data.pop('reference_obj', None) + if 'job_type' in data and data['job_type'] == PERM_INVENTORY_SCAN: self.check_license(feature='system_tracking') @@ -941,71 +869,57 @@ class JobTemplateAccess(BaseAccess): if self.user.is_superuser: return True - # If a credential is provided, the user should have read access to it. - credential_pk = get_pk_from_dict(data, 'credential') - if credential_pk: - credential = get_object_or_400(Credential, pk=credential_pk) - if not self.user.can_access(Credential, 'read', credential): + def get_value(Class, field): + if reference_obj: + return getattr(reference_obj, field, None) + else: + pk = get_pk_from_dict(data, field) + if pk: + return get_object_or_400(Class, pk=pk) + else: + return None + + # If a credential is provided, the user should have use access to it. + credential = get_value(Credential, 'credential') + if credential: + if self.user not in credential.use_role: return False - # If a cloud credential is provided, the user should have read access. - cloud_credential_pk = get_pk_from_dict(data, 'cloud_credential') - if cloud_credential_pk: - cloud_credential = get_object_or_400(Credential, - pk=cloud_credential_pk) - if not self.user.can_access(Credential, 'read', cloud_credential): + # If a cloud credential is provided, the user should have use access. + cloud_credential = get_value(Credential, 'cloud_credential') + if cloud_credential: + if self.user not in cloud_credential.use_role: return False - # Check that the given inventory ID is valid. - inventory_pk = get_pk_from_dict(data, 'inventory') - inventory = Inventory.objects.filter(id=inventory_pk) - if not inventory.exists(): - return False # Does this make sense? Maybe should check read access + # If a network credential is provided, the user should have use access. + network_credential = get_value(Credential, 'network_credential') + if network_credential: + if self.user not in network_credential.use_role: + return False - project_pk = get_pk_from_dict(data, 'project') + # If an inventory is provided, the user should have use access. + inventory = get_value(Inventory, 'inventory') + if inventory: + if self.user not in inventory.use_role: + return False + + project = get_value(Project, 'project') if 'job_type' in data and data['job_type'] == PERM_INVENTORY_SCAN: - if not project_pk and self.user.can_access(Organization, 'change', inventory[0].organization, None): + if inventory: + org = inventory.organization + accessible = self.user in org.admin_role + else: + accessible = False + if not project and accessible: return True - elif not self.user.can_access(Organization, "change", inventory[0].organization, None): + elif not accessible: return False # If the user has admin access to the project (as an org admin), should # be able to proceed without additional checks. - project = get_object_or_400(Project, pk=project_pk) - if self.user.can_access(Project, 'admin', project, None): - return True - - # Otherwise, check for explicitly granted permissions to create job templates - # for the project and inventory. - permission_qs = Permission.objects.filter( - Q(user=self.user) | Q(team__users__in=[self.user]), - inventory=inventory, - project=project, - active=True, - #permission_type__in=[PERM_INVENTORY_CHECK, PERM_INVENTORY_DEPLOY], - permission_type=PERM_JOBTEMPLATE_CREATE, - ) - if permission_qs.exists(): - return True - return False - - # job_type = data.get('job_type', None) - - # for perm in permission_qs: - # # if you have run permissions, you can also create check jobs - # if job_type == PERM_INVENTORY_CHECK: - # has_perm = True - # # you need explicit run permissions to make run jobs - # elif job_type == PERM_INVENTORY_DEPLOY and perm.permission_type == PERM_INVENTORY_DEPLOY: - # has_perm = True - # if not has_perm: - # return False - # return True - - # shouldn't really matter with permissions given, but make sure the user - # is also currently on the team in case they were added a per-user permission and then removed - # from the project. - #if not project.teams.filter(users__in=[self.user]).count(): - # return False + if project: + return self.user in project.use_role + else: + return False def can_start(self, obj, validate_license=True): # Check license. @@ -1019,120 +933,125 @@ class JobTemplateAccess(BaseAccess): # Super users can start any job if self.user.is_superuser: return True - # Check to make sure both the inventory and project exist - if obj.inventory is None: - return False + if obj.job_type == PERM_INVENTORY_SCAN: - if obj.project is None and self.user.can_access(Organization, 'change', obj.inventory.organization, None): - return True - if not self.user.can_access(Organization, 'change', obj.inventory.organization, None): - return False - if obj.project is None: - return False - # If the user has admin access to the project they can start a job - if self.user.can_access(Project, 'admin', obj.project, None): - return True + # Scan job with default project, must have JT execute or be org admin + if obj.project is None and obj.inventory: + return (self.user in obj.execute_role or + self.user in obj.inventory.organization.admin_role) - # Otherwise check for explicitly granted permissions - permission_qs = Permission.objects.filter( - Q(user=self.user) | Q(team__users__in=[self.user]), - inventory=obj.inventory, - project=obj.project, - active=True, - permission_type__in=[PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_CHECK, PERM_INVENTORY_DEPLOY], - ) - - has_perm = False - for perm in permission_qs: - # If you have job template create permission that implies both CHECK and DEPLOY - # If you have DEPLOY permissions you can run both CHECK and DEPLOY - if perm.permission_type in [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] and \ - obj.job_type == PERM_INVENTORY_DEPLOY: - has_perm = True - # If you only have CHECK permission then you can only run CHECK - if perm.permission_type in [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] and \ - obj.job_type == PERM_INVENTORY_CHECK: - has_perm = True - - dep_access = self.user.can_access(Inventory, 'read', obj.inventory) and self.user.can_access(Project, 'read', obj.project) - return dep_access and has_perm + return self.user in obj.execute_role def can_change(self, obj, data): data_for_change = data + if self.user not in obj.admin_role and not self.user.is_superuser: + return False if data is not None: - data_for_change = dict(data) - for required_field in ('credential', 'cloud_credential', 'inventory', 'project'): + data = dict(data) + + if self.changes_are_non_sensitive(obj, data): + if 'job_type' in data and obj.job_type != data['job_type'] and data['job_type'] == PERM_INVENTORY_SCAN: + self.check_license(feature='system_tracking') + + if 'survey_enabled' in data and obj.survey_enabled != data['survey_enabled'] and data['survey_enabled']: + self.check_license(feature='surveys') + return True + + for required_field in ('credential', 'cloud_credential', 'network_credential', 'inventory', 'project'): required_obj = getattr(obj, required_field, None) if required_field not in data_for_change and required_obj is not None: data_for_change[required_field] = required_obj.pk return self.can_read(obj) and self.can_add(data_for_change) + def changes_are_non_sensitive(self, obj, data): + ''' + Return true if the changes being made are considered nonsensitive, and + thus can be made by a job template administrator which may not have access + to the any inventory, project, or credentials associated with the template. + ''' + # We are white listing fields that can + field_whitelist = [ + 'name', 'description', 'forks', 'limit', 'verbosity', 'extra_vars', + 'job_tags', 'force_handlers', 'skip_tags', 'ask_variables_on_launch', + 'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch', + 'ask_credential_on_launch', 'survey_enabled' + ] + + for k, v in data.items(): + if hasattr(obj, k) and getattr(obj, k) != v: + if k not in field_whitelist and v != getattr(obj, '%s_id' % k, None): + return False + return True + + def can_update_sensitive_fields(self, obj, data): + project_id = data.get('project', obj.project.id if obj.project else None) + inventory_id = data.get('inventory', obj.inventory.id if obj.inventory else None) + credential_id = data.get('credential', obj.credential.id if obj.credential else None) + cloud_credential_id = data.get('cloud_credential', obj.cloud_credential.id if obj.cloud_credential else None) + network_credential_id = data.get('network_credential', obj.network_credential.id if obj.network_credential else None) + + if project_id and self.user not in Project.objects.get(pk=project_id).use_role: + return False + if inventory_id and self.user not in Inventory.objects.get(pk=inventory_id).use_role: + return False + if credential_id and self.user not in Credential.objects.get(pk=credential_id).use_role: + return False + if cloud_credential_id and self.user not in Credential.objects.get(pk=cloud_credential_id).use_role: + return False + if network_credential_id and self.user not in Credential.objects.get(pk=network_credential_id).use_role: + return False + + return True + def can_delete(self, obj): - add_obj = dict(credential=obj.credential.id if obj.credential is not None else None, - cloud_credential=obj.cloud_credential.id if obj.cloud_credential is not None else None, - inventory=obj.inventory.id if obj.inventory is not None else None, - project=obj.project.id if obj.project is not None else None, - job_type=obj.job_type) - return self.can_add(add_obj) + is_delete_allowed = self.user.is_superuser or self.user in obj.admin_role + if not is_delete_allowed: + return False + active_jobs = [dict(type="job", id=o.id) + for o in obj.jobs.filter(status__in=ACTIVE_STATES)] + if len(active_jobs) > 0: + raise StateConflict({"conflict": "Resource is being used by running jobs", + "active_jobs": active_jobs}) + return True class JobAccess(BaseAccess): + ''' + I can see jobs when: + - I am a superuser. + - I can see its job template + - I am an admin or auditor of the organization which contains its inventory + - I am an admin or auditor of the organization which contains its project + I can delete jobs when: + - I am an admin of the organization which contains its inventory + - I am an admin of the organization which contains its project + ''' model = Job def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.distinct() qs = qs.select_related('created_by', 'modified_by', 'job_template', 'inventory', 'project', 'credential', 'cloud_credential', 'job_template') qs = qs.prefetch_related('unified_job_template') - if self.user.is_superuser: - return qs - credential_ids = self.user.get_queryset(Credential) - base_qs = qs.filter( - credential_id__in=credential_ids, - ) - org_admin_ids = base_qs.filter( - Q(project__organizations__admins__in=[self.user]) | - (Q(project__isnull=True) & Q(job_type=PERM_INVENTORY_SCAN) & Q(inventory__organization__admins__in=[self.user])) + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() + + qs_jt = qs.filter( + job_template__in=JobTemplate.accessible_objects(self.user, 'read_role') ) - allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] - allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] - team_ids = Team.objects.filter(users__in=[self.user]) + org_access_qs = Organization.objects.filter( + Q(admin_role__members=self.user) | Q(auditor_role__members=self.user)) + if not org_access_qs.exists(): + return qs_jt - # TODO: I think the below queries can be combined - deploy_permissions_ids = Permission.objects.filter( - Q(user=self.user) | Q(team__in=team_ids), - active=True, - permission_type__in=allowed_deploy, - ) - check_permissions_ids = Permission.objects.filter( - Q(user=self.user) | Q(team__in=team_ids), - active=True, - permission_type__in=allowed_check, - ) - - perm_deploy_ids = base_qs.filter( - job_type=PERM_INVENTORY_DEPLOY, - inventory__permissions__in=deploy_permissions_ids, - project__permissions__in=deploy_permissions_ids, - inventory__permissions__pk=F('project__permissions__pk'), - ) - - perm_check_ids = base_qs.filter( - job_type=PERM_INVENTORY_CHECK, - inventory__permissions__in=check_permissions_ids, - project__permissions__in=check_permissions_ids, - inventory__permissions__pk=F('project__permissions__pk'), - ) - - return base_qs.filter( - Q(id__in=org_admin_ids) | - Q(id__in=perm_deploy_ids) | - Q(id__in=perm_check_ids) - ) + return qs.filter( + Q(job_template__in=JobTemplate.accessible_objects(self.user, 'read_role')) | + Q(inventory__organization__in=org_access_qs) | + Q(project__organization__in=org_access_qs)).distinct() def can_add(self, data): - if not data or '_method' in data: # So the browseable API will work? + if not data: # So the browseable API will work return True if not self.user.is_superuser: return False @@ -1157,8 +1076,13 @@ class JobAccess(BaseAccess): def can_change(self, obj, data): return obj.status == 'new' and self.can_read(obj) and self.can_add(data) + @check_superuser def can_delete(self, obj): - return self.can_read(obj) + if obj.inventory is not None and self.user in obj.inventory.organization.admin_role: + return True + if obj.project is not None and self.user in obj.project.organization.admin_role: + return True + return False def can_start(self, obj): self.check_license() @@ -1166,17 +1090,27 @@ class JobAccess(BaseAccess): # A super user can relaunch a job if self.user.is_superuser: return True + # If a user can launch the job template then they can relaunch a job from that # job template - has_perm = False - if obj.job_template is not None and self.user.can_access(JobTemplate, 'start', obj.job_template): - has_perm = True - dep_access_inventory = self.user.can_access(Inventory, 'read', obj.inventory) - dep_access_project = obj.project is None or self.user.can_access(Project, 'read', obj.project) - return self.can_read(obj) and dep_access_inventory and dep_access_project and has_perm + if obj.job_template is not None: + return self.user in obj.job_template.execute_role + + inventory_access = self.user in obj.inventory.use_role + credential_access = self.user in obj.credential.use_role + + org_access = self.user in obj.inventory.organization.admin_role + project_access = obj.project is None or self.user in obj.project.admin_role + + return inventory_access and credential_access and (org_access or project_access) def can_cancel(self, obj): - return self.can_read(obj) and obj.can_cancel + if not obj.can_cancel: + return False + # Delete access allows org admins to stop running jobs + if self.user == obj.created_by or self.can_delete(obj): + return True + return obj.job_template is not None and self.user in obj.job_template.admin_role class SystemJobTemplateAccess(BaseAccess): ''' @@ -1198,59 +1132,39 @@ class AdHocCommandAccess(BaseAccess): ''' I can only see/run ad hoc commands when: - I am a superuser. - - I am an org admin and have permission to read the credential. - - I am a normal user with a user/team permission that has at least read - permission on the inventory and the run_ad_hoc_commands flag set, and I - can read the credential. + - I have read access to the inventory ''' model = AdHocCommand def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.distinct() qs = qs.select_related('created_by', 'modified_by', 'inventory', 'credential') - if self.user.is_superuser: - return qs + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() - credential_ids = set(self.user.get_queryset(Credential).values_list('id', flat=True)) - team_ids = set(Team.objects.filter(active=True, users__in=[self.user]).values_list('id', flat=True)) - - permission_ids = set(Permission.objects.filter( - Q(user=self.user) | Q(team__in=team_ids), - active=True, - permission_type__in=PERMISSION_TYPES_ALLOWING_INVENTORY_READ, - run_ad_hoc_commands=True, - ).values_list('id', flat=True)) - - inventory_qs = self.user.get_queryset(Inventory) - inventory_qs = inventory_qs.filter(Q(permissions__in=permission_ids) | Q(organization__admins__in=[self.user])) - inventory_ids = set(inventory_qs.values_list('id', flat=True)) - - qs = qs.filter( - credential_id__in=credential_ids, - inventory_id__in=inventory_ids, - ) - return qs + inventory_qs = Inventory.accessible_objects(self.user, 'read_role') + return qs.filter(inventory__in=inventory_qs) def can_add(self, data): - if not data or '_method' in data: # So the browseable API will work? + if not data: # So the browseable API will work return True self.check_license() - # If a credential is provided, the user should have read access to it. + # If a credential is provided, the user should have use access to it. credential_pk = get_pk_from_dict(data, 'credential') if credential_pk: - credential = get_object_or_400(Credential, pk=credential_pk, active=True) - if not self.user.can_access(Credential, 'read', credential): + credential = get_object_or_400(Credential, pk=credential_pk) + if self.user not in credential.use_role: return False # Check that the user has the run ad hoc command permission on the # given inventory. inventory_pk = get_pk_from_dict(data, 'inventory') if inventory_pk: - inventory = get_object_or_400(Inventory, pk=inventory_pk, active=True) - if not self.user.can_access(Inventory, 'run_ad_hoc_commands', inventory): + inventory = get_object_or_400(Inventory, pk=inventory_pk) + if self.user not in inventory.adhoc_role: return False return True @@ -1258,8 +1172,9 @@ class AdHocCommandAccess(BaseAccess): def can_change(self, obj, data): return False + @check_superuser def can_delete(self, obj): - return self.can_read(obj) + return obj.inventory is not None and self.user in obj.inventory.organization.admin_role def can_start(self, obj): return self.can_add({ @@ -1268,7 +1183,11 @@ class AdHocCommandAccess(BaseAccess): }) def can_cancel(self, obj): - return self.can_read(obj) and obj.can_cancel + if not obj.can_cancel: + return False + if self.user == obj.created_by: + return True + return obj.inventory is not None and self.user in obj.inventory.admin_role class AdHocCommandEventAccess(BaseAccess): ''' @@ -1280,15 +1199,14 @@ class AdHocCommandEventAccess(BaseAccess): def get_queryset(self): qs = self.model.objects.distinct() - qs = qs.select_related('created_by', 'modified_by', 'ad_hoc_command', 'host') + qs = qs.select_related('ad_hoc_command', 'host') - if self.user.is_superuser: - return qs + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() ad_hoc_command_qs = self.user.get_queryset(AdHocCommand) host_qs = self.user.get_queryset(Host) - qs = qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), - ad_hoc_command__in=ad_hoc_command_qs) - return qs + return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), + ad_hoc_command__in=ad_hoc_command_qs) def can_add(self, data): return False @@ -1307,11 +1225,10 @@ class JobHostSummaryAccess(BaseAccess): model = JobHostSummary def get_queryset(self): - qs = self.model.objects.distinct() - qs = qs.select_related('created_by', 'modified_by', 'job', 'job__job_template', - 'host') - if self.user.is_superuser: - return qs + qs = self.model.objects + qs = qs.select_related('job', 'job__job_template', 'host') + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() job_qs = self.user.get_queryset(Job) host_qs = self.user.get_queryset(Host) return qs.filter(job__in=job_qs, host__in=host_qs) @@ -1333,9 +1250,8 @@ class JobEventAccess(BaseAccess): model = JobEvent def get_queryset(self): - qs = self.model.objects.distinct() - qs = qs.select_related('created_by', 'modified_by', 'job', 'job__job_template', - 'host', 'parent') + qs = self.model.objects.all() + qs = qs.select_related('job', 'job__job_template', 'host', 'parent') qs = qs.prefetch_related('hosts', 'children') # Filter certain "internal" events generated by async polling. @@ -1343,13 +1259,12 @@ class JobEventAccess(BaseAccess): event_data__icontains='"ansible_job_id": "', event_data__contains='"module_name": "async_status"') - if self.user.is_superuser: - return qs + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() + job_qs = self.user.get_queryset(Job) host_qs = self.user.get_queryset(Host) - qs = qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), - job__in=job_qs) - return qs + return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), job__in=job_qs) def can_add(self, data): return False @@ -1367,11 +1282,11 @@ class UnifiedJobTemplateAccess(BaseAccess): projects without SCM configured or inventory sources without a cloud source. ''' - + model = UnifiedJobTemplate - + def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.all() project_qs = self.user.get_queryset(Project).filter(scm_type__in=[s[0] for s in Project.SCM_TYPE_CHOICES]) inventory_source_qs = self.user.get_queryset(InventorySource).filter(source__in=CLOUD_INVENTORY_SOURCES) job_template_qs = self.user.get_queryset(JobTemplate) @@ -1381,15 +1296,22 @@ class UnifiedJobTemplateAccess(BaseAccess): qs = qs.select_related( 'created_by', 'modified_by', - 'project', - 'inventory', - 'credential', - 'cloud_credential', 'next_schedule', 'last_job', 'current_job', ) - return qs + + # WISH - sure would be nice if the following worked, but it does not. + # In the future, as django and polymorphic libs are upgraded, try again. + + #qs = qs.prefetch_related( + # 'project', + # 'inventory', + # 'credential', + # 'cloud_credential', + #) + + return qs.all() class UnifiedJobAccess(BaseAccess): ''' @@ -1400,7 +1322,7 @@ class UnifiedJobAccess(BaseAccess): model = UnifiedJob def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.all() project_update_qs = self.user.get_queryset(ProjectUpdate) inventory_update_qs = self.user.get_queryset(InventoryUpdate).filter(source__in=CLOUD_INVENTORY_SOURCES) job_qs = self.user.get_queryset(Job) @@ -1414,19 +1336,30 @@ class UnifiedJobAccess(BaseAccess): qs = qs.select_related( 'created_by', 'modified_by', - 'project', - 'inventory', - 'credential', - 'project___credential', - 'inventory_source___credential', - 'inventory_source___inventory', - 'job_template___inventory', - 'job_template___project', - 'job_template___credential', - 'job_template___cloud_credential', ) - qs = qs.prefetch_related('unified_job_template') - return qs + qs = qs.prefetch_related( + 'unified_job_template', + ) + + # WISH - sure would be nice if the following worked, but it does not. + # In the future, as django and polymorphic libs are upgraded, try again. + + #qs = qs.prefetch_related( + # 'project', + # 'inventory', + # 'credential', + # 'job_template', + # 'inventory_source', + # 'cloud_credential', + # 'project___credential', + # 'inventory_source___credential', + # 'inventory_source___inventory', + # 'job_template__inventory', + # 'job_template__project', + # 'job_template__credential', + # 'job_template__cloud_credential', + #) + return qs.all() class ScheduleAccess(BaseAccess): ''' @@ -1436,11 +1369,11 @@ class ScheduleAccess(BaseAccess): model = Schedule def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() + qs = self.model.objects.all() qs = qs.select_related('created_by', 'modified_by') qs = qs.prefetch_related('unified_job_template') - if self.user.is_superuser: - return qs + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() job_template_qs = self.user.get_queryset(JobTemplate) inventory_source_qs = self.user.get_queryset(InventorySource) project_qs = self.user.get_queryset(Project) @@ -1449,18 +1382,16 @@ class ScheduleAccess(BaseAccess): UnifiedJobTemplate.objects.filter(Q(inventorysource__in=inventory_source_qs)) return qs.filter(unified_job_template__in=unified_qs) + @check_superuser def can_read(self, obj): - if self.user.is_superuser: - return True if obj and obj.unified_job_template: job_class = obj.unified_job_template return self.user.can_access(type(job_class), 'read', obj.unified_job_template) else: return False + @check_superuser def can_add(self, data): - if self.user.is_superuser: - return True pk = get_pk_from_dict(data, 'unified_job_template') obj = get_object_or_400(UnifiedJobTemplate, pk=pk) if obj: @@ -1468,24 +1399,128 @@ class ScheduleAccess(BaseAccess): else: return False + @check_superuser def can_change(self, obj, data): - if self.user.is_superuser: - return True if obj and obj.unified_job_template: job_class = obj.unified_job_template return self.user.can_access(type(job_class), 'change', job_class, None) else: return False + @check_superuser def can_delete(self, obj): - if self.user.is_superuser: - return True if obj and obj.unified_job_template: job_class = obj.unified_job_template return self.user.can_access(type(job_class), 'change', job_class, None) else: return False +class NotificationTemplateAccess(BaseAccess): + ''' + I can see/use a notification_template if I have permission to + ''' + model = NotificationTemplate + + def get_queryset(self): + qs = self.model.objects.all() + if self.user.is_superuser or self.user.is_system_auditor: + return qs + return self.model.objects.filter( + Q(organization__in=self.user.admin_of_organizations) | + Q(organization__in=self.user.auditor_of_organizations) + ).distinct() + + def can_read(self, obj): + if self.user.is_superuser or self.user.is_system_auditor: + return True + if obj.organization is not None: + if self.user in obj.organization.admin_role or self.user in obj.organization.auditor_role: + return True + return False + + @check_superuser + def can_add(self, data): + if not data: + return Organization.accessible_objects(self.user, 'admin_role').exists() + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + return self.user in org.admin_role + + @check_superuser + def can_change(self, obj, data): + if obj.organization is None: + # only superusers are allowed to edit orphan notification templates + return False + org_pk = get_pk_from_dict(data, 'organization') + if obj and org_pk and obj.organization.pk != org_pk: + org = get_object_or_400(Organization, pk=org_pk) + if self.user not in org.admin_role: + return False + return self.user in obj.organization.admin_role + + def can_admin(self, obj, data): + return self.can_change(obj, data) + + def can_delete(self, obj): + return self.can_change(obj, None) + +class NotificationAccess(BaseAccess): + ''' + I can see/use a notification if I have permission to + ''' + model = Notification + + def get_queryset(self): + qs = self.model.objects.all() + if self.user.is_superuser or self.user.is_system_auditor: + return qs + return self.model.objects.filter( + Q(notification_template__organization__in=self.user.admin_of_organizations) | + Q(notification_template__organization__in=self.user.auditor_of_organizations) + ).distinct() + + def can_read(self, obj): + return self.user.can_access(NotificationTemplate, 'read', obj.notification_template) + + def can_delete(self, obj): + return self.user.can_access(NotificationTemplate, 'delete', obj.notification_template) + +class LabelAccess(BaseAccess): + ''' + I can see/use a Label if I have permission to associated organization + ''' + model = Label + + def get_queryset(self): + if self.user.is_superuser or self.user.is_system_auditor: + return self.model.objects.all() + return self.model.objects.filter( + organization__in=Organization.accessible_objects(self.user, 'read_role') + ) + + @check_superuser + def can_read(self, obj): + return self.user in obj.organization.read_role + + @check_superuser + def can_add(self, data): + if not data: # So the browseable API will work + return True + + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + return self.user in org.member_role + + @check_superuser + def can_change(self, obj, data): + if self.can_add(data) is False: + return False + + return self.user in obj.organization.admin_role + + def can_delete(self, obj): + return self.can_change(obj, None) + class ActivityStreamAccess(BaseAccess): ''' I can see activity stream events only when I have permission on all objects included in the event @@ -1494,106 +1529,65 @@ class ActivityStreamAccess(BaseAccess): model = ActivityStream def get_queryset(self): - qs = self.model.objects.distinct() - #qs = qs.select_related('created_by') + ''' + The full set is returned if the user is: + - System Administrator + - System Auditor + These users will be able to see orphaned activity stream items + (the related resource has been deleted), as well as the other + obscure cases listed here + + Complex permissions omitted from the activity stream of a normal user: + - host access via group + - permissions (from prior versions) + - notifications via team admin access + + Activity stream events that have been omitted from list for + normal users since 2.4: + - unified job templates + - unified jobs + - schedules + - custom inventory scripts + ''' + qs = self.model.objects.all() qs = qs.select_related('actor') qs = qs.prefetch_related('organization', 'user', 'inventory', 'host', 'group', 'inventory_source', 'inventory_update', 'credential', 'team', 'project', 'project_update', - 'permission', 'job_template', 'job') - if self.user.is_superuser: - return qs + 'permission', 'job_template', 'job', 'ad_hoc_command', + 'notification_template', 'notification', 'label', 'role') + if self.user.is_superuser or self.user.is_system_auditor: + return qs.all() - user_admin_orgs = self.user.admin_of_organizations.all() - user_orgs = self.user.organizations.all() + inventory_set = Inventory.accessible_objects(self.user, 'read_role') + credential_set = Credential.accessible_objects(self.user, 'read_role') + organization_set = Organization.accessible_objects(self.user, 'read_role') + admin_of_orgs = Organization.accessible_objects(self.user, 'admin_role') + group_set = Group.objects.filter(inventory__in=inventory_set) + project_set = Project.accessible_objects(self.user, 'read_role') + jt_set = JobTemplate.accessible_objects(self.user, 'read_role') + team_set = Team.accessible_objects(self.user, 'read_role') - #Organization filter - qs = qs.filter(Q(organization__admins__in=[self.user]) | Q(organization__users__in=[self.user])) - - #User filter - qs = qs.filter(Q(user__pk=self.user.pk) | - Q(user__organizations__in=user_admin_orgs) | - Q(user__organizations__in=user_orgs)) - - #Inventory filter - inventory_qs = self.user.get_queryset(Inventory) - qs.filter(inventory__in=inventory_qs) - - #Host filter - qs.filter(host__inventory__in=inventory_qs) - - #Group filter - qs.filter(group__inventory__in=inventory_qs) - - #Inventory Source Filter - qs.filter(Q(inventory_source__inventory__in=inventory_qs) | - Q(inventory_source__group__inventory__in=inventory_qs)) - - #Inventory Update Filter - qs.filter(Q(inventory_update__inventory_source__inventory__in=inventory_qs) | - Q(inventory_update__inventory_source__group__inventory__in=inventory_qs)) - - #Credential Update Filter - qs.filter(Q(credential__user=self.user) | - Q(credential__user__organizations__in=user_admin_orgs) | - Q(credential__user__admin_of_organizations__in=user_admin_orgs) | - Q(credential__team__organization__in=user_admin_orgs) | - Q(credential__team__users__in=[self.user])) - - #Team Filter - qs.filter(Q(team__organization__admins__in=[self.user]) | - Q(team__users__in=[self.user])) - - #Project Filter - project_qs = self.user.get_queryset(Project) - qs.filter(project__in=project_qs) - - #Project Update Filter - qs.filter(project_update__project__in=project_qs) - - #Permission Filter - permission_qs = self.user.get_queryset(Permission) - qs.filter(permission__in=permission_qs) - - #Job Template Filter - jobtemplate_qs = self.user.get_queryset(JobTemplate) - qs.filter(job_template__in=jobtemplate_qs) - - #Job Filter - job_qs = self.user.get_queryset(Job) - qs.filter(job__in=job_qs) - - # Ad Hoc Command Filter - ad_hoc_command_qs = self.user.get_queryset(AdHocCommand) - qs.filter(ad_hoc_command__in=ad_hoc_command_qs) - - # organization_qs = self.user.get_queryset(Organization) - # user_qs = self.user.get_queryset(User) - # inventory_qs = self.user.get_queryset(Inventory) - # host_qs = self.user.get_queryset(Host) - # group_qs = self.user.get_queryset(Group) - # inventory_source_qs = self.user.get_queryset(InventorySource) - # inventory_update_qs = self.user.get_queryset(InventoryUpdate) - # credential_qs = self.user.get_queryset(Credential) - # team_qs = self.user.get_queryset(Team) - # project_qs = self.user.get_queryset(Project) - # project_update_qs = self.user.get_queryset(ProjectUpdate) - # permission_qs = self.user.get_queryset(Permission) - # job_template_qs = self.user.get_queryset(JobTemplate) - # job_qs = self.user.get_queryset(Job) - # qs = qs.filter(Q(organization__in=organization_qs) | - # Q(user__in=user_qs) | - # Q(inventory__in=inventory_qs) | - # Q(host__in=host_qs) | - # Q(group__in=group_qs) | - # Q(inventory_source__in=inventory_source_qs) | - # Q(credential__in=credential_qs) | - # Q(team__in=team_qs) | - # Q(project__in=project_qs) | - # Q(project_update__in=project_update_qs) | - # Q(permission__in=permission_qs) | - # Q(job_template__in=job_template_qs) | - # Q(job__in=job_qs)) - return qs + return qs.filter( + Q(ad_hoc_command__inventory__in=inventory_set) | + Q(user__in=organization_set.values('member_role__members')) | + Q(user=self.user) | + Q(organization__in=organization_set) | + Q(inventory__in=inventory_set) | + Q(host__inventory__in=inventory_set) | + Q(group__in=group_set) | + Q(inventory_source__inventory__in=inventory_set) | + Q(inventory_update__inventory_source__inventory__in=inventory_set) | + Q(credential__in=credential_set) | + Q(team__in=team_set) | + Q(project__in=project_set) | + Q(project_update__project__in=project_set) | + Q(job_template__in=jt_set) | + Q(job__job_template__in=jt_set) | + Q(notification_template__organization__in=admin_of_orgs) | + Q(notification__notification_template__organization__in=admin_of_orgs) | + Q(label__organization__in=organization_set) | + Q(role__in=Role.visible_roles(self.user)) + ).distinct() def can_add(self, data): return False @@ -1609,33 +1603,98 @@ class CustomInventoryScriptAccess(BaseAccess): model = CustomInventoryScript def get_queryset(self): - qs = self.model.objects.filter(active=True).distinct() - if not self.user.is_superuser: - qs = qs.filter(Q(organization__admins__in=[self.user]) | Q(organization__users__in=[self.user])) - return qs + if self.user.is_superuser or self.user.is_system_auditor: + return self.model.objects.distinct().all() + return self.model.accessible_objects(self.user, 'read_role').all() + + @check_superuser + def can_add(self, data): + if not data: # So the browseable API will work + return Organization.accessible_objects(self.user, 'admin_role').exists() + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + return self.user in org.admin_role + + @check_superuser + def can_admin(self, obj, data=None): + return self.user in obj.admin_role + + @check_superuser + def can_change(self, obj, data): + return self.can_admin(obj) + + @check_superuser + def can_delete(self, obj): + return self.can_admin(obj) + + +class TowerSettingsAccess(BaseAccess): + ''' + - I can see settings when + - I am a super user + - I can edit settings when + - I am a super user + - I can clear settings when + - I am a super user + ''' + + model = TowerSettings + + +class RoleAccess(BaseAccess): + ''' + - I can see roles when + - I am a super user + - I am a member of that role + - The role is a descdendent role of a role I am a member of + - The role is an implicit role of an object that I can see a role of. + ''' + + model = Role def can_read(self, obj): - if self.user.is_superuser: - return True - if not obj.active: + if not obj: return False - return bool(obj.organization in self.user.organizations.all() or obj.organization in self.user.admin_of_organizations.all()) - - def can_add(self, data): - if self.user.is_superuser: + if self.user.is_superuser or self.user.is_system_auditor: return True + + if obj.object_id: + sister_roles = Role.objects.filter( + content_type = obj.content_type, + object_id = obj.object_id + ) + else: + sister_roles = obj + return self.user.roles.filter(descendents__in=sister_roles).exists() + + def can_add(self, obj, data): + # Unsupported for now return False - def can_change(self, obj, data): - if self.user.is_superuser: + def can_attach(self, obj, sub_obj, relationship, data, + skip_sub_obj_read_check=False): + return self.can_unattach(obj, sub_obj, relationship, data, skip_sub_obj_read_check) + + @check_superuser + def can_unattach(self, obj, sub_obj, relationship, data=None, skip_sub_obj_read_check=False): + if not skip_sub_obj_read_check and relationship in ['members', 'member_role.parents']: + if not check_user_access(self.user, sub_obj.__class__, 'read', sub_obj): + return False + + if obj.object_id and \ + isinstance(obj.content_object, ResourceMixin) and \ + self.user in obj.content_object.admin_role: return True return False def can_delete(self, obj): - if self.user.is_superuser: - return True + # Unsupported for now return False + + + + register_access(User, UserAccess) register_access(Organization, OrganizationAccess) register_access(Inventory, InventoryAccess) @@ -1647,7 +1706,6 @@ register_access(Credential, CredentialAccess) register_access(Team, TeamAccess) register_access(Project, ProjectAccess) register_access(ProjectUpdate, ProjectUpdateAccess) -register_access(Permission, PermissionAccess) register_access(JobTemplate, JobTemplateAccess) register_access(Job, JobAccess) register_access(JobHostSummary, JobHostSummaryAccess) @@ -1661,3 +1719,8 @@ register_access(UnifiedJobTemplate, UnifiedJobTemplateAccess) register_access(UnifiedJob, UnifiedJobAccess) register_access(ActivityStream, ActivityStreamAccess) register_access(CustomInventoryScript, CustomInventoryScriptAccess) +register_access(TowerSettings, TowerSettingsAccess) +register_access(Role, RoleAccess) +register_access(NotificationTemplate, NotificationTemplateAccess) +register_access(Notification, NotificationAccess) +register_access(Label, LabelAccess) diff --git a/awx/main/conf.py b/awx/main/conf.py new file mode 100644 index 0000000000..e506432f21 --- /dev/null +++ b/awx/main/conf.py @@ -0,0 +1,50 @@ +# Copyright (c) 2015 Ansible, Inc.. +# All Rights Reserved. + +import logging + +from django.conf import settings as django_settings +from django.db.utils import ProgrammingError +from django.db import OperationalError +from awx.main.models.configuration import TowerSettings + +logger = logging.getLogger('awx.main.conf') + +class TowerConfiguration(object): + + # TODO: Caching so we don't have to hit the database every time for settings + def __getattr__(self, key): + settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST + if key not in settings_manifest: + raise AttributeError("Tower Setting with key '{0}' is not defined in the manifest".format(key)) + default_value = settings_manifest[key]['default'] + ts = TowerSettings.objects.filter(key=key) + try: + if not ts.exists(): + try: + val_actual = getattr(django_settings, key) + except AttributeError: + val_actual = default_value + return val_actual + return ts[0].value_converted + except (ProgrammingError, OperationalError), e: + # Database is not available yet, usually during migrations so lets use the default + logger.debug("Database settings not available yet, using defaults ({0})".format(e)) + return default_value + + def __setattr__(self, key, value): + settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST + if key not in settings_manifest: + raise AttributeError("Tower Setting with key '{0}' does not exist".format(key)) + settings_entry = settings_manifest[key] + try: + settings_actual = TowerSettings.objects.get(key=key) + except TowerSettings.DoesNotExist: + settings_actual = TowerSettings(key=key, + description=settings_entry['description'], + category=settings_entry['category'], + value_type=settings_entry['type']) + settings_actual.value_converted = value + settings_actual.save() + +tower_settings = TowerConfiguration() diff --git a/awx/main/constants.py b/awx/main/constants.py index 64f6265569..bd0e220c1c 100644 --- a/awx/main/constants.py +++ b/awx/main/constants.py @@ -1,5 +1,5 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. -CLOUD_PROVIDERS = ('azure', 'ec2', 'gce', 'rax', 'vmware', 'openstack') +CLOUD_PROVIDERS = ('azure', 'azure_rm', 'ec2', 'gce', 'rax', 'vmware', 'openstack', 'satellite6', 'cloudforms') SCHEDULEABLE_PROVIDERS = CLOUD_PROVIDERS + ('custom',) diff --git a/awx/main/fields.py b/awx/main/fields.py index 0c4ee95ec7..92ed69672f 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -1,14 +1,31 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. +import json + # Django +from django.db.models.signals import ( + post_save, + post_delete, +) +from django.db.models.signals import m2m_changed from django.db import models -from django.db.models.fields.related import SingleRelatedObjectDescriptor +from django.db.models.fields.related import ( + add_lazy_relation, + SingleRelatedObjectDescriptor, + ReverseSingleRelatedObjectDescriptor, + ManyRelatedObjectsDescriptor, + ReverseManyRelatedObjectsDescriptor, +) +from django.utils.encoding import smart_text -# South -from south.modelsinspector import add_introspection_rules +# AWX +from awx.main.models.rbac import batch_role_ancestor_rebuilding, Role +from awx.main.utils import get_current_apps + + +__all__ = ['AutoOneToOneField', 'ImplicitRoleField'] -__all__ = ['AutoOneToOneField'] # Based on AutoOneToOneField from django-annoying: # https://bitbucket.org/offline/django-annoying/src/a0de8b294db3/annoying/fields.py @@ -20,8 +37,8 @@ class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor): try: return super(AutoSingleRelatedObjectDescriptor, self).__get__(instance, instance_type) - except self.related.model.DoesNotExist: - obj = self.related.model(**{self.related.field.name: instance}) + except self.related.related_model.DoesNotExist: + obj = self.related.related_model(**{self.related.field.name: instance}) if self.related.field.rel.parent_link: raise NotImplementedError('not supported with polymorphic!') for f in instance._meta.local_fields: @@ -36,5 +53,200 @@ class AutoOneToOneField(models.OneToOneField): setattr(cls, related.get_accessor_name(), AutoSingleRelatedObjectDescriptor(related)) -add_introspection_rules([([AutoOneToOneField], [], {})], - [r'^awx\.main\.fields\.AutoOneToOneField']) + + + + + +def resolve_role_field(obj, field): + ret = [] + + field_components = field.split('.', 1) + if hasattr(obj, field_components[0]): + obj = getattr(obj, field_components[0]) + else: + return [] + + if obj is None: + return [] + + if len(field_components) == 1: + Role_ = get_current_apps().get_model('main', 'Role') + if type(obj) is not Role_: + raise Exception(smart_text('{} refers to a {}, not a Role'.format(field, type(obj)))) + ret.append(obj.id) + else: + if type(obj) is ManyRelatedObjectsDescriptor: + for o in obj.all(): + ret += resolve_role_field(o, field_components[1]) + else: + ret += resolve_role_field(obj, field_components[1]) + + return ret + + +class ImplicitRoleDescriptor(ReverseSingleRelatedObjectDescriptor): + pass + + +class ImplicitRoleField(models.ForeignKey): + """Implicitly creates a role entry for a resource""" + + def __init__(self, parent_role=None, *args, **kwargs): + self.parent_role = parent_role + + kwargs.setdefault('to', 'Role') + kwargs.setdefault('related_name', '+') + kwargs.setdefault('null', 'True') + super(ImplicitRoleField, self).__init__(*args, **kwargs) + + def deconstruct(self): + name, path, args, kwargs = super(ImplicitRoleField, self).deconstruct() + kwargs['parent_role'] = self.parent_role + return name, path, args, kwargs + + def contribute_to_class(self, cls, name): + super(ImplicitRoleField, self).contribute_to_class(cls, name) + setattr(cls, self.name, ImplicitRoleDescriptor(self)) + + if not hasattr(cls, '__implicit_role_fields'): + setattr(cls, '__implicit_role_fields', []) + getattr(cls, '__implicit_role_fields').append(self) + + post_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save') + post_delete.connect(self._post_delete, cls, True, dispatch_uid='implicit-role-post-delete') + add_lazy_relation(cls, self, "self", self.bind_m2m_changed) + + def bind_m2m_changed(self, _self, _role_class, cls): + if not self.parent_role: + return + + field_names = self.parent_role + if type(field_names) is not list: + field_names = [field_names] + + for field_name in field_names: + # Handle the OR syntax for role parents + if type(field_name) == tuple: + continue + + if field_name.startswith('singleton:'): + continue + + field_name, sep, field_attr = field_name.partition('.') + field = getattr(cls, field_name) + + if type(field) is ReverseManyRelatedObjectsDescriptor or \ + type(field) is ManyRelatedObjectsDescriptor: + + if '.' in field_attr: + raise Exception('Referencing deep roles through ManyToMany fields is unsupported.') + + if type(field) is ReverseManyRelatedObjectsDescriptor: + sender = field.through + else: + sender = field.related.through + + reverse = type(field) is ManyRelatedObjectsDescriptor + m2m_changed.connect(self.m2m_update(field_attr, reverse), sender, weak=False) + + def m2m_update(self, field_attr, _reverse): + def _m2m_update(instance, action, model, pk_set, reverse, **kwargs): + if action == 'post_add' or action == 'pre_remove': + if _reverse: + reverse = not reverse + + if reverse: + for pk in pk_set: + obj = model.objects.get(pk=pk) + if action == 'post_add': + getattr(instance, field_attr).children.add(getattr(obj, self.name)) + if action == 'pre_remove': + getattr(instance, field_attr).children.remove(getattr(obj, self.name)) + + else: + for pk in pk_set: + obj = model.objects.get(pk=pk) + if action == 'post_add': + getattr(instance, self.name).parents.add(getattr(obj, field_attr)) + if action == 'pre_remove': + getattr(instance, self.name).parents.remove(getattr(obj, field_attr)) + return _m2m_update + + + def _post_save(self, instance, created, *args, **kwargs): + Role_ = get_current_apps().get_model('main', 'Role') + ContentType_ = get_current_apps().get_model('contenttypes', 'ContentType') + ct_id = ContentType_.objects.get_for_model(instance).id + with batch_role_ancestor_rebuilding(): + # Create any missing role objects + missing_roles = [] + for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): + cur_role = getattr(instance, implicit_role_field.name, None) + if cur_role is None: + missing_roles.append( + Role_( + role_field=implicit_role_field.name, + content_type_id=ct_id, + object_id=instance.id + ) + ) + if len(missing_roles) > 0: + Role_.objects.bulk_create(missing_roles) + updates = {} + role_ids = [] + for role in Role_.objects.filter(content_type_id=ct_id, object_id=instance.id): + setattr(instance, role.role_field, role) + updates[role.role_field] = role.id + role_ids.append(role.id) + type(instance).objects.filter(pk=instance.pk).update(**updates) + Role.rebuild_role_ancestor_list(role_ids, []) + + # Update parentage if necessary + for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): + cur_role = getattr(instance, implicit_role_field.name) + original_parents = set(json.loads(cur_role.implicit_parents)) + new_parents = implicit_role_field._resolve_parent_roles(instance) + cur_role.parents.remove(*list(original_parents - new_parents)) + cur_role.parents.add(*list(new_parents - original_parents)) + new_parents_list = list(new_parents) + new_parents_list.sort() + new_parents_json = json.dumps(new_parents_list) + if cur_role.implicit_parents != new_parents_json: + cur_role.implicit_parents = new_parents_json + cur_role.save() + + + def _resolve_parent_roles(self, instance): + if not self.parent_role: + return set() + + paths = self.parent_role if type(self.parent_role) is list else [self.parent_role] + parent_roles = set() + + for path in paths: + if path.startswith("singleton:"): + singleton_name = path[10:] + Role_ = get_current_apps().get_model('main', 'Role') + qs = Role_.objects.filter(singleton_name=singleton_name) + if qs.count() >= 1: + role = qs[0] + else: + role = Role_.objects.create(singleton_name=singleton_name, role_field=singleton_name) + parents = [role.id] + else: + parents = resolve_role_field(instance, path) + + for parent in parents: + parent_roles.add(parent) + return parent_roles + + def _post_delete(self, instance, *args, **kwargs): + role_ids = [] + for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): + role_ids.append(getattr(instance, implicit_role_field.name + '_id')) + + Role_ = get_current_apps().get_model('main', 'Role') + child_ids = [x for x in Role_.parents.through.objects.filter(to_role_id__in=role_ids).distinct().values_list('from_role_id', flat=True)] + Role_.objects.filter(id__in=role_ids).delete() + Role.rebuild_role_ancestor_list([], child_ids) diff --git a/awx/main/management/commands/age_deleted.py b/awx/main/management/commands/age_deleted.py deleted file mode 100644 index 0a386851e4..0000000000 --- a/awx/main/management/commands/age_deleted.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -# Python -import datetime -from optparse import make_option - -# Django -from django.core.management.base import BaseCommand -from django.db import transaction -from django.contrib.auth.models import User -from django.utils.dateparse import parse_datetime -from django.utils.timezone import now, is_aware, make_aware -from django.core.management.base import CommandError - -# AWX -from awx.main.models import * # noqa - -class Command(BaseCommand): - ''' - Management command to age deleted items. - ''' - - help = 'Age deleted items in the database.' - - option_list = BaseCommand.option_list + ( - make_option('--days', dest='days', type='int', default=90, metavar='N', - help='Age deleted items N days (90 if not specified)'), - make_option('--id', dest='id', type='int', default=None, - help='Object primary key'), - make_option('--type', dest='type', default=None, - help='Model to limit aging to'), - ) - - def get_models(self, model): - if not model._meta.abstract: - yield model - for sub in model.__subclasses__(): - for submodel in self.get_models(sub): - yield submodel - - def cleanup_model(self, model, id=None): - ''' - Presume the '_deleted_' string to be in the 'name' field unless considering the User model. - When considering the User model, presume the '_d_' string to be in the 'username' field. - ''' - name_field = 'name' - name_prefix = '_deleted_' - n_aged_items = 0 - if model is User: - name_field = 'username' - name_prefix = '_d_' - active_field = None - for field in model._meta.fields: - if field.name in ('is_active', 'active'): - active_field = field.name - if not active_field: - #print("Skipping model %s, no active field" % model) - print("Returning %s" % n_aged_items) - return n_aged_items - - kv = { - active_field: False, - } - if id: - kv['pk'] = id - else: - kv['%s__startswith' % name_field] = name_prefix - - qs = model.objects.filter(**kv) - #print("Aging model %s" % model) - for instance in qs: - name = getattr(instance, name_field) - name_pieces = name.split('_') - if not name_pieces or len(name_pieces) < 3: - print("Unexpected deleted model name format %s" % name) - return n_aged_items - - if len(name_pieces) <= 3: - name_append = '' - else: - name_append = '_' + name_pieces[3] - - dt = parse_datetime(name_pieces[2]) - if not is_aware(dt): - dt = make_aware(dt, self.cutoff.tzinfo) - if not dt: - print('unable to find deleted timestamp in %s field' % name_field) - else: - aged_date = dt - datetime.timedelta(days=self.days) - if model is User: - aged_ts_append = aged_date.strftime('%Y-%m-%dT%H:%M:%S.%f') - else: - aged_ts_append = aged_date.isoformat() + name_append - setattr(instance, name_field, name_prefix + aged_ts_append) - instance.save() - #print("Aged %s" % getattr(instance, name_field)) - n_aged_items += 1 - - return n_aged_items - - @transaction.atomic - def handle(self, *args, **options): - self.days = int(options.get('days', 90)) - self.id = options.get('id', None) - self.type = options.get('type', None) - self.cutoff = now() - datetime.timedelta(days=self.days) - - if self.id and not self.type: - raise CommandError('Specifying id requires --type') - - n_aged_items = 0 - if not self.type: - n_aged_items += self.cleanup_model(User) - for model in self.get_models(PrimordialModel): - n_aged_items += self.cleanup_model(model) - else: - model_found = None - if self.type == User.__name__: - model_found = User - else: - for model in self.get_models(PrimordialModel): - if model.__name__ == self.type: - model_found = model - break - if not model_found: - raise RuntimeError("Invalid type %s" % self.type) - n_aged_items += self.cleanup_model(model_found, self.id) - - print("Aged %d items" % n_aged_items) - diff --git a/awx/main/management/commands/cleanup_deleted.py b/awx/main/management/commands/cleanup_deleted.py deleted file mode 100644 index b6fd5360e5..0000000000 --- a/awx/main/management/commands/cleanup_deleted.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -# Python -import datetime -import logging -from optparse import make_option - -# Django -from django.core.management.base import BaseCommand -from django.db import transaction -from django.contrib.auth.models import User -from django.utils.dateparse import parse_datetime -from django.utils.timezone import now, is_aware, make_aware - -# AWX -from awx.main.models import * # noqa - -class Command(BaseCommand): - ''' - Management command to cleanup deleted items. - ''' - - help = 'Cleanup deleted items from the database.' - args = '[, , ...]' - - option_list = BaseCommand.option_list + ( - make_option('--days', dest='days', type='int', default=90, metavar='N', - help='Remove items deleted more than N days ago'), - make_option('--dry-run', dest='dry_run', action='store_true', - default=False, help='Dry run mode (show items that would ' - 'be removed)'), - ) - - def get_models(self, model): - if not model._meta.abstract: - yield model - for sub in model.__subclasses__(): - for submodel in self.get_models(sub): - yield submodel - - def cleanup_model(self, model): - - ''' - Presume the '_deleted_' string to be in the 'name' field unless considering the User model. - When considering the User model, presume the '_d_' string to be in the 'username' field. - ''' - name_field = 'name' - name_prefix = '_deleted_' - if model is User: - name_field = 'username' - name_prefix = '_d_' - active_field = None - n_deleted_items = 0 - for field in model._meta.fields: - if field.name in ('is_active', 'active'): - active_field = field.name - if not active_field: - self.logger.warning('skipping model %s, no active field', model) - return n_deleted_items - qs = model.objects.filter(**{ - active_field: False, - '%s__startswith' % name_field: name_prefix, - }) - self.logger.debug('cleaning up model %s', model) - pks_to_delete = set() - for instance in qs.iterator(): - dt = parse_datetime(getattr(instance, name_field).split('_')[2]) - if not is_aware(dt): - dt = make_aware(dt, self.cutoff.tzinfo) - if not dt: - self.logger.warning('unable to find deleted timestamp in %s ' - 'field', name_field) - elif dt >= self.cutoff: - action_text = 'would skip' if self.dry_run else 'skipping' - self.logger.debug('%s %s', action_text, instance) - else: - action_text = 'would delete' if self.dry_run else 'deleting' - self.logger.info('%s %s', action_text, instance) - n_deleted_items += 1 - if not self.dry_run: - #pks_to_delete.add(instance.pk) - instance.delete() - - # Cleanup objects in batches instead of deleting each one individually. - if len(pks_to_delete) >= 50: - model.objects.filter(pk__in=pks_to_delete).delete() - pks_to_delete.clear() - if len(pks_to_delete): - model.objects.filter(pk__in=pks_to_delete).delete() - return n_deleted_items - - def init_logging(self): - log_levels = dict(enumerate([logging.ERROR, logging.INFO, - logging.DEBUG, 0])) - self.logger = logging.getLogger('awx.main.commands.cleanup_deleted') - self.logger.setLevel(log_levels.get(self.verbosity, 0)) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(message)s')) - self.logger.addHandler(handler) - self.logger.propagate = False - - @transaction.atomic - def handle(self, *args, **options): - self.verbosity = int(options.get('verbosity', 1)) - self.init_logging() - self.days = int(options.get('days', 90)) - self.dry_run = bool(options.get('dry_run', False)) - # FIXME: Handle args to select models. - self.cutoff = now() - datetime.timedelta(days=self.days) - - n_deleted_items = 0 - n_deleted_items += self.cleanup_model(User) - for model in self.get_models(PrimordialModel): - n_deleted_items += self.cleanup_model(model) - - if not self.dry_run: - self.logger.log(99, "Removed %d items", n_deleted_items) - else: - self.logger.log(99, "Would have removed %d items", n_deleted_items) - - tokens_removed = AuthToken.objects.filter(expires__lt=now()) - if not self.dry_run: - self.logger.log(99, "Removed %d expired auth tokens" % tokens_removed.count()) - tokens_removed.delete() - else: - self.logger.log(99, "Would have removed %d expired auth tokens" % tokens_removed.count()) diff --git a/awx/main/management/commands/cleanup_facts.py b/awx/main/management/commands/cleanup_facts.py index 11d5d88996..578bee3441 100644 --- a/awx/main/management/commands/cleanup_facts.py +++ b/awx/main/management/commands/cleanup_facts.py @@ -12,7 +12,7 @@ from django.db import transaction from django.utils.timezone import now # AWX -from awx.fact.models.fact import * # noqa +from awx.main.models.fact import Fact from awx.api.license import feature_enabled OLDER_THAN = 'older_than' @@ -31,7 +31,7 @@ class CleanupFacts(object): # pivot -= granularity # group by host def cleanup(self, older_than_abs, granularity, module=None): - fact_oldest = FactVersion.objects.all().order_by('timestamp').first() + fact_oldest = Fact.objects.all().order_by('timestamp').first() if not fact_oldest: return 0 @@ -44,7 +44,10 @@ class CleanupFacts(object): # Special case, granularity=0x where x is d, w, or y # The intent is to delete all facts < older_than_abs if granularity == relativedelta(): - return FactVersion.objects.filter(**kv).order_by('-timestamp').delete() + qs = Fact.objects.filter(**kv) + count = qs.count() + qs.delete() + return count total = 0 @@ -61,18 +64,17 @@ class CleanupFacts(object): kv['module'] = module - fact_version_objs = FactVersion.objects.filter(**kv).order_by('-timestamp').limit(1) - if fact_version_objs: - fact_version_obj = fact_version_objs[0] + fact_version_obj = Fact.objects.filter(**kv).order_by('-timestamp').first() + if fact_version_obj: kv = { 'timestamp__lt': fact_version_obj.timestamp, 'timestamp__gt': date_pivot_next } if module: kv['module'] = module - count = FactVersion.objects.filter(**kv).delete() - # FIXME: These two deletes should be a transaction - count = Fact.objects.filter(**kv).delete() + qs = Fact.objects.filter(**kv) + count = qs.count() + qs.delete() total += count date_pivot = date_pivot_next diff --git a/awx/main/management/commands/create_default_org.py b/awx/main/management/commands/create_default_org.py deleted file mode 100644 index a6fb99f826..0000000000 --- a/awx/main/management/commands/create_default_org.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from django.core.management.base import BaseCommand -from crum import impersonate -from awx.main.models import User, Organization - - -class Command(BaseCommand): - """Creates the default organization if and only if no organizations - exist in the system. - """ - help = 'Creates a default organization iff there are none.' - - def handle(self, *args, **kwargs): - # Sanity check: Is there already an organization in the system? - if Organization.objects.count(): - return - - # Create a default organization as the first superuser found. - try: - superuser = User.objects.filter(is_superuser=True, is_active=True).order_by('pk')[0] - except IndexError: - superuser = None - with impersonate(superuser): - Organization.objects.create(name='Default') - print('Default organization added.') diff --git a/awx/main/management/commands/create_preload_data.py b/awx/main/management/commands/create_preload_data.py new file mode 100644 index 0000000000..a6b1e41f0d --- /dev/null +++ b/awx/main/management/commands/create_preload_data.py @@ -0,0 +1,49 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved + +from django.core.management.base import BaseCommand +from crum import impersonate +from awx.main.models import User, Organization, Project, Inventory, Credential, Host, JobTemplate + + +class Command(BaseCommand): + """Create preloaded data, intended for new installs + """ + help = 'Creates a preload tower data iff there is none.' + + def handle(self, *args, **kwargs): + # Sanity check: Is there already an organization in the system? + if Organization.objects.count(): + return + + # Create a default organization as the first superuser found. + try: + superuser = User.objects.filter(is_superuser=True).order_by('pk')[0] + except IndexError: + superuser = None + with impersonate(superuser): + o = Organization.objects.create(name='Default') + p = Project(name='Demo Project', + scm_type='git', + scm_url='https://github.com/ansible/ansible-tower-samples', + scm_update_on_launch=True, + scm_update_cache_timeout=0, + organization=o) + p.save(skip_update=True) + c = Credential.objects.create(name='Demo Credential', + username=superuser.username, + created_by=superuser) + c.admin_role.members.add(superuser) + i = Inventory.objects.create(name='Demo Inventory', + organization=o, + created_by=superuser) + Host.objects.create(name='localhost', + inventory=i, + variables="ansible_connection: local", + created_by=superuser) + JobTemplate.objects.create(name='Demo Job Template', + playbook='hello_world.yml', + project=p, + inventory=i, + credential=c) + print('Default organization added.') diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py index 97d5937533..73bb0f99f4 100644 --- a/awx/main/management/commands/inventory_import.py +++ b/awx/main/management/commands/inventory_import.py @@ -28,6 +28,7 @@ from awx.main.models import * # noqa from awx.main.utils import ignore_inventory_computed_fields, check_proot_installed, wrap_args_with_proot from awx.main.signals import disable_activity_stream from awx.main.task_engine import TaskSerializer as LicenseReader +from awx.main.conf import tower_settings logger = logging.getLogger('awx.main.commands.inventory_import') @@ -52,13 +53,13 @@ class MemObject(object): ''' Common code shared between in-memory groups and hosts. ''' - + def __init__(self, name, source_dir): assert name, 'no name' assert source_dir, 'no source dir' self.name = name self.source_dir = source_dir - + def load_vars(self, base_path): all_vars = {} files_found = 0 @@ -77,7 +78,7 @@ class MemObject(object): v = yaml.safe_load(file(path, 'r').read()) if hasattr(v, 'items'): # is a dict all_vars.update(v) - except yaml.YAMLError, e: + except yaml.YAMLError as e: if hasattr(e, 'problem_mark'): logger.error('Invalid YAML in %s:%s col %s', path, e.problem_mark.line + 1, @@ -106,7 +107,7 @@ class MemGroup(MemObject): group_vars = os.path.join(source_dir, 'group_vars', self.name) self.variables = self.load_vars(group_vars) logger.debug('Loaded group: %s', self.name) - + def child_group_by_name(self, name, loader): if name == 'all': return @@ -265,7 +266,7 @@ class BaseLoader(object): logger.debug('Filtering group %s', name) return None if name not in self.all_group.all_groups: - group = MemGroup(name, self.source_dir) + group = MemGroup(name, self.source_dir) if not child: all_group.add_child_group(group) self.all_group.all_groups[name] = group @@ -314,7 +315,7 @@ class IniLoader(BaseLoader): for t in tokens[1:]: k,v = t.split('=', 1) host.variables[k] = v - group.add_host(host) + group.add_host(host) elif input_mode == 'children': group.child_group_by_name(line, self) elif input_mode == 'vars': @@ -327,7 +328,7 @@ class IniLoader(BaseLoader): # from API documentation: # # if called with --list, inventory outputs like so: -# +# # { # "databases" : { # "hosts" : [ "host1.example.com", "host2.example.com" ], @@ -356,12 +357,24 @@ class ExecutableJsonLoader(BaseLoader): data = {} stdout, stderr = '', '' try: - if self.is_custom and getattr(settings, 'AWX_PROOT_ENABLED', False): + if self.is_custom and getattr(tower_settings, 'AWX_PROOT_ENABLED', False): if not check_proot_installed(): raise RuntimeError("proot is not installed but is configured for use") kwargs = {'proot_temp_dir': self.source_dir} # TODO: Remove proot dir cmd = wrap_args_with_proot(cmd, self.source_dir, **kwargs) - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + # Use ansible venv if it's available and setup to use + env = dict(os.environ.items()) + if settings.ANSIBLE_USE_VENV: + env['VIRTUAL_ENV'] = settings.ANSIBLE_VENV_PATH + env['PATH'] = os.path.join(settings.ANSIBLE_VENV_PATH, "bin") + ":" + env['PATH'] + venv_libdir = os.path.join(settings.ANSIBLE_VENV_PATH, "lib") + env.pop('PYTHONPATH', None) # default to none if no python_ver matches + for python_ver in ["python2.7", "python2.6"]: + if os.path.isdir(os.path.join(venv_libdir, python_ver)): + env['PYTHONPATH'] = os.path.join(venv_libdir, python_ver, "site-packages") + ":" + break + + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) stdout, stderr = proc.communicate() if proc.returncode != 0: raise RuntimeError('%r failed (rc=%d) with output: %s' % (cmd, proc.returncode, stderr)) @@ -465,11 +478,9 @@ def load_inventory_source(source, all_group=None, group_filter_re=None, ''' Load inventory from given source directory or file. ''' - # Sanity check: We need the "azure" module to be titled "windows_azure.py", - # because it depends on the "azure" package from PyPI, and naming the - # module the same way makes the importer sad. - source = source.replace('azure', 'windows_azure') - + # Sanity check: We sanitize these module names for our API but Ansible proper doesn't follow + # good naming conventions + source = source.replace('azure.py', 'windows_azure.py') logger.debug('Analyzing type of source: %s', source) original_all_group = all_group if not os.path.exists(source): @@ -580,7 +591,7 @@ class Command(NoArgsCommand): def _get_instance_id(self, from_dict, default=''): ''' Retrieve the instance ID from the given dict of host variables. - + The instance ID variable may be specified as 'foo.bar', in which case the lookup will traverse into nested dicts, equivalent to: @@ -632,7 +643,7 @@ class Command(NoArgsCommand): else: q = dict(name=self.inventory_name) try: - self.inventory = Inventory.objects.filter(active=True).get(**q) + self.inventory = Inventory.objects.get(**q) except Inventory.DoesNotExist: raise CommandError('Inventory with %s = %s cannot be found' % q.items()[0]) except Inventory.MultipleObjectsReturned: @@ -647,8 +658,7 @@ class Command(NoArgsCommand): if inventory_source_id: try: self.inventory_source = InventorySource.objects.get(pk=inventory_source_id, - inventory=self.inventory, - active=True) + inventory=self.inventory) except InventorySource.DoesNotExist: raise CommandError('Inventory source with id=%s not found' % inventory_source_id) @@ -668,7 +678,6 @@ class Command(NoArgsCommand): source_path=os.path.abspath(self.source), overwrite=self.overwrite, overwrite_vars=self.overwrite_vars, - active=True, ) self.inventory_update = self.inventory_source.create_inventory_update( job_args=json.dumps(sys.argv), @@ -702,7 +711,7 @@ class Command(NoArgsCommand): host_qs = self.inventory_source.group.all_hosts else: host_qs = self.inventory.hosts.all() - host_qs = host_qs.filter(active=True, instance_id='', + host_qs = host_qs.filter(instance_id='', variables__contains=self.instance_id_var.split('.')[0]) for host in host_qs: instance_id = self._get_instance_id(host.variables_dict) @@ -739,7 +748,7 @@ class Command(NoArgsCommand): hosts_qs = self.inventory_source.group.all_hosts # FIXME: Also include hosts from inventory_source.managed_hosts? else: - hosts_qs = self.inventory.hosts.filter(active=True) + hosts_qs = self.inventory.hosts # Build list of all host pks, remove all that should not be deleted. del_host_pks = set(hosts_qs.values_list('pk', flat=True)) if self.instance_id_var: @@ -764,7 +773,7 @@ class Command(NoArgsCommand): del_pks = all_del_pks[offset:(offset + self._batch_size)] for host in hosts_qs.filter(pk__in=del_pks): host_name = host.name - host.mark_inactive() + host.delete() self.logger.info('Deleted host "%s"', host_name) if settings.SQL_DEBUG: self.logger.warning('host deletions took %d queries for %d hosts', @@ -781,10 +790,10 @@ class Command(NoArgsCommand): if settings.SQL_DEBUG: queries_before = len(connection.queries) if self.inventory_source.group: - groups_qs = self.inventory_source.group.all_children + groups_qs = self.inventory_source.group.all_children.all() # FIXME: Also include groups from inventory_source.managed_groups? else: - groups_qs = self.inventory.groups.filter(active=True) + groups_qs = self.inventory.groups.all() # Build list of all group pks, remove those that should not be deleted. del_group_pks = set(groups_qs.values_list('pk', flat=True)) all_group_names = self.all_group.all_groups.keys() @@ -798,7 +807,8 @@ class Command(NoArgsCommand): del_pks = all_del_pks[offset:(offset + self._batch_size)] for group in groups_qs.filter(pk__in=del_pks): group_name = group.name - group.mark_inactive(recompute=False) + with ignore_inventory_computed_fields(): + group.delete() self.logger.info('Group "%s" deleted', group_name) if settings.SQL_DEBUG: self.logger.warning('group deletions took %d queries for %d groups', @@ -820,10 +830,10 @@ class Command(NoArgsCommand): if self.inventory_source.group: db_groups = self.inventory_source.group.all_children else: - db_groups = self.inventory.groups.filter(active=True) - for db_group in db_groups: + db_groups = self.inventory.groups + for db_group in db_groups.all(): # Delete child group relationships not present in imported data. - db_children = db_group.children.filter(active=True) + db_children = db_group.children db_children_name_pk_map = dict(db_children.values_list('name', 'pk')) mem_children = self.all_group.all_groups[db_group.name].children for mem_group in mem_children: @@ -838,7 +848,7 @@ class Command(NoArgsCommand): db_child.name, db_group.name) # FIXME: Inventory source group relationships # Delete group/host relationships not present in imported data. - db_hosts = db_group.hosts.filter(active=True) + db_hosts = db_group.hosts del_host_pks = set(db_hosts.values_list('pk', flat=True)) mem_hosts = self.all_group.all_groups[db_group.name].hosts all_mem_host_names = [h.name for h in mem_hosts if not h.instance_id] @@ -859,7 +869,7 @@ class Command(NoArgsCommand): del_pks = del_host_pks[offset:(offset + self._batch_size)] for db_host in db_hosts.filter(pk__in=del_pks): group_host_count += 1 - if db_host not in db_group.hosts.filter(active=True): + if db_host not in db_group.hosts.all(): continue db_group.hosts.remove(db_host) self.logger.info('Host "%s" removed from group "%s"', @@ -1035,7 +1045,7 @@ class Command(NoArgsCommand): all_host_pks = sorted(mem_host_pk_map.keys()) for offset in xrange(0, len(all_host_pks), self._batch_size): host_pks = all_host_pks[offset:(offset + self._batch_size)] - for db_host in self.inventory.hosts.filter(active=True, pk__in=host_pks): + for db_host in self.inventory.hosts.filter( pk__in=host_pks): if db_host.pk in host_pks_updated: continue mem_host = mem_host_pk_map[db_host.pk] @@ -1047,7 +1057,7 @@ class Command(NoArgsCommand): all_instance_ids = sorted(mem_host_instance_id_map.keys()) for offset in xrange(0, len(all_instance_ids), self._batch_size): instance_ids = all_instance_ids[offset:(offset + self._batch_size)] - for db_host in self.inventory.hosts.filter(active=True, instance_id__in=instance_ids): + for db_host in self.inventory.hosts.filter( instance_id__in=instance_ids): if db_host.pk in host_pks_updated: continue mem_host = mem_host_instance_id_map[db_host.instance_id] @@ -1059,7 +1069,7 @@ class Command(NoArgsCommand): all_host_names = sorted(mem_host_name_map.keys()) for offset in xrange(0, len(all_host_names), self._batch_size): host_names = all_host_names[offset:(offset + self._batch_size)] - for db_host in self.inventory.hosts.filter(active=True, name__in=host_names): + for db_host in self.inventory.hosts.filter( name__in=host_names): if db_host.pk in host_pks_updated: continue mem_host = mem_host_name_map[db_host.name] @@ -1109,13 +1119,14 @@ class Command(NoArgsCommand): for db_group in self.inventory.groups.filter(name__in=group_names): mem_group = self.all_group.all_groups[db_group.name] group_group_count += len(mem_group.children) - child_names = set([g.name for g in mem_group.children]) - db_children_qs = self.inventory.groups.filter(name__in=child_names) - # FIXME: May fail unit tests when len(child_names) > 1000. - for db_child in db_children_qs.filter(children__id=db_group.id): - self.logger.info('Group "%s" already child of group "%s"', db_child.name, db_group.name) - for db_child in db_children_qs.exclude(children__id=db_group.id): - self._batch_add_m2m(db_group.children, db_child) + all_child_names = sorted([g.name for g in mem_group.children]) + for offset2 in xrange(0, len(all_child_names), self._batch_size): + child_names = all_child_names[offset2:(offset2 + self._batch_size)] + db_children_qs = self.inventory.groups.filter(name__in=child_names) + for db_child in db_children_qs.filter(children__id=db_group.id): + self.logger.info('Group "%s" already child of group "%s"', db_child.name, db_group.name) + for db_child in db_children_qs.exclude(children__id=db_group.id): + self._batch_add_m2m(db_group.children, db_child) self.logger.info('Group "%s" added as child of "%s"', db_child.name, db_group.name) self._batch_add_m2m(db_group.children, flush=True) if settings.SQL_DEBUG: @@ -1179,7 +1190,7 @@ class Command(NoArgsCommand): def check_license(self): reader = LicenseReader() - license_info = reader.from_file() + license_info = reader.from_database() if not license_info or len(license_info) == 0: self.logger.error(LICENSE_NON_EXISTANT_MESSAGE) raise CommandError('No Tower license found!') @@ -1272,42 +1283,43 @@ class Command(NoArgsCommand): self.is_custom) self.all_group.debug_tree() - # Ensure that this is managed as an atomic SQL transaction, - # and thus properly rolled back if there is an issue. - with transaction.atomic(): - # Merge/overwrite inventory into database. - if settings.SQL_DEBUG: - self.logger.warning('loading into database...') - with ignore_inventory_computed_fields(): - if getattr(settings, 'ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC', True): - self.load_into_database() - else: - with disable_activity_stream(): + with batch_role_ancestor_rebuilding(): + # Ensure that this is managed as an atomic SQL transaction, + # and thus properly rolled back if there is an issue. + with transaction.atomic(): + # Merge/overwrite inventory into database. + if settings.SQL_DEBUG: + self.logger.warning('loading into database...') + with ignore_inventory_computed_fields(): + if getattr(settings, 'ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC', True): self.load_into_database() + else: + with disable_activity_stream(): + self.load_into_database() + if settings.SQL_DEBUG: + queries_before2 = len(connection.queries) + self.inventory.update_computed_fields() + if settings.SQL_DEBUG: + self.logger.warning('update computed fields took %d queries', + len(connection.queries) - queries_before2) + try: + self.check_license() + except CommandError as e: + self.mark_license_failure(save=True) + raise e + + if self.inventory_source.group: + inv_name = 'group "%s"' % (self.inventory_source.group.name) + else: + inv_name = '"%s" (id=%s)' % (self.inventory.name, + self.inventory.id) if settings.SQL_DEBUG: - queries_before2 = len(connection.queries) - self.inventory.update_computed_fields() - if settings.SQL_DEBUG: - self.logger.warning('update computed fields took %d queries', - len(connection.queries) - queries_before2) - try: - self.check_license() - except CommandError as e: - self.mark_license_failure(save=True) - raise e - - if self.inventory_source.group: - inv_name = 'group "%s"' % (self.inventory_source.group.name) - else: - inv_name = '"%s" (id=%s)' % (self.inventory.name, - self.inventory.id) - if settings.SQL_DEBUG: - self.logger.warning('Inventory import completed for %s in %0.1fs', - inv_name, time.time() - begin) - else: - self.logger.info('Inventory import completed for %s in %0.1fs', - inv_name, time.time() - begin) - status = 'successful' + self.logger.warning('Inventory import completed for %s in %0.1fs', + inv_name, time.time() - begin) + else: + self.logger.info('Inventory import completed for %s in %0.1fs', + inv_name, time.time() - begin) + status = 'successful' # If we're in debug mode, then log the queries and time # used to do the operation. @@ -1317,7 +1329,7 @@ class Command(NoArgsCommand): self.logger.warning('Inventory import required %d queries ' 'taking %0.3fs', len(queries_this_import), sqltime) - except Exception, e: + except Exception as e: if isinstance(e, KeyboardInterrupt): status = 'canceled' exc = e @@ -1334,7 +1346,7 @@ class Command(NoArgsCommand): self.inventory_update.result_traceback = tb self.inventory_update.status = status self.inventory_update.save(update_fields=['status', 'result_traceback']) - + if exc and isinstance(exc, CommandError): sys.exit(1) elif exc: diff --git a/awx/main/management/commands/run_callback_receiver.py b/awx/main/management/commands/run_callback_receiver.py index 6ba078241f..e6080fa419 100644 --- a/awx/main/management/commands/run_callback_receiver.py +++ b/awx/main/management/commands/run_callback_receiver.py @@ -16,7 +16,7 @@ from django.conf import settings from django.core.management.base import NoArgsCommand from django.db import transaction, DatabaseError from django.utils.dateparse import parse_datetime -from django.utils.tzinfo import FixedOffset +from django.utils.timezone import FixedOffset from django.db import connection # AWX @@ -173,7 +173,7 @@ class CallbackReceiver(object): # If for any reason there's a problem, just use 0. try: verbose = Job.objects.get(id=data['job_id']).verbosity - except Exception, e: + except Exception as e: verbose = 0 # Convert the datetime for the job event's creation appropriately, @@ -191,7 +191,7 @@ class CallbackReceiver(object): # Print the data to stdout if we're in DEBUG mode. if settings.DEBUG: - print data + print(data) # Sanity check: Don't honor keys that we don't recognize. for key in data.keys(): @@ -234,7 +234,7 @@ class CallbackReceiver(object): # If for any reason there's a problem, just use 0. try: verbose = AdHocCommand.objects.get(id=data['ad_hoc_command_id']).verbosity - except Exception, e: + except Exception as e: verbose = 0 # Convert the datetime for the job event's creation appropriately, @@ -252,7 +252,7 @@ class CallbackReceiver(object): # Print the data to stdout if we're in DEBUG mode. if settings.DEBUG: - print data + print(data) # Sanity check: Don't honor keys that we don't recognize. for key in data.keys(): @@ -288,7 +288,7 @@ class CallbackReceiver(object): message = queue_actual.get(block=True, timeout=1) except QueueEmpty: continue - except Exception, e: + except Exception as e: logger.error("Exception on listen socket, restarting: " + str(e)) break self.process_job_event(message) diff --git a/awx/main/management/commands/run_fact_cache_receiver.py b/awx/main/management/commands/run_fact_cache_receiver.py index aa3abe1bfd..4241a2000c 100644 --- a/awx/main/management/commands/run_fact_cache_receiver.py +++ b/awx/main/management/commands/run_fact_cache_receiver.py @@ -9,9 +9,11 @@ from datetime import datetime # Django from django.core.management.base import NoArgsCommand from django.conf import settings +from django.utils import timezone # AWX -from awx.fact.models.fact import * # noqa +from awx.main.models.fact import Fact +from awx.main.models.inventory import Host from awx.main.socket import Socket logger = logging.getLogger('awx.main.commands.run_fact_cache_receiver') @@ -47,35 +49,34 @@ class FactCacheReceiver(object): # ansible v2 will not emit this message. Thus, this can be removed at that time. if 'module_setup' in facts_data and len(facts_data) == 1: logger.info('Received module_setup message') - return + return None try: - host = FactHost.objects.get(hostname=hostname, inventory_id=inventory_id) - except FactHost.DoesNotExist: - logger.info('Creating new host <%s, %s>' % (hostname, inventory_id)) - host = FactHost(hostname=hostname, inventory_id=inventory_id) - host.save() - logger.info('Created new host <%s>' % (host.id)) - except FactHost.MultipleObjectsReturned: - query = "db['fact_host'].find(hostname=%s, inventory_id=%s)" % (hostname, inventory_id) - logger.warn('Database inconsistent. Multiple FactHost "%s" exist. Try the query %s to find the records.' % (hostname, query)) + host_obj = Host.objects.get(name=hostname, inventory__id=inventory_id) + except Fact.DoesNotExist: + logger.warn('Failed to intake fact. Host does not exist <%s, %s>' % (hostname, inventory_id)) return - except Exception, e: + except Fact.MultipleObjectsReturned: + logger.warn('Database inconsistent. Multiple Hosts found for <%s, %s>.' % (hostname, inventory_id)) + return None + except Exception as e: logger.error("Exception communicating with Fact Cache Database: %s" % str(e)) - return + return None - (module, facts) = self.process_facts(facts_data) - self.timestamp = datetime.fromtimestamp(date_key, None) + (module_name, facts) = self.process_facts(facts_data) + self.timestamp = datetime.fromtimestamp(date_key, timezone.utc) + # Update existing Fact entry try: - # Update existing Fact entry - version_obj = FactVersion.objects.get(timestamp=self.timestamp, host=host, module=module) - Fact.objects(id=version_obj.fact.id).update_one(fact=facts) - logger.info('Updated existing fact <%s>' % (version_obj.fact.id)) - except FactVersion.DoesNotExist: + fact_obj = Fact.objects.get(host__id=host_obj.id, module=module_name, timestamp=self.timestamp) + fact_obj.facts = facts + fact_obj.save() + logger.info('Updated existing fact <%s>' % (fact_obj.id)) + except Fact.DoesNotExist: # Create new Fact entry - (fact_obj, version_obj) = Fact.add_fact(self.timestamp, facts, host, module) - logger.info('Created new fact <%s, %s>' % (fact_obj.id, version_obj.id)) + fact_obj = Fact.add_fact(host_obj.id, module_name, self.timestamp, facts) + logger.info('Created new fact <%s, %s>' % (fact_obj.id, module_name)) + return fact_obj def run_receiver(self, use_processing_threads=True): with Socket('fact_cache', 'r') as facts: diff --git a/awx/main/management/commands/run_socketio_service.py b/awx/main/management/commands/run_socketio_service.py index 56d8cc5b1c..0e3df4ccaf 100644 --- a/awx/main/management/commands/run_socketio_service.py +++ b/awx/main/management/commands/run_socketio_service.py @@ -96,7 +96,7 @@ class SocketController(object): if socket_session and socket_session.is_valid(): try: socket.send_packet(packet) - except Exception, e: + except Exception as e: logger.error("Error sending client packet to %s: %s" % (str(session_id), str(packet))) logger.error("Error was: " + str(e)) @@ -116,7 +116,7 @@ class SocketController(object): if socket: try: socket.send_packet(packet) - except Exception, e: + except Exception as e: logger.error("Error sending client packet to %s: %s" % (str(socket_session.session_id), str(packet))) logger.error("Error was: " + str(e)) @@ -129,18 +129,18 @@ socketController = SocketController(SocketSessionManager()) # # Socket session is attached to self.session['socket_session'] # self.session and self.socket.session point to the same dict -# +# class TowerBaseNamespace(BaseNamespace): def get_allowed_methods(self): return ['recv_disconnect'] - + def get_initial_acl(self): request_token = self._get_request_token() if request_token: - # (1) This is the first time the socket has been seen (first + # (1) This is the first time the socket has been seen (first # namespace joined). - # (2) This socket has already been seen (already joined and maybe + # (2) This socket has already been seen (already joined and maybe # left a namespace) # # Note: Assume that the user token is valid if the session is found @@ -168,7 +168,7 @@ class TowerBaseNamespace(BaseNamespace): if k == "Token": token_actual = urllib.unquote_plus(v).decode().replace("\"","") return token_actual - except Exception, e: + except Exception as e: logger.error("Exception validating user: " + str(e)) return False return False diff --git a/awx/main/management/commands/run_task_system.py b/awx/main/management/commands/run_task_system.py index d49dbf1669..f91309030c 100644 --- a/awx/main/management/commands/run_task_system.py +++ b/awx/main/management/commands/run_task_system.py @@ -15,7 +15,7 @@ from django.core.management.base import NoArgsCommand # AWX from awx.main.models import * # noqa from awx.main.queue import FifoQueue -from awx.main.tasks import handle_work_error +from awx.main.tasks import handle_work_error, handle_work_success from awx.main.utils import get_system_task_capacity # Celery @@ -108,6 +108,8 @@ class SimpleDAG(object): return "inventory_update" elif type(obj) == ProjectUpdate: return "project_update" + elif type(obj) == SystemJob: + return "system_job" return "unknown" def get_dependencies(self, obj): @@ -205,7 +207,15 @@ def rebuild_graph(message): # Create and process dependencies for new tasks for task in new_tasks: logger.debug("Checking dependencies for: %s" % str(task)) - task_dependencies = task.generate_dependencies(running_tasks + waiting_tasks) # TODO: other 'new' tasks? Need to investigate this scenario + try: + task_dependencies = task.generate_dependencies(running_tasks + waiting_tasks) + except Exception, e: + logger.error("Failed processing dependencies for {}: {}".format(task, e)) + task.status = 'failed' + task.job_explanation += 'Task failed to generate dependencies: {}'.format(e) + task.save() + task.socketio_emit_status("failed") + continue logger.debug("New dependencies: %s" % str(task_dependencies)) for dep in task_dependencies: # We recalculate the created time for the moment to ensure the @@ -265,14 +275,15 @@ def process_graph(graph, task_capacity): [{'type': graph.get_node_type(n['node_object']), 'id': n['node_object'].id} for n in node_dependencies] error_handler = handle_work_error.s(subtasks=dependent_nodes) - start_status = node_obj.start(error_callback=error_handler) + success_handler = handle_work_success.s(task_actual={'type': graph.get_node_type(node_obj), + 'id': node_obj.id}) + start_status = node_obj.start(error_callback=error_handler, success_callback=success_handler) if not start_status: node_obj.status = 'failed' if node_obj.job_explanation: node_obj.job_explanation += ' ' node_obj.job_explanation += 'Task failed pre-start check.' node_obj.save() - # TODO: Run error handler continue remaining_volume -= impact running_impact += impact diff --git a/awx/main/management/commands/update_password.py b/awx/main/management/commands/update_password.py new file mode 100644 index 0000000000..fe45799776 --- /dev/null +++ b/awx/main/management/commands/update_password.py @@ -0,0 +1,45 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved + +# Python +from optparse import make_option + +# Django +from django.core.management.base import BaseCommand +from django.core.management.base import CommandError +from django.contrib.auth.models import User + +class UpdatePassword(object): + def update_password(self, username, password): + changed = False + u = User.objects.get(username=username) + if not u: + raise RuntimeError("User not found") + check = u.check_password(password) + if not check: + u.set_password(password) + u.save() + changed = True + return changed + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('--username', dest='username', action='store', type='string', default=None, + help='username to change the password for'), + make_option('--password', dest='password', action='store', type='string', default=None, + help='new password for user'), + ) + + def handle(self, *args, **options): + if not options['username']: + raise CommandError('username required') + if not options['password']: + raise CommandError('password required') + + cp = UpdatePassword() + res = cp.update_password(options['username'], options['password']) + if res: + return "Password updated" + return "Password not updated" + + diff --git a/awx/main/managers.py b/awx/main/managers.py index 951b44bd05..4825a74cf8 100644 --- a/awx/main/managers.py +++ b/awx/main/managers.py @@ -13,9 +13,9 @@ class HostManager(models.Manager): def active_count(self): """Return count of active, unique hosts for licensing.""" try: - return self.filter(active=True, inventory__active=True).distinct('name').count() + return self.order_by('name').distinct('name').count() except NotImplementedError: # For unit tests only, SQLite doesn't support distinct('name') - return len(set(self.filter(active=True, inventory__active=True).values_list('name', flat=True))) + return len(set(self.values_list('name', flat=True))) class InstanceManager(models.Manager): """A custom manager class for the Instance model. diff --git a/awx/main/middleware.py b/awx/main/middleware.py index f73758ad7d..37903886ac 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -11,10 +11,10 @@ from django.db import IntegrityError from django.http import HttpResponseRedirect from django.template.response import TemplateResponse from django.utils.functional import curry -from django.conf import settings from awx import __version__ as version from awx.main.models import ActivityStream, Instance +from awx.main.conf import tower_settings from awx.api.authentication import TokenAuthentication @@ -117,6 +117,6 @@ class AuthTokenTimeoutMiddleware(object): if not TokenAuthentication._get_x_auth_token_header(request): return response - response['Auth-Token-Timeout'] = int(settings.AUTH_TOKEN_EXPIRATION) + response['Auth-Token-Timeout'] = int(tower_settings.AUTH_TOKEN_EXPIRATION) return response diff --git a/awx/main/migrations/0001_initial.py b/awx/main/migrations/0001_initial.py new file mode 100644 index 0000000000..bdc98cace2 --- /dev/null +++ b/awx/main/migrations/0001_initial.py @@ -0,0 +1,991 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone +import jsonfield.fields +import django.db.models.deletion +from django.conf import settings +import taggit.managers +import awx.main.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('taggit', '0002_auto_20150616_2121'), + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='ActivityStream', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('operation', models.CharField(max_length=13, choices=[(b'create', 'Entity Created'), (b'update', 'Entity Updated'), (b'delete', 'Entity Deleted'), (b'associate', 'Entity Associated with another Entity'), (b'disassociate', 'Entity was Disassociated with another Entity')])), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('changes', models.TextField(blank=True)), + ('object_relationship_type', models.TextField(blank=True)), + ('object1', models.TextField()), + ('object2', models.TextField()), + ('actor', models.ForeignKey(related_name='activity_stream', on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + migrations.CreateModel( + name='AdHocCommandEvent', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('host_name', models.CharField(default=b'', max_length=1024, editable=False)), + ('event', models.CharField(max_length=100, choices=[(b'runner_on_failed', 'Host Failed'), (b'runner_on_ok', 'Host OK'), (b'runner_on_unreachable', 'Host Unreachable'), (b'runner_on_skipped', 'Host Skipped')])), + ('event_data', jsonfield.fields.JSONField(default={}, blank=True)), + ('failed', models.BooleanField(default=False, editable=False)), + ('changed', models.BooleanField(default=False, editable=False)), + ('counter', models.PositiveIntegerField(default=0)), + ], + options={ + 'ordering': ('-pk',), + }, + ), + migrations.CreateModel( + name='AuthToken', + fields=[ + ('key', models.CharField(max_length=40, serialize=False, primary_key=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('modified', models.DateTimeField(auto_now=True)), + ('expires', models.DateTimeField(default=django.utils.timezone.now)), + ('request_hash', models.CharField(default=b'', max_length=40, blank=True)), + ('reason', models.CharField(default=b'', help_text='Reason the auth token was invalidated.', max_length=1024, blank=True)), + ('user', models.ForeignKey(related_name='auth_tokens', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Credential', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('kind', models.CharField(default=b'ssh', max_length=32, choices=[(b'ssh', 'Machine'), (b'scm', 'Source Control'), (b'aws', 'Amazon Web Services'), (b'rax', 'Rackspace'), (b'vmware', 'VMware vCenter'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'openstack', 'OpenStack')])), + ('cloud', models.BooleanField(default=False, editable=False)), + ('host', models.CharField(default=b'', help_text='The hostname or IP address to use.', max_length=1024, verbose_name='Host', blank=True)), + ('username', models.CharField(default=b'', help_text='Username for this credential.', max_length=1024, verbose_name='Username', blank=True)), + ('password', models.CharField(default=b'', help_text='Password for this credential (or "ASK" to prompt the user for machine credentials).', max_length=1024, verbose_name='Password', blank=True)), + ('security_token', models.CharField(default=b'', help_text='Security Token for this credential', max_length=1024, verbose_name='Security Token', blank=True)), + ('project', models.CharField(default=b'', help_text='The identifier for the project.', max_length=100, verbose_name='Project', blank=True)), + ('ssh_key_data', models.TextField(default=b'', help_text='RSA or DSA private key to be used instead of password.', verbose_name='SSH private key', blank=True)), + ('ssh_key_unlock', models.CharField(default=b'', help_text='Passphrase to unlock SSH private key if encrypted (or "ASK" to prompt the user for machine credentials).', max_length=1024, verbose_name='SSH key unlock', blank=True)), + ('become_method', models.CharField(default=b'', help_text='Privilege escalation method.', max_length=32, blank=True, choices=[(b'', 'None'), (b'sudo', 'Sudo'), (b'su', 'Su'), (b'pbrun', 'Pbrun'), (b'pfexec', 'Pfexec')])), + ('become_username', models.CharField(default=b'', help_text='Privilege escalation username.', max_length=1024, blank=True)), + ('become_password', models.CharField(default=b'', help_text='Password for privilege escalation method.', max_length=1024, blank=True)), + ('vault_password', models.CharField(default=b'', help_text='Vault password (or "ASK" to prompt the user).', max_length=1024, blank=True)), + ('created_by', models.ForeignKey(related_name="{u'class': 'credential', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'credential', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ], + options={ + 'ordering': ('kind', 'name'), + }, + ), + migrations.CreateModel( + name='CustomInventoryScript', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('script', models.TextField(default=b'', help_text='Inventory script contents', blank=True)), + ('created_by', models.ForeignKey(related_name="{u'class': 'custominventoryscript', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'custominventoryscript', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('variables', models.TextField(default=b'', help_text='Group variables in JSON or YAML format.', blank=True)), + ('total_hosts', models.PositiveIntegerField(default=0, help_text='Total number of hosts directly or indirectly in this group.', editable=False)), + ('has_active_failures', models.BooleanField(default=False, help_text='Flag indicating whether this group has any hosts with active failures.', editable=False)), + ('hosts_with_active_failures', models.PositiveIntegerField(default=0, help_text='Number of hosts in this group with active failures.', editable=False)), + ('total_groups', models.PositiveIntegerField(default=0, help_text='Total number of child groups contained within this group.', editable=False)), + ('groups_with_active_failures', models.PositiveIntegerField(default=0, help_text='Number of child groups within this group that have active failures.', editable=False)), + ('has_inventory_sources', models.BooleanField(default=False, help_text='Flag indicating whether this group was created/updated from any external inventory sources.', editable=False)), + ('created_by', models.ForeignKey(related_name="{u'class': 'group', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='Host', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('enabled', models.BooleanField(default=True, help_text='Is this host online and available for running jobs?')), + ('instance_id', models.CharField(default=b'', max_length=100, blank=True)), + ('variables', models.TextField(default=b'', help_text='Host variables in JSON or YAML format.', blank=True)), + ('has_active_failures', models.BooleanField(default=False, help_text='Flag indicating whether the last job failed for this host.', editable=False)), + ('has_inventory_sources', models.BooleanField(default=False, help_text='Flag indicating whether this host was created/updated from any external inventory sources.', editable=False)), + ('created_by', models.ForeignKey(related_name="{u'class': 'host', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('inventory', 'name'), + }, + ), + migrations.CreateModel( + name='Instance', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('uuid', models.CharField(unique=True, max_length=40)), + ('hostname', models.CharField(unique=True, max_length=250)), + ('primary', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('modified', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='Inventory', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(unique=True, max_length=512)), + ('variables', models.TextField(default=b'', help_text='Inventory variables in JSON or YAML format.', blank=True)), + ('has_active_failures', models.BooleanField(default=False, help_text='Flag indicating whether any hosts in this inventory have failed.', editable=False)), + ('total_hosts', models.PositiveIntegerField(default=0, help_text='Total number of hosts in this inventory.', editable=False)), + ('hosts_with_active_failures', models.PositiveIntegerField(default=0, help_text='Number of hosts in this inventory with active failures.', editable=False)), + ('total_groups', models.PositiveIntegerField(default=0, help_text='Total number of groups in this inventory.', editable=False)), + ('groups_with_active_failures', models.PositiveIntegerField(default=0, help_text='Number of groups in this inventory with active failures.', editable=False)), + ('has_inventory_sources', models.BooleanField(default=False, help_text='Flag indicating whether this inventory has any external inventory sources.', editable=False)), + ('total_inventory_sources', models.PositiveIntegerField(default=0, help_text='Total number of external inventory sources configured within this inventory.', editable=False)), + ('inventory_sources_with_failures', models.PositiveIntegerField(default=0, help_text='Number of external inventory sources in this inventory with failures.', editable=False)), + ('created_by', models.ForeignKey(related_name="{u'class': 'inventory', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'inventory', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('name',), + 'verbose_name_plural': 'inventories', + }, + ), + migrations.CreateModel( + name='JobEvent', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('event', models.CharField(max_length=100, choices=[(b'runner_on_failed', 'Host Failed'), (b'runner_on_ok', 'Host OK'), (b'runner_on_error', 'Host Failure'), (b'runner_on_skipped', 'Host Skipped'), (b'runner_on_unreachable', 'Host Unreachable'), (b'runner_on_no_hosts', 'No Hosts Remaining'), (b'runner_on_async_poll', 'Host Polling'), (b'runner_on_async_ok', 'Host Async OK'), (b'runner_on_async_failed', 'Host Async Failure'), (b'runner_on_file_diff', 'File Difference'), (b'playbook_on_start', 'Playbook Started'), (b'playbook_on_notify', 'Running Handlers'), (b'playbook_on_no_hosts_matched', 'No Hosts Matched'), (b'playbook_on_no_hosts_remaining', 'No Hosts Remaining'), (b'playbook_on_task_start', 'Task Started'), (b'playbook_on_vars_prompt', 'Variables Prompted'), (b'playbook_on_setup', 'Gathering Facts'), (b'playbook_on_import_for_host', 'internal: on Import for Host'), (b'playbook_on_not_import_for_host', 'internal: on Not Import for Host'), (b'playbook_on_play_start', 'Play Started'), (b'playbook_on_stats', 'Playbook Complete')])), + ('event_data', jsonfield.fields.JSONField(default={}, blank=True)), + ('failed', models.BooleanField(default=False, editable=False)), + ('changed', models.BooleanField(default=False, editable=False)), + ('host_name', models.CharField(default=b'', max_length=1024, editable=False)), + ('play', models.CharField(default=b'', max_length=1024, editable=False)), + ('role', models.CharField(default=b'', max_length=1024, editable=False)), + ('task', models.CharField(default=b'', max_length=1024, editable=False)), + ('counter', models.PositiveIntegerField(default=0)), + ('host', models.ForeignKey(related_name='job_events_as_primary_host', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Host', null=True)), + ('hosts', models.ManyToManyField(related_name='job_events', editable=False, to='main.Host')), + ('parent', models.ForeignKey(related_name='children', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.JobEvent', null=True)), + ], + options={ + 'ordering': ('pk',), + }, + ), + migrations.CreateModel( + name='JobHostSummary', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('host_name', models.CharField(default=b'', max_length=1024, editable=False)), + ('changed', models.PositiveIntegerField(default=0, editable=False)), + ('dark', models.PositiveIntegerField(default=0, editable=False)), + ('failures', models.PositiveIntegerField(default=0, editable=False)), + ('ok', models.PositiveIntegerField(default=0, editable=False)), + ('processed', models.PositiveIntegerField(default=0, editable=False)), + ('skipped', models.PositiveIntegerField(default=0, editable=False)), + ('failed', models.BooleanField(default=False, editable=False)), + ('host', models.ForeignKey(related_name='job_host_summaries', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Host', null=True)), + ], + options={ + 'ordering': ('-pk',), + 'verbose_name_plural': 'job host summaries', + }, + ), + migrations.CreateModel( + name='JobOrigin', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('modified', models.DateTimeField(auto_now=True)), + ('instance', models.ForeignKey(to='main.Instance')), + ], + ), + migrations.CreateModel( + name='Organization', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(unique=True, max_length=512)), + ('admins', models.ManyToManyField(related_name='admin_of_organizations', to=settings.AUTH_USER_MODEL, blank=True)), + ('created_by', models.ForeignKey(related_name="{u'class': 'organization', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'organization', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ('users', models.ManyToManyField(related_name='organizations', to=settings.AUTH_USER_MODEL, blank=True)), + ], + options={ + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='Permission', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('permission_type', models.CharField(max_length=64, choices=[(b'read', 'Read Inventory'), (b'write', 'Edit Inventory'), (b'admin', 'Administrate Inventory'), (b'run', 'Deploy To Inventory'), (b'check', 'Deploy To Inventory (Dry Run)'), (b'scan', 'Scan an Inventory'), (b'create', 'Create a Job Template')])), + ('run_ad_hoc_commands', models.BooleanField(default=False, help_text='Execute Commands on the Inventory')), + ('created_by', models.ForeignKey(related_name="{u'class': 'permission', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('inventory', models.ForeignKey(related_name='permissions', on_delete=django.db.models.deletion.SET_NULL, to='main.Inventory', null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'permission', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ], + ), + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('ldap_dn', models.CharField(default=b'', max_length=1024)), + ('user', awx.main.fields.AutoOneToOneField(related_name='profile', editable=False, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Schedule', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(unique=True, max_length=512)), + ('enabled', models.BooleanField(default=True)), + ('dtstart', models.DateTimeField(default=None, null=True, editable=False)), + ('dtend', models.DateTimeField(default=None, null=True, editable=False)), + ('rrule', models.CharField(max_length=255)), + ('next_run', models.DateTimeField(default=None, null=True, editable=False)), + ('extra_data', jsonfield.fields.JSONField(default={}, blank=True)), + ('created_by', models.ForeignKey(related_name="{u'class': 'schedule', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'schedule', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ], + options={ + 'ordering': ['-next_run'], + }, + ), + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('created_by', models.ForeignKey(related_name="{u'class': 'team', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'team', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('organization', models.ForeignKey(related_name='teams', on_delete=django.db.models.deletion.SET_NULL, to='main.Organization', null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ('users', models.ManyToManyField(related_name='teams', to=settings.AUTH_USER_MODEL, blank=True)), + ], + options={ + 'ordering': ('organization__name', 'name'), + }, + ), + migrations.CreateModel( + name='UnifiedJob', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('old_pk', models.PositiveIntegerField(default=None, null=True, editable=False)), + ('launch_type', models.CharField(default=b'manual', max_length=20, editable=False, choices=[(b'manual', 'Manual'), (b'relaunch', 'Relaunch'), (b'callback', 'Callback'), (b'scheduled', 'Scheduled'), (b'dependency', 'Dependency')])), + ('cancel_flag', models.BooleanField(default=False, editable=False)), + ('status', models.CharField(default=b'new', max_length=20, editable=False, choices=[(b'new', 'New'), (b'pending', 'Pending'), (b'waiting', 'Waiting'), (b'running', 'Running'), (b'successful', 'Successful'), (b'failed', 'Failed'), (b'error', 'Error'), (b'canceled', 'Canceled')])), + ('failed', models.BooleanField(default=False, editable=False)), + ('started', models.DateTimeField(default=None, null=True, editable=False)), + ('finished', models.DateTimeField(default=None, null=True, editable=False)), + ('elapsed', models.DecimalField(editable=False, max_digits=12, decimal_places=3)), + ('job_args', models.TextField(default=b'', editable=False, blank=True)), + ('job_cwd', models.CharField(default=b'', max_length=1024, editable=False, blank=True)), + ('job_env', jsonfield.fields.JSONField(default={}, editable=False, blank=True)), + ('job_explanation', models.TextField(default=b'', editable=False, blank=True)), + ('start_args', models.TextField(default=b'', editable=False, blank=True)), + ('result_stdout_text', models.TextField(default=b'', editable=False, blank=True)), + ('result_stdout_file', models.TextField(default=b'', editable=False, blank=True)), + ('result_traceback', models.TextField(default=b'', editable=False, blank=True)), + ('celery_task_id', models.CharField(default=b'', max_length=100, editable=False, blank=True)), + ], + ), + migrations.CreateModel( + name='UnifiedJobTemplate', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('active', models.BooleanField(default=True, editable=False)), + ('name', models.CharField(max_length=512)), + ('old_pk', models.PositiveIntegerField(default=None, null=True, editable=False)), + ('last_job_failed', models.BooleanField(default=False, editable=False)), + ('last_job_run', models.DateTimeField(default=None, null=True, editable=False)), + ('has_schedules', models.BooleanField(default=False, editable=False)), + ('next_job_run', models.DateTimeField(default=None, null=True, editable=False)), + ('status', models.CharField(default=b'ok', max_length=32, editable=False, choices=[(b'new', 'New'), (b'pending', 'Pending'), (b'waiting', 'Waiting'), (b'running', 'Running'), (b'successful', 'Successful'), (b'failed', 'Failed'), (b'error', 'Error'), (b'canceled', 'Canceled'), (b'never updated', b'Never Updated'), (b'ok', b'OK'), (b'missing', b'Missing'), (b'none', 'No External Source'), (b'updating', 'Updating')])), + ], + ), + migrations.CreateModel( + name='AdHocCommand', + fields=[ + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('job_type', models.CharField(default=b'run', max_length=64, choices=[(b'run', 'Run'), (b'check', 'Check')])), + ('limit', models.CharField(default=b'', max_length=1024, blank=True)), + ('module_name', models.CharField(default=b'', max_length=1024, blank=True)), + ('module_args', models.TextField(default=b'', blank=True)), + ('forks', models.PositiveIntegerField(default=0, blank=True)), + ('verbosity', models.PositiveIntegerField(default=0, blank=True, choices=[(0, b'0 (Normal)'), (1, b'1 (Verbose)'), (2, b'2 (More Verbose)'), (3, b'3 (Debug)'), (4, b'4 (Connection Debug)'), (5, b'5 (WinRM Debug)')])), + ('become_enabled', models.BooleanField(default=False)), + ], + bases=('main.unifiedjob',), + ), + migrations.CreateModel( + name='InventorySource', + fields=[ + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('source', models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'vmware', 'VMware vCenter'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')])), + ('source_path', models.CharField(default=b'', max_length=1024, editable=False, blank=True)), + ('source_vars', models.TextField(default=b'', help_text='Inventory source variables in YAML or JSON format.', blank=True)), + ('source_regions', models.CharField(default=b'', max_length=1024, blank=True)), + ('instance_filters', models.CharField(default=b'', help_text='Comma-separated list of filter expressions (EC2 only). Hosts are imported when ANY of the filters match.', max_length=1024, blank=True)), + ('group_by', models.CharField(default=b'', help_text='Limit groups automatically created from inventory source (EC2 only).', max_length=1024, blank=True)), + ('overwrite', models.BooleanField(default=False, help_text='Overwrite local groups and hosts from remote inventory source.')), + ('overwrite_vars', models.BooleanField(default=False, help_text='Overwrite local variables from remote inventory source.')), + ('update_on_launch', models.BooleanField(default=False)), + ('update_cache_timeout', models.PositiveIntegerField(default=0)), + ], + bases=('main.unifiedjobtemplate', models.Model), + ), + migrations.CreateModel( + name='InventoryUpdate', + fields=[ + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('source', models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'vmware', 'VMware vCenter'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')])), + ('source_path', models.CharField(default=b'', max_length=1024, editable=False, blank=True)), + ('source_vars', models.TextField(default=b'', help_text='Inventory source variables in YAML or JSON format.', blank=True)), + ('source_regions', models.CharField(default=b'', max_length=1024, blank=True)), + ('instance_filters', models.CharField(default=b'', help_text='Comma-separated list of filter expressions (EC2 only). Hosts are imported when ANY of the filters match.', max_length=1024, blank=True)), + ('group_by', models.CharField(default=b'', help_text='Limit groups automatically created from inventory source (EC2 only).', max_length=1024, blank=True)), + ('overwrite', models.BooleanField(default=False, help_text='Overwrite local groups and hosts from remote inventory source.')), + ('overwrite_vars', models.BooleanField(default=False, help_text='Overwrite local variables from remote inventory source.')), + ('license_error', models.BooleanField(default=False, editable=False)), + ], + bases=('main.unifiedjob', models.Model), + ), + migrations.CreateModel( + name='Job', + fields=[ + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('job_type', models.CharField(default=b'run', max_length=64, choices=[(b'run', 'Run'), (b'check', 'Check'), (b'scan', 'Scan')])), + ('playbook', models.CharField(default=b'', max_length=1024, blank=True)), + ('forks', models.PositiveIntegerField(default=0, blank=True)), + ('limit', models.CharField(default=b'', max_length=1024, blank=True)), + ('verbosity', models.PositiveIntegerField(default=0, blank=True, choices=[(0, b'0 (Normal)'), (1, b'1 (Verbose)'), (2, b'2 (More Verbose)'), (3, b'3 (Debug)'), (4, b'4 (Connection Debug)'), (5, b'5 (WinRM Debug)')])), + ('extra_vars', models.TextField(default=b'', blank=True)), + ('job_tags', models.CharField(default=b'', max_length=1024, blank=True)), + ('force_handlers', models.BooleanField(default=False)), + ('skip_tags', models.CharField(default=b'', max_length=1024, blank=True)), + ('start_at_task', models.CharField(default=b'', max_length=1024, blank=True)), + ('become_enabled', models.BooleanField(default=False)), + ], + options={ + 'ordering': ('id',), + }, + bases=('main.unifiedjob', models.Model), + ), + migrations.CreateModel( + name='JobTemplate', + fields=[ + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('job_type', models.CharField(default=b'run', max_length=64, choices=[(b'run', 'Run'), (b'check', 'Check'), (b'scan', 'Scan')])), + ('playbook', models.CharField(default=b'', max_length=1024, blank=True)), + ('forks', models.PositiveIntegerField(default=0, blank=True)), + ('limit', models.CharField(default=b'', max_length=1024, blank=True)), + ('verbosity', models.PositiveIntegerField(default=0, blank=True, choices=[(0, b'0 (Normal)'), (1, b'1 (Verbose)'), (2, b'2 (More Verbose)'), (3, b'3 (Debug)'), (4, b'4 (Connection Debug)'), (5, b'5 (WinRM Debug)')])), + ('extra_vars', models.TextField(default=b'', blank=True)), + ('job_tags', models.CharField(default=b'', max_length=1024, blank=True)), + ('force_handlers', models.BooleanField(default=False)), + ('skip_tags', models.CharField(default=b'', max_length=1024, blank=True)), + ('start_at_task', models.CharField(default=b'', max_length=1024, blank=True)), + ('become_enabled', models.BooleanField(default=False)), + ('host_config_key', models.CharField(default=b'', max_length=1024, blank=True)), + ('ask_variables_on_launch', models.BooleanField(default=False)), + ('survey_enabled', models.BooleanField(default=False)), + ('survey_spec', jsonfield.fields.JSONField(default={}, blank=True)), + ], + options={ + 'ordering': ('name',), + }, + bases=('main.unifiedjobtemplate', models.Model), + ), + migrations.CreateModel( + name='Project', + fields=[ + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('local_path', models.CharField(help_text='Local path (relative to PROJECTS_ROOT) containing playbooks and related files for this project.', max_length=1024, blank=True)), + ('scm_type', models.CharField(default=b'', max_length=8, verbose_name='SCM Type', blank=True, choices=[(b'', 'Manual'), (b'git', 'Git'), (b'hg', 'Mercurial'), (b'svn', 'Subversion')])), + ('scm_url', models.CharField(default=b'', max_length=1024, verbose_name='SCM URL', blank=True)), + ('scm_branch', models.CharField(default=b'', help_text='Specific branch, tag or commit to checkout.', max_length=256, verbose_name='SCM Branch', blank=True)), + ('scm_clean', models.BooleanField(default=False)), + ('scm_delete_on_update', models.BooleanField(default=False)), + ('scm_delete_on_next_update', models.BooleanField(default=False, editable=False)), + ('scm_update_on_launch', models.BooleanField(default=False)), + ('scm_update_cache_timeout', models.PositiveIntegerField(default=0, blank=True)), + ], + options={ + 'ordering': ('id',), + }, + bases=('main.unifiedjobtemplate', models.Model), + ), + migrations.CreateModel( + name='ProjectUpdate', + fields=[ + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('local_path', models.CharField(help_text='Local path (relative to PROJECTS_ROOT) containing playbooks and related files for this project.', max_length=1024, blank=True)), + ('scm_type', models.CharField(default=b'', max_length=8, verbose_name='SCM Type', blank=True, choices=[(b'', 'Manual'), (b'git', 'Git'), (b'hg', 'Mercurial'), (b'svn', 'Subversion')])), + ('scm_url', models.CharField(default=b'', max_length=1024, verbose_name='SCM URL', blank=True)), + ('scm_branch', models.CharField(default=b'', help_text='Specific branch, tag or commit to checkout.', max_length=256, verbose_name='SCM Branch', blank=True)), + ('scm_clean', models.BooleanField(default=False)), + ('scm_delete_on_update', models.BooleanField(default=False)), + ], + bases=('main.unifiedjob', models.Model), + ), + migrations.CreateModel( + name='SystemJob', + fields=[ + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('job_type', models.CharField(default=b'', max_length=32, blank=True, choices=[(b'cleanup_jobs', 'Remove jobs older than a certain number of days'), (b'cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), (b'cleanup_deleted', 'Purge previously deleted items from the database'), (b'cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')])), + ('extra_vars', models.TextField(default=b'', blank=True)), + ], + options={ + 'ordering': ('id',), + }, + bases=('main.unifiedjob', models.Model), + ), + migrations.CreateModel( + name='SystemJobTemplate', + fields=[ + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('job_type', models.CharField(default=b'', max_length=32, blank=True, choices=[(b'cleanup_jobs', 'Remove jobs older than a certain number of days'), (b'cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), (b'cleanup_deleted', 'Purge previously deleted items from the database'), (b'cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')])), + ], + bases=('main.unifiedjobtemplate', models.Model), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='created_by', + field=models.ForeignKey(related_name="{u'class': 'unifiedjobtemplate', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='current_job', + field=models.ForeignKey(related_name='unifiedjobtemplate_as_current_job+', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.UnifiedJob', null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='last_job', + field=models.ForeignKey(related_name='unifiedjobtemplate_as_last_job+', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.UnifiedJob', null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='modified_by', + field=models.ForeignKey(related_name="{u'class': 'unifiedjobtemplate', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='next_schedule', + field=models.ForeignKey(related_name='unifiedjobtemplate_as_next_schedule+', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Schedule', null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='polymorphic_ctype', + field=models.ForeignKey(related_name='polymorphic_main.unifiedjobtemplate_set+', editable=False, to='contenttypes.ContentType', null=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='unifiedjob', + name='created_by', + field=models.ForeignKey(related_name="{u'class': 'unifiedjob', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='unifiedjob', + name='dependent_jobs', + field=models.ManyToManyField(related_name='_unifiedjob_dependent_jobs_+', editable=False, to='main.UnifiedJob'), + ), + migrations.AddField( + model_name='unifiedjob', + name='modified_by', + field=models.ForeignKey(related_name="{u'class': 'unifiedjob', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='unifiedjob', + name='polymorphic_ctype', + field=models.ForeignKey(related_name='polymorphic_main.unifiedjob_set+', editable=False, to='contenttypes.ContentType', null=True), + ), + migrations.AddField( + model_name='unifiedjob', + name='schedule', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Schedule', null=True), + ), + migrations.AddField( + model_name='unifiedjob', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='unifiedjob', + name='unified_job_template', + field=models.ForeignKey(related_name='unifiedjob_unified_jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.UnifiedJobTemplate', null=True), + ), + migrations.AddField( + model_name='schedule', + name='unified_job_template', + field=models.ForeignKey(related_name='schedules', to='main.UnifiedJobTemplate'), + ), + migrations.AddField( + model_name='permission', + name='team', + field=models.ForeignKey(related_name='permissions', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='main.Team', null=True), + ), + migrations.AddField( + model_name='permission', + name='user', + field=models.ForeignKey(related_name='permissions', on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='joborigin', + name='unified_job', + field=models.OneToOneField(related_name='job_origin', to='main.UnifiedJob'), + ), + migrations.AddField( + model_name='inventory', + name='organization', + field=models.ForeignKey(related_name='inventories', to='main.Organization', help_text='Organization containing this inventory.'), + ), + migrations.AddField( + model_name='inventory', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='host', + name='inventory', + field=models.ForeignKey(related_name='hosts', to='main.Inventory'), + ), + migrations.AddField( + model_name='host', + name='last_job_host_summary', + field=models.ForeignKey(related_name='hosts_as_last_job_summary+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, editable=False, to='main.JobHostSummary', null=True), + ), + migrations.AddField( + model_name='host', + name='modified_by', + field=models.ForeignKey(related_name="{u'class': 'host', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='host', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='group', + name='hosts', + field=models.ManyToManyField(help_text='Hosts associated directly with this group.', related_name='groups', to='main.Host', blank=True), + ), + migrations.AddField( + model_name='group', + name='inventory', + field=models.ForeignKey(related_name='groups', to='main.Inventory'), + ), + migrations.AddField( + model_name='group', + name='modified_by', + field=models.ForeignKey(related_name="{u'class': 'group', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='group', + name='parents', + field=models.ManyToManyField(related_name='children', to='main.Group', blank=True), + ), + migrations.AddField( + model_name='group', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='custominventoryscript', + name='organization', + field=models.ForeignKey(related_name='custom_inventory_scripts', on_delete=django.db.models.deletion.SET_NULL, to='main.Organization', help_text='Organization owning this inventory script', null=True), + ), + migrations.AddField( + model_name='custominventoryscript', + name='tags', + field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + ), + migrations.AddField( + model_name='credential', + name='team', + field=models.ForeignKey(related_name='credentials', default=None, blank=True, to='main.Team', null=True), + ), + migrations.AddField( + model_name='credential', + name='user', + field=models.ForeignKey(related_name='credentials', default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AddField( + model_name='adhoccommandevent', + name='host', + field=models.ForeignKey(related_name='ad_hoc_command_events', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Host', null=True), + ), + migrations.AddField( + model_name='activitystream', + name='credential', + field=models.ManyToManyField(to='main.Credential', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='custom_inventory_script', + field=models.ManyToManyField(to='main.CustomInventoryScript', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='group', + field=models.ManyToManyField(to='main.Group', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='host', + field=models.ManyToManyField(to='main.Host', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='inventory', + field=models.ManyToManyField(to='main.Inventory', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='organization', + field=models.ManyToManyField(to='main.Organization', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='permission', + field=models.ManyToManyField(to='main.Permission', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='schedule', + field=models.ManyToManyField(to='main.Schedule', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='team', + field=models.ManyToManyField(to='main.Team', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='unified_job', + field=models.ManyToManyField(related_name='_activitystream_unified_job_+', to='main.UnifiedJob', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='unified_job_template', + field=models.ManyToManyField(related_name='_activitystream_unified_job_template_+', to='main.UnifiedJobTemplate', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='user', + field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, blank=True), + ), + migrations.AlterUniqueTogether( + name='unifiedjobtemplate', + unique_together=set([('polymorphic_ctype', 'name')]), + ), + migrations.AddField( + model_name='team', + name='projects', + field=models.ManyToManyField(related_name='teams', to='main.Project', blank=True), + ), + migrations.AddField( + model_name='systemjob', + name='system_job_template', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.SystemJobTemplate', null=True), + ), + migrations.AddField( + model_name='projectupdate', + name='credential', + field=models.ForeignKey(related_name='projectupdates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='projectupdate', + name='project', + field=models.ForeignKey(related_name='project_updates', editable=False, to='main.Project'), + ), + migrations.AddField( + model_name='project', + name='credential', + field=models.ForeignKey(related_name='projects', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='permission', + name='project', + field=models.ForeignKey(related_name='permissions', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='main.Project', null=True), + ), + migrations.AddField( + model_name='organization', + name='projects', + field=models.ManyToManyField(related_name='organizations', to='main.Project', blank=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='cloud_credential', + field=models.ForeignKey(related_name='jobtemplates_as_cloud_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='credential', + field=models.ForeignKey(related_name='jobtemplates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='inventory', + field=models.ForeignKey(related_name='jobtemplates', on_delete=django.db.models.deletion.SET_NULL, to='main.Inventory', null=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='project', + field=models.ForeignKey(related_name='jobtemplates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Project', null=True), + ), + migrations.AddField( + model_name='jobhostsummary', + name='job', + field=models.ForeignKey(related_name='job_host_summaries', editable=False, to='main.Job'), + ), + migrations.AddField( + model_name='jobevent', + name='job', + field=models.ForeignKey(related_name='job_events', editable=False, to='main.Job'), + ), + migrations.AddField( + model_name='job', + name='cloud_credential', + field=models.ForeignKey(related_name='jobs_as_cloud_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='job', + name='credential', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='job', + name='hosts', + field=models.ManyToManyField(related_name='jobs', editable=False, through='main.JobHostSummary', to='main.Host'), + ), + migrations.AddField( + model_name='job', + name='inventory', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, to='main.Inventory', null=True), + ), + migrations.AddField( + model_name='job', + name='job_template', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.JobTemplate', null=True), + ), + migrations.AddField( + model_name='job', + name='project', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Project', null=True), + ), + migrations.AddField( + model_name='inventoryupdate', + name='credential', + field=models.ForeignKey(related_name='inventoryupdates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='inventoryupdate', + name='inventory_source', + field=models.ForeignKey(related_name='inventory_updates', editable=False, to='main.InventorySource'), + ), + migrations.AddField( + model_name='inventoryupdate', + name='source_script', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.CustomInventoryScript', null=True), + ), + migrations.AddField( + model_name='inventorysource', + name='credential', + field=models.ForeignKey(related_name='inventorysources', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='inventorysource', + name='group', + field=awx.main.fields.AutoOneToOneField(related_name='inventory_source', null=True, default=None, editable=False, to='main.Group'), + ), + migrations.AddField( + model_name='inventorysource', + name='inventory', + field=models.ForeignKey(related_name='inventory_sources', default=None, editable=False, to='main.Inventory', null=True), + ), + migrations.AddField( + model_name='inventorysource', + name='source_script', + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.CustomInventoryScript', null=True), + ), + migrations.AlterUniqueTogether( + name='inventory', + unique_together=set([('name', 'organization')]), + ), + migrations.AddField( + model_name='host', + name='inventory_sources', + field=models.ManyToManyField(help_text='Inventory source(s) that created or modified this host.', related_name='hosts', editable=False, to='main.InventorySource'), + ), + migrations.AddField( + model_name='host', + name='last_job', + field=models.ForeignKey(related_name='hosts_as_last_job+', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Job', null=True), + ), + migrations.AddField( + model_name='group', + name='inventory_sources', + field=models.ManyToManyField(help_text='Inventory source(s) that created or modified this group.', related_name='groups', editable=False, to='main.InventorySource'), + ), + migrations.AlterUniqueTogether( + name='custominventoryscript', + unique_together=set([('name', 'organization')]), + ), + migrations.AlterUniqueTogether( + name='credential', + unique_together=set([('user', 'team', 'kind', 'name')]), + ), + migrations.AddField( + model_name='adhoccommandevent', + name='ad_hoc_command', + field=models.ForeignKey(related_name='ad_hoc_command_events', editable=False, to='main.AdHocCommand'), + ), + migrations.AddField( + model_name='adhoccommand', + name='credential', + field=models.ForeignKey(related_name='ad_hoc_commands', on_delete=django.db.models.deletion.SET_NULL, default=None, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='adhoccommand', + name='hosts', + field=models.ManyToManyField(related_name='ad_hoc_commands', editable=False, through='main.AdHocCommandEvent', to='main.Host'), + ), + migrations.AddField( + model_name='adhoccommand', + name='inventory', + field=models.ForeignKey(related_name='ad_hoc_commands', on_delete=django.db.models.deletion.SET_NULL, to='main.Inventory', null=True), + ), + migrations.AddField( + model_name='activitystream', + name='ad_hoc_command', + field=models.ManyToManyField(to='main.AdHocCommand', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='inventory_source', + field=models.ManyToManyField(to='main.InventorySource', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='inventory_update', + field=models.ManyToManyField(to='main.InventoryUpdate', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='job', + field=models.ManyToManyField(to='main.Job', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='job_template', + field=models.ManyToManyField(to='main.JobTemplate', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='project', + field=models.ManyToManyField(to='main.Project', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='project_update', + field=models.ManyToManyField(to='main.ProjectUpdate', blank=True), + ), + migrations.AlterUniqueTogether( + name='team', + unique_together=set([('organization', 'name')]), + ), + migrations.AlterUniqueTogether( + name='jobhostsummary', + unique_together=set([('job', 'host_name')]), + ), + migrations.AlterUniqueTogether( + name='host', + unique_together=set([('name', 'inventory')]), + ), + migrations.AlterUniqueTogether( + name='group', + unique_together=set([('name', 'inventory')]), + ), + migrations.AlterUniqueTogether( + name='adhoccommandevent', + unique_together=set([('ad_hoc_command', 'host_name')]), + ), + ] diff --git a/awx/main/migrations/0002_v300_tower_settings_changes.py b/awx/main/migrations/0002_v300_tower_settings_changes.py new file mode 100644 index 0000000000..9d222762b1 --- /dev/null +++ b/awx/main/migrations/0002_v300_tower_settings_changes.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='TowerSettings', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('key', models.CharField(unique=True, max_length=255)), + ('description', models.TextField()), + ('category', models.CharField(max_length=128)), + ('value', models.TextField(blank=True)), + ('value_type', models.CharField(max_length=12, choices=[(b'string', 'String'), (b'int', 'Integer'), (b'float', 'Decimal'), (b'json', 'JSON'), (b'bool', 'Boolean'), (b'password', 'Password'), (b'list', 'List')])), + ('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + ] diff --git a/awx/main/migrations/0003_v300_notification_changes.py b/awx/main/migrations/0003_v300_notification_changes.py new file mode 100644 index 0000000000..51ea0e3d19 --- /dev/null +++ b/awx/main/migrations/0003_v300_notification_changes.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields +import django.db.models.deletion +from django.conf import settings +import taggit.managers + + +class Migration(migrations.Migration): + + dependencies = [ + ('taggit', '0002_auto_20150616_2121'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0002_v300_tower_settings_changes'), + ] + + operations = [ + migrations.CreateModel( + name='Notification', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('status', models.CharField(default=b'pending', max_length=20, editable=False, choices=[(b'pending', 'Pending'), (b'successful', 'Successful'), (b'failed', 'Failed')])), + ('error', models.TextField(default=b'', editable=False, blank=True)), + ('notifications_sent', models.IntegerField(default=0, editable=False)), + ('notification_type', models.CharField(max_length=32, choices=[(b'email', 'Email'), (b'slack', 'Slack'), (b'twilio', 'Twilio'), (b'pagerduty', 'Pagerduty'), (b'hipchat', 'HipChat'), (b'webhook', 'Webhook'), (b'irc', 'IRC')])), + ('recipients', models.TextField(default=b'', editable=False, blank=True)), + ('subject', models.TextField(default=b'', editable=False, blank=True)), + ('body', jsonfield.fields.JSONField(default=dict, blank=True)), + ], + options={ + 'ordering': ('pk',), + }, + ), + migrations.CreateModel( + name='NotificationTemplate', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('name', models.CharField(unique=True, max_length=512)), + ('notification_type', models.CharField(max_length=32, choices=[(b'email', 'Email'), (b'slack', 'Slack'), (b'twilio', 'Twilio'), (b'pagerduty', 'Pagerduty'), (b'hipchat', 'HipChat'), (b'webhook', 'Webhook'), (b'irc', 'IRC')])), + ('notification_configuration', jsonfield.fields.JSONField(default=dict)), + ('created_by', models.ForeignKey(related_name="{u'class': 'notificationtemplate', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'notificationtemplate', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('organization', models.ForeignKey(related_name='notification_templates', on_delete=django.db.models.deletion.SET_NULL, to='main.Organization', null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ], + ), + migrations.AddField( + model_name='notification', + name='notification_template', + field=models.ForeignKey(related_name='notifications', editable=False, to='main.NotificationTemplate'), + ), + migrations.AddField( + model_name='activitystream', + name='notification', + field=models.ManyToManyField(to='main.Notification', blank=True), + ), + migrations.AddField( + model_name='activitystream', + name='notification_template', + field=models.ManyToManyField(to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='organization', + name='notification_templates_any', + field=models.ManyToManyField(related_name='organization_notification_templates_for_any', to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='organization', + name='notification_templates_error', + field=models.ManyToManyField(related_name='organization_notification_templates_for_errors', to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='organization', + name='notification_templates_success', + field=models.ManyToManyField(related_name='organization_notification_templates_for_success', to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='unifiedjob', + name='notifications', + field=models.ManyToManyField(related_name='unifiedjob_notifications', editable=False, to='main.Notification'), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='notification_templates_any', + field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_any', to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='notification_templates_error', + field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_errors', to='main.NotificationTemplate', blank=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='notification_templates_success', + field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_success', to='main.NotificationTemplate', blank=True), + ), + ] diff --git a/awx/main/migrations/0004_v300_fact_changes.py b/awx/main/migrations/0004_v300_fact_changes.py new file mode 100644 index 0000000000..27ccebc046 --- /dev/null +++ b/awx/main/migrations/0004_v300_fact_changes.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonbfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0003_v300_notification_changes'), + ] + + operations = [ + migrations.CreateModel( + name='Fact', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('timestamp', models.DateTimeField(default=None, help_text='Date and time of the corresponding fact scan gathering time.', editable=False)), + ('module', models.CharField(max_length=128)), + ('facts', jsonbfield.fields.JSONField(default={}, help_text='Arbitrary JSON structure of module facts captured at timestamp for a single host.', blank=True)), + ('host', models.ForeignKey(related_name='facts', to='main.Host', help_text='Host for the facts that the fact scan captured.')), + ], + ), + migrations.AlterIndexTogether( + name='fact', + index_together=set([('timestamp', 'module', 'host')]), + ), + ] diff --git a/awx/main/migrations/0005_v300_migrate_facts.py b/awx/main/migrations/0005_v300_migrate_facts.py new file mode 100644 index 0000000000..8362227c2f --- /dev/null +++ b/awx/main/migrations/0005_v300_migrate_facts.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _system_tracking as system_tracking +from django.db import migrations + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0004_v300_fact_changes'), + ] + + operations = [ + migrations.RunPython(system_tracking.migrate_facts), + ] diff --git a/awx/main/migrations/0006_v300_active_flag_cleanup.py b/awx/main/migrations/0006_v300_active_flag_cleanup.py new file mode 100644 index 0000000000..59dee6c3da --- /dev/null +++ b/awx/main/migrations/0006_v300_active_flag_cleanup.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _cleanup_deleted as cleanup_deleted +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0005_v300_migrate_facts'), + ] + + operations = [ + migrations.RunPython(cleanup_deleted.cleanup_deleted), + ] diff --git a/awx/main/migrations/0007_v300_active_flag_removal.py b/awx/main/migrations/0007_v300_active_flag_removal.py new file mode 100644 index 0000000000..55ada4ab9d --- /dev/null +++ b/awx/main/migrations/0007_v300_active_flag_removal.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0006_v300_active_flag_cleanup'), + ] + + operations = [ + migrations.RemoveField( + model_name='credential', + name='active', + ), + migrations.RemoveField( + model_name='custominventoryscript', + name='active', + ), + migrations.RemoveField( + model_name='group', + name='active', + ), + migrations.RemoveField( + model_name='host', + name='active', + ), + migrations.RemoveField( + model_name='inventory', + name='active', + ), + migrations.RemoveField( + model_name='organization', + name='active', + ), + migrations.RemoveField( + model_name='permission', + name='active', + ), + migrations.RemoveField( + model_name='schedule', + name='active', + ), + migrations.RemoveField( + model_name='team', + name='active', + ), + migrations.RemoveField( + model_name='unifiedjob', + name='active', + ), + migrations.RemoveField( + model_name='unifiedjobtemplate', + name='active', + ), + ] diff --git a/awx/main/migrations/0008_v300_rbac_changes.py b/awx/main/migrations/0008_v300_rbac_changes.py new file mode 100644 index 0000000000..c5b2eabb89 --- /dev/null +++ b/awx/main/migrations/0008_v300_rbac_changes.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings +import awx.main.fields + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0007_v300_active_flag_removal'), + ] + + operations = [ + # + # Patch up existing + # + migrations.RenameField( + 'Organization', + 'admins', + 'deprecated_admins', + ), + migrations.RenameField( + 'Organization', + 'users', + 'deprecated_users', + ), + migrations.RenameField( + 'Team', + 'users', + 'deprecated_users', + ), + migrations.RenameField( + 'Team', + 'projects', + 'deprecated_projects', + ), + migrations.AddField( + model_name='project', + name='organization', + field=models.ForeignKey(related_name='projects', to='main.Organization', blank=True, null=True), + ), + migrations.AlterField( + model_name='team', + name='deprecated_projects', + field=models.ManyToManyField(related_name='deprecated_teams', to='main.Project', blank=True), + ), + migrations.RenameField( + model_name='organization', + old_name='projects', + new_name='deprecated_projects', + ), + migrations.AlterField( + model_name='organization', + name='deprecated_projects', + field=models.ManyToManyField(related_name='deprecated_organizations', to='main.Project', blank=True), + ), + migrations.RenameField( + 'Credential', + 'team', + 'deprecated_team', + ), + migrations.RenameField( + 'Credential', + 'user', + 'deprecated_user', + ), + migrations.AlterField( + model_name='organization', + name='deprecated_admins', + field=models.ManyToManyField(related_name='deprecated_admin_of_organizations', to=settings.AUTH_USER_MODEL, blank=True), + ), + migrations.AlterField( + model_name='organization', + name='deprecated_users', + field=models.ManyToManyField(related_name='deprecated_organizations', to=settings.AUTH_USER_MODEL, blank=True), + ), + migrations.AlterField( + model_name='team', + name='deprecated_users', + field=models.ManyToManyField(related_name='deprecated_teams', to=settings.AUTH_USER_MODEL, blank=True), + ), + migrations.AlterUniqueTogether( + name='credential', + unique_together=set([]), + ), + migrations.AddField( + model_name='credential', + name='organization', + field=models.ForeignKey(related_name='credentials', default=None, blank=True, to='main.Organization', null=True), + ), + + # + # New RBAC models and fields + # + migrations.CreateModel( + name='Role', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('role_field', models.TextField()), + ('singleton_name', models.TextField(default=None, unique=True, null=True, db_index=True)), + ('members', models.ManyToManyField(related_name='roles', to=settings.AUTH_USER_MODEL)), + ('parents', models.ManyToManyField(related_name='children', to='main.Role')), + ('implicit_parents', models.TextField(default=b'[]')), + ('content_type', models.ForeignKey(default=None, to='contenttypes.ContentType', null=True)), + ('object_id', models.PositiveIntegerField(default=None, null=True)), + + ], + options={ + 'db_table': 'main_rbac_roles', + 'verbose_name_plural': 'roles', + }, + ), + migrations.CreateModel( + name='RoleAncestorEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('role_field', models.TextField()), + ('content_type_id', models.PositiveIntegerField()), + ('object_id', models.PositiveIntegerField()), + ('ancestor', models.ForeignKey(related_name='+', to='main.Role')), + ('descendent', models.ForeignKey(related_name='+', to='main.Role')), + ], + options={ + 'db_table': 'main_rbac_role_ancestors', + 'verbose_name_plural': 'role_ancestors', + }, + ), + migrations.AddField( + model_name='role', + name='ancestors', + field=models.ManyToManyField(related_name='descendents', through='main.RoleAncestorEntry', to='main.Role'), + ), + migrations.AlterIndexTogether( + name='role', + index_together=set([('content_type', 'object_id')]), + ), + migrations.AlterIndexTogether( + name='roleancestorentry', + index_together=set([('ancestor', 'content_type_id', 'object_id'), ('ancestor', 'content_type_id', 'role_field'), ('ancestor', 'descendent')]), + ), + migrations.AddField( + model_name='credential', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'singleton:system_administrator'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='credential', + name='use_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='credential', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'singleton:system_auditor', b'organization.auditor_role', b'use_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='custominventoryscript', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'organization.admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='custominventoryscript', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.auditor_role', b'organization.member_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='inventory', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'organization.admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='inventory', + name='adhoc_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='inventory', + name='update_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='inventory', + name='use_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'adhoc_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='inventory', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.auditor_role', b'update_role', b'use_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='jobtemplate', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'project.organization.admin_role', b'inventory.organization.admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='jobtemplate', + name='execute_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='jobtemplate', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'project.organization.auditor_role', b'inventory.organization.auditor_role', b'execute_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='organization', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'singleton:system_administrator', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='organization', + name='auditor_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'singleton:system_auditor', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='organization', + name='member_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='organization', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'member_role', b'auditor_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='project', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.admin_role', b'singleton:system_administrator'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='project', + name='use_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='project', + name='update_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='project', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.auditor_role', b'singleton:system_auditor', b'use_role', b'update_role'], to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='team', + name='admin_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'organization.admin_role', to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='team', + name='member_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=None, to='main.Role', null=b'True'), + ), + migrations.AddField( + model_name='team', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'admin_role', b'organization.auditor_role', b'member_role'], to='main.Role', null=b'True'), + ), + ] diff --git a/awx/main/migrations/0009_v300_rbac_migrations.py b/awx/main/migrations/0009_v300_rbac_migrations.py new file mode 100644 index 0000000000..cf5d5bbe89 --- /dev/null +++ b/awx/main/migrations/0009_v300_rbac_migrations.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _rbac as rbac +from awx.main.migrations import _migration_utils as migration_utils +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0008_v300_rbac_changes'), + ] + + operations = [ + migrations.RunPython(migration_utils.set_current_apps_for_migrations), + migrations.RunPython(rbac.migrate_users), + migrations.RunPython(rbac.create_roles), + migrations.RunPython(rbac.migrate_organization), + migrations.RunPython(rbac.migrate_team), + migrations.RunPython(rbac.migrate_inventory), + migrations.RunPython(rbac.migrate_projects), + migrations.RunPython(rbac.migrate_credential), + migrations.RunPython(rbac.migrate_job_templates), + migrations.RunPython(rbac.rebuild_role_hierarchy), + ] diff --git a/awx/main/migrations/0010_v300_create_system_job_templates.py b/awx/main/migrations/0010_v300_create_system_job_templates.py new file mode 100644 index 0000000000..abf336efaa --- /dev/null +++ b/awx/main/migrations/0010_v300_create_system_job_templates.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.utils.timezone import now + +from awx.api.license import feature_enabled + + +def create_system_job_templates(apps, schema_editor): + ''' + Create default system job templates if not present. Create default schedules + only if new system job templates were created (i.e. new database). + ''' + + SystemJobTemplate = apps.get_model('main', 'SystemJobTemplate') + Schedule = apps.get_model('main', 'Schedule') + ContentType = apps.get_model('contenttypes', 'ContentType') + sjt_ct = ContentType.objects.get_for_model(SystemJobTemplate) + now_dt = now() + now_str = now_dt.strftime('%Y%m%dT%H%M%SZ') + + sjt, created = SystemJobTemplate.objects.get_or_create( + job_type='cleanup_jobs', + defaults=dict( + name='Cleanup Job Details', + description='Remove job history', + created=now_dt, + modified=now_dt, + polymorphic_ctype=sjt_ct, + ), + ) + if created: + sched = Schedule( + name='Cleanup Job Schedule', + rrule='DTSTART:%s RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU' % now_str, + description='Automatically Generated Schedule', + enabled=True, + extra_data={'days': '120'}, + created=now_dt, + modified=now_dt, + ) + sched.unified_job_template = sjt + sched.save() + + existing_cd_jobs = SystemJobTemplate.objects.filter(job_type='cleanup_deleted') + Schedule.objects.filter(unified_job_template__in=existing_cd_jobs).delete() + existing_cd_jobs.delete() + + sjt, created = SystemJobTemplate.objects.get_or_create( + job_type='cleanup_activitystream', + defaults=dict( + name='Cleanup Activity Stream', + description='Remove activity stream history', + created=now_dt, + modified=now_dt, + polymorphic_ctype=sjt_ct, + ), + ) + if created: + sched = Schedule( + name='Cleanup Activity Schedule', + rrule='DTSTART:%s RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU' % now_str, + description='Automatically Generated Schedule', + enabled=True, + extra_data={'days': '355'}, + created=now_dt, + modified=now_dt, + ) + sched.unified_job_template = sjt + sched.save() + + sjt, created = SystemJobTemplate.objects.get_or_create( + job_type='cleanup_facts', + defaults=dict( + name='Cleanup Fact Details', + description='Remove system tracking history', + created=now_dt, + modified=now_dt, + polymorphic_ctype=sjt_ct, + ), + ) + if created and feature_enabled('system_tracking', bypass_database=True): + sched = Schedule( + name='Cleanup Fact Schedule', + rrule='DTSTART:%s RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1' % now_str, + description='Automatically Generated Schedule', + enabled=True, + extra_data={'older_than': '120d', 'granularity': '1w'}, + created=now_dt, + modified=now_dt, + ) + sched.unified_job_template = sjt + sched.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0009_v300_rbac_migrations'), + ] + + operations = [ + migrations.RunPython(create_system_job_templates, migrations.RunPython.noop), + migrations.AlterField( + model_name='systemjob', + name='job_type', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'cleanup_jobs', 'Remove jobs older than a certain number of days'), (b'cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), (b'cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')]), + ), + migrations.AlterField( + model_name='systemjobtemplate', + name='job_type', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'cleanup_jobs', 'Remove jobs older than a certain number of days'), (b'cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), (b'cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')]), + ), + ] diff --git a/awx/main/migrations/0011_v300_credential_domain_field.py b/awx/main/migrations/0011_v300_credential_domain_field.py new file mode 100644 index 0000000000..7b8aa0fa49 --- /dev/null +++ b/awx/main/migrations/0011_v300_credential_domain_field.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0010_v300_create_system_job_templates'), + ] + + operations = [ + migrations.AddField( + model_name='credential', + name='domain', + field=models.CharField(default=b'', help_text='The identifier for the domain.', max_length=100, verbose_name='Domain', blank=True), + ), + ] diff --git a/awx/main/migrations/0012_v300_create_labels.py b/awx/main/migrations/0012_v300_create_labels.py new file mode 100644 index 0000000000..ae1b9df932 --- /dev/null +++ b/awx/main/migrations/0012_v300_create_labels.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +from django.conf import settings +import taggit.managers + + +class Migration(migrations.Migration): + + dependencies = [ + ('taggit', '0002_auto_20150616_2121'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0011_v300_credential_domain_field'), + ] + + operations = [ + migrations.CreateModel( + name='Label', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=None, editable=False)), + ('modified', models.DateTimeField(default=None, editable=False)), + ('description', models.TextField(default=b'', blank=True)), + ('name', models.CharField(max_length=512)), + ('created_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('organization', models.ForeignKey(related_name='labels', to='main.Organization', help_text='Organization this label belongs to.')), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), + ], + options={ + 'ordering': ('organization', 'name'), + }, + ), + migrations.AddField( + model_name='activitystream', + name='label', + field=models.ManyToManyField(to='main.Label', blank=True), + ), + migrations.AddField( + model_name='job', + name='labels', + field=models.ManyToManyField(related_name='job_labels', to='main.Label', blank=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='labels', + field=models.ManyToManyField(related_name='jobtemplate_labels', to='main.Label', blank=True), + ), + migrations.AlterUniqueTogether( + name='label', + unique_together=set([('name', 'organization')]), + ), + ] diff --git a/awx/main/migrations/0013_v300_label_changes.py b/awx/main/migrations/0013_v300_label_changes.py new file mode 100644 index 0000000000..e8cfda14cd --- /dev/null +++ b/awx/main/migrations/0013_v300_label_changes.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0012_v300_create_labels'), + ] + + operations = [ + migrations.AlterField( + model_name='label', + name='organization', + field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Organization', help_text='Organization this label belongs to.', null=True), + ), + ] diff --git a/awx/main/migrations/0014_v300_invsource_cred.py b/awx/main/migrations/0014_v300_invsource_cred.py new file mode 100644 index 0000000000..f98b80ff56 --- /dev/null +++ b/awx/main/migrations/0014_v300_invsource_cred.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0013_v300_label_changes'), + ] + + operations = [ + migrations.AddField( + model_name='job', + name='network_credential', + field=models.ForeignKey(related_name='jobs_as_network_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='jobtemplate', + name='network_credential', + field=models.ForeignKey(related_name='jobtemplates_as_network_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + ), + migrations.AddField( + model_name='credential', + name='authorize', + field=models.BooleanField(default=False, help_text='Whether to use the authorize mechanism.'), + ), + migrations.AddField( + model_name='credential', + name='authorize_password', + field=models.CharField(default=b'', help_text='Password used by the authorize mechanism.', max_length=1024, blank=True), + ), + migrations.AlterField( + model_name='credential', + name='deprecated_team', + field=models.ForeignKey(related_name='deprecated_credentials', default=None, blank=True, to='main.Team', null=True), + ), + migrations.AlterField( + model_name='credential', + name='deprecated_user', + field=models.ForeignKey(related_name='deprecated_credentials', default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AlterField( + model_name='credential', + name='kind', + field=models.CharField(default=b'ssh', max_length=32, choices=[(b'ssh', 'Machine'), (b'net', 'Network'), (b'scm', 'Source Control'), (b'aws', 'Amazon Web Services'), (b'rax', 'Rackspace'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'openstack', 'OpenStack')]), + ), + migrations.AlterField( + model_name='inventorysource', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + migrations.AlterField( + model_name='inventoryupdate', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + migrations.AlterField( + model_name='team', + name='deprecated_projects', + field=models.ManyToManyField(related_name='deprecated_teams', to='main.Project', blank=True), + ), + ] diff --git a/awx/main/migrations/0015_v300_label_changes.py b/awx/main/migrations/0015_v300_label_changes.py new file mode 100644 index 0000000000..022ae1d73a --- /dev/null +++ b/awx/main/migrations/0015_v300_label_changes.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0014_v300_invsource_cred'), + ] + + operations = [ + migrations.AlterField( + model_name='label', + name='organization', + field=models.ForeignKey(related_name='labels', to='main.Organization', help_text='Organization this label belongs to.'), + ), + ] diff --git a/awx/main/migrations/0016_v300_prompting_changes.py b/awx/main/migrations/0016_v300_prompting_changes.py new file mode 100644 index 0000000000..63edda959b --- /dev/null +++ b/awx/main/migrations/0016_v300_prompting_changes.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0015_v300_label_changes'), + ] + + operations = [ + migrations.AddField( + model_name='jobtemplate', + name='ask_limit_on_launch', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='jobtemplate', + name='ask_inventory_on_launch', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='jobtemplate', + name='ask_credential_on_launch', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='jobtemplate', + name='ask_job_type_on_launch', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='jobtemplate', + name='ask_tags_on_launch', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='job', + name='inventory', + field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Inventory', null=True), + ), + migrations.AlterField( + model_name='jobtemplate', + name='inventory', + field=models.ForeignKey(related_name='jobtemplates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Inventory', null=True), + ), + ] diff --git a/awx/main/migrations/0017_v300_prompting_migrations.py b/awx/main/migrations/0017_v300_prompting_migrations.py new file mode 100644 index 0000000000..6bec778956 --- /dev/null +++ b/awx/main/migrations/0017_v300_prompting_migrations.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _rbac as rbac +from awx.main.migrations import _ask_for_variables as ask_for_variables +from awx.main.migrations import _migration_utils as migration_utils +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0016_v300_prompting_changes'), + ] + + operations = [ + migrations.RunPython(migration_utils.set_current_apps_for_migrations), + migrations.RunPython(ask_for_variables.migrate_credential), + migrations.RunPython(rbac.rebuild_role_hierarchy), + ] diff --git a/awx/main/migrations/0018_v300_host_ordering.py b/awx/main/migrations/0018_v300_host_ordering.py new file mode 100644 index 0000000000..0309875de6 --- /dev/null +++ b/awx/main/migrations/0018_v300_host_ordering.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0017_v300_prompting_migrations'), + ] + + operations = [ + migrations.AlterModelOptions( + name='host', + options={'ordering': ('name',)}, + ), + ] diff --git a/awx/main/migrations/0019_v300_new_azure_credential.py b/awx/main/migrations/0019_v300_new_azure_credential.py new file mode 100644 index 0000000000..ad866f1cd6 --- /dev/null +++ b/awx/main/migrations/0019_v300_new_azure_credential.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0018_v300_host_ordering'), + ] + + operations = [ + migrations.AddField( + model_name='credential', + name='client', + field=models.CharField(default=b'', help_text='Client Id or Application Id for the credential', max_length=128, blank=True), + ), + migrations.AddField( + model_name='credential', + name='secret', + field=models.CharField(default=b'', help_text='Secret Token for this credential', max_length=1024, blank=True), + ), + migrations.AddField( + model_name='credential', + name='subscription', + field=models.CharField(default=b'', help_text='Subscription identifier for this credential', max_length=1024, blank=True), + ), + migrations.AddField( + model_name='credential', + name='tenant', + field=models.CharField(default=b'', help_text='Tenant identifier for this credential', max_length=1024, blank=True), + ), + migrations.AlterField( + model_name='credential', + name='kind', + field=models.CharField(default=b'ssh', max_length=32, choices=[(b'ssh', 'Machine'), (b'net', 'Network'), (b'scm', 'Source Control'), (b'aws', 'Amazon Web Services'), (b'rax', 'Rackspace'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Satellite 6'), (b'cloudforms', 'CloudForms'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'openstack', 'OpenStack')]), + ), + migrations.AlterField( + model_name='host', + name='instance_id', + field=models.CharField(default=b'', max_length=1024, blank=True), + ), + migrations.AlterField( + model_name='inventorysource', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Satellite 6'), (b'cloudforms', 'CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + migrations.AlterField( + model_name='inventoryupdate', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Satellite 6'), (b'cloudforms', 'CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + + ] diff --git a/awx/main/migrations/0020_v300_labels_changes.py b/awx/main/migrations/0020_v300_labels_changes.py new file mode 100644 index 0000000000..5ae949340c --- /dev/null +++ b/awx/main/migrations/0020_v300_labels_changes.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0019_v300_new_azure_credential'), + ] + + operations = [ + migrations.RemoveField( + model_name='job', + name='labels', + ), + migrations.RemoveField( + model_name='jobtemplate', + name='labels', + ), + migrations.AddField( + model_name='unifiedjob', + name='labels', + field=models.ManyToManyField(related_name='unifiedjob_labels', to='main.Label', blank=True), + ), + migrations.AddField( + model_name='unifiedjobtemplate', + name='labels', + field=models.ManyToManyField(related_name='unifiedjobtemplate_labels', to='main.Label', blank=True), + ), + ] diff --git a/awx/main/migrations/0021_v300_activity_stream.py b/awx/main/migrations/0021_v300_activity_stream.py new file mode 100644 index 0000000000..900fd4b07d --- /dev/null +++ b/awx/main/migrations/0021_v300_activity_stream.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0020_v300_labels_changes'), + ] + + operations = [ + migrations.AddField( + model_name='activitystream', + name='role', + field=models.ManyToManyField(to='main.Role', blank=True), + ), + ] diff --git a/awx/main/migrations/0022_v300_adhoc_extravars.py b/awx/main/migrations/0022_v300_adhoc_extravars.py new file mode 100644 index 0000000000..1326edcd6d --- /dev/null +++ b/awx/main/migrations/0022_v300_adhoc_extravars.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0021_v300_activity_stream'), + ] + + operations = [ + migrations.AddField( + model_name='adhoccommand', + name='extra_vars', + field=models.TextField(default=b'', blank=True), + ), + migrations.AlterField( + model_name='credential', + name='kind', + field=models.CharField(default=b'ssh', max_length=32, choices=[(b'ssh', 'Machine'), (b'net', 'Network'), (b'scm', 'Source Control'), (b'aws', 'Amazon Web Services'), (b'rax', 'Rackspace'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'openstack', 'OpenStack')]), + ), + migrations.AlterField( + model_name='inventorysource', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + migrations.AlterField( + model_name='inventoryupdate', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'satellite6', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + ] diff --git a/awx/main/migrations/0023_v300_activity_stream_ordering.py b/awx/main/migrations/0023_v300_activity_stream_ordering.py new file mode 100644 index 0000000000..1a67010e3a --- /dev/null +++ b/awx/main/migrations/0023_v300_activity_stream_ordering.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0022_v300_adhoc_extravars'), + ] + + operations = [ + migrations.AlterModelOptions( + name='activitystream', + options={'ordering': ('pk',)}, + ), + ] diff --git a/awx/main/migrations/0024_v300_jobtemplate_allow_simul.py b/awx/main/migrations/0024_v300_jobtemplate_allow_simul.py new file mode 100644 index 0000000000..ef67525e4b --- /dev/null +++ b/awx/main/migrations/0024_v300_jobtemplate_allow_simul.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0023_v300_activity_stream_ordering'), + ] + + operations = [ + migrations.AddField( + model_name='jobtemplate', + name='allow_simultaneous', + field=models.BooleanField(default=False), + ), + ] diff --git a/awx/main/migrations/0025_v300_update_rbac_parents.py b/awx/main/migrations/0025_v300_update_rbac_parents.py new file mode 100644 index 0000000000..00776ac3b9 --- /dev/null +++ b/awx/main/migrations/0025_v300_update_rbac_parents.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations +import awx.main.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0024_v300_jobtemplate_allow_simul'), + ] + + operations = [ + migrations.AlterField( + model_name='credential', + name='use_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.admin_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.AlterField( + model_name='team', + name='member_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=b'admin_role', to='main.Role', null=b'True'), + ), + migrations.AlterField( + model_name='team', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'organization.auditor_role', b'member_role'], to='main.Role', null=b'True'), + ), + ] diff --git a/awx/main/migrations/0026_v300_credential_unique.py b/awx/main/migrations/0026_v300_credential_unique.py new file mode 100644 index 0000000000..3c1d714327 --- /dev/null +++ b/awx/main/migrations/0026_v300_credential_unique.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _rbac as rbac +from awx.main.migrations import _migration_utils as migration_utils +from django.db import migrations +import awx.main.fields + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0025_v300_update_rbac_parents'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='credential', + unique_together=set([('organization', 'name', 'kind')]), + ), + migrations.AlterField( + model_name='credential', + name='read_role', + field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=[b'singleton:system_auditor', b'organization.auditor_role', b'use_role', b'admin_role'], to='main.Role', null=b'True'), + ), + migrations.RunPython(migration_utils.set_current_apps_for_migrations), + migrations.RunPython(rbac.rebuild_role_hierarchy), + ] diff --git a/awx/main/migrations/0027_v300_team_migrations.py b/awx/main/migrations/0027_v300_team_migrations.py new file mode 100644 index 0000000000..b53fd8a969 --- /dev/null +++ b/awx/main/migrations/0027_v300_team_migrations.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _rbac as rbac +from awx.main.migrations import _team_cleanup as team_cleanup +from awx.main.migrations import _migration_utils as migration_utils +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0026_v300_credential_unique'), + ] + + operations = [ + migrations.RunPython(migration_utils.set_current_apps_for_migrations), + migrations.RunPython(team_cleanup.migrate_team), + migrations.RunPython(rbac.rebuild_role_hierarchy), + ] diff --git a/awx/main/migrations/0028_v300_org_team_cascade.py b/awx/main/migrations/0028_v300_org_team_cascade.py new file mode 100644 index 0000000000..80378c5729 --- /dev/null +++ b/awx/main/migrations/0028_v300_org_team_cascade.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import awx.main.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0027_v300_team_migrations'), + ] + + operations = [ + migrations.AlterField( + model_name='team', + name='organization', + field=models.ForeignKey(related_name='teams', to='main.Organization'), + preserve_default=False, + ), + ] diff --git a/awx/main/migrations/__init__.py b/awx/main/migrations/__init__.py index e484e62be1..709b95a6a6 100644 --- a/awx/main/migrations/__init__.py +++ b/awx/main/migrations/__init__.py @@ -1,2 +1,2 @@ -# Copyright (c) 2015 Ansible, Inc. +# Copyright (c) 2016 Ansible, Inc. # All Rights Reserved. diff --git a/awx/main/migrations/_ask_for_variables.py b/awx/main/migrations/_ask_for_variables.py new file mode 100644 index 0000000000..932849b638 --- /dev/null +++ b/awx/main/migrations/_ask_for_variables.py @@ -0,0 +1,9 @@ +def migrate_credential(apps, schema_editor): + '''If credential is not currently present, set ask_for_credential_on_launch + equal to True, and otherwise leave it as the default False value. + ''' + JobTemplate = apps.get_model('main', 'JobTemplate') + for jt in JobTemplate.objects.iterator(): + if jt.credential is None: + jt.ask_credential_on_launch = True + jt.save() diff --git a/awx/main/migrations/_cleanup_deleted.py b/awx/main/migrations/_cleanup_deleted.py new file mode 100644 index 0000000000..1a7e3cbb87 --- /dev/null +++ b/awx/main/migrations/_cleanup_deleted.py @@ -0,0 +1,85 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +# Python +import logging + +# Django +from django.db import transaction +from django.utils.dateparse import parse_datetime + +def cleanup_deleted(apps, schema_editor): + logger = logging.getLogger('awx.main.migrations.cleanup_deleted') + + def cleanup_model(model): + + ''' + Presume the '_deleted_' string to be in the 'name' field unless considering the User model. + When considering the User model, presume the '_d_' string to be in the 'username' field. + ''' + logger.debug('cleaning up model %s', model) + + name_field = 'name' + name_prefix = '_deleted_' + active_field = None + n_deleted_items = 0 + for field in model._meta.fields: + if field.name in ('is_active', 'active'): + active_field = field.name + if field.name == 'is_active': # is User model + name_field = 'username' + name_prefix = '_d_' + if not active_field: + logger.warning('skipping model %s, no active field', model) + return n_deleted_items + qs = model.objects.filter(**{ + active_field: False, + '%s__startswith' % name_field: name_prefix, + }) + pks_to_delete = set() + for instance in qs.iterator(): + dt = parse_datetime(getattr(instance, name_field).split('_')[2]) + if not dt: + logger.warning('unable to find deleted timestamp in %s field', name_field) + else: + action_text = 'deleting' + logger.info('%s %s', action_text, instance) + n_deleted_items += 1 + instance.delete() + + # Cleanup objects in batches instead of deleting each one individually. + if len(pks_to_delete) >= 50: + model.objects.filter(pk__in=pks_to_delete).delete() + pks_to_delete.clear() + if len(pks_to_delete): + model.objects.filter(pk__in=pks_to_delete).delete() + return n_deleted_items + + logger = logging.getLogger('awx.main.commands.cleanup_deleted') + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter('%(message)s')) + logger.addHandler(handler) + logger.propagate = False + + with transaction.atomic(): + n_deleted_items = 0 + + models = [ + apps.get_model('auth', "User"), + apps.get_model('main', 'Credential'), + apps.get_model('main', 'CustomInventoryScript'), + apps.get_model('main', 'Group'), + apps.get_model('main', 'Host'), + apps.get_model('main', 'Inventory'), + apps.get_model('main', 'NotificationTemplate'), + apps.get_model('main', 'Organization'), + apps.get_model('main', 'Permission'), + apps.get_model('main', 'Schedule'), + apps.get_model('main', 'Team'), + apps.get_model('main', 'UnifiedJob'), + apps.get_model('main', 'UnifiedJobTemplate'), + ] + + for model in models: + n_deleted_items += cleanup_model(model) + logger.log(99, "Removed %d items", n_deleted_items) diff --git a/awx/main/migrations/_migration_utils.py b/awx/main/migrations/_migration_utils.py new file mode 100644 index 0000000000..232310ca50 --- /dev/null +++ b/awx/main/migrations/_migration_utils.py @@ -0,0 +1,11 @@ +from awx.main.utils import set_current_apps + + +def set_current_apps_for_migrations(apps, schema_editor): + ''' + This is necessary for migrations which do explicit saves on any model that + has an ImplicitRoleFIeld (which generally means anything that has + some RBAC bindings associated with it). This sets the current 'apps' that + the ImplicitRoleFIeld should be using when creating new roles. + ''' + set_current_apps(apps) diff --git a/awx/main/migrations/_old_access.py b/awx/main/migrations/_old_access.py new file mode 100644 index 0000000000..da49723a9e --- /dev/null +++ b/awx/main/migrations/_old_access.py @@ -0,0 +1,1675 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved. + +# This file is a copy of the access.py file that existed in the 2.4 release of +# tower. We're keeping it around for a little while in order to run +# before/after access validation during the 3.0 upgrade process. Once we're +# confident that this process is reliable, this file is no longer necessary +# and can be removed. - anoek 2/9/16 + +# Python +import os +import sys +import logging + +# Django +from django.db.models import F, Q +from django.contrib.auth.models import User + +# Django REST Framework +from rest_framework.exceptions import ParseError, PermissionDenied + +# AWX +from awx.main.utils import * # noqa +from awx.main.models import * # noqa +from awx.api.license import LicenseForbids +from awx.main.task_engine import TaskSerializer +from awx.main.conf import tower_settings + +__all__ = ['get_user_queryset', 'check_user_access'] + +PERMISSION_TYPES = [ + PERM_INVENTORY_ADMIN, + PERM_INVENTORY_READ, + PERM_INVENTORY_WRITE, + PERM_INVENTORY_DEPLOY, + PERM_INVENTORY_CHECK, +] + +PERMISSION_TYPES_ALLOWING_INVENTORY_READ = [ + PERM_INVENTORY_ADMIN, + PERM_INVENTORY_WRITE, + PERM_INVENTORY_READ, +] + +PERMISSION_TYPES_ALLOWING_INVENTORY_WRITE = [ + PERM_INVENTORY_ADMIN, + PERM_INVENTORY_WRITE, +] + +PERMISSION_TYPES_ALLOWING_INVENTORY_ADMIN = [ + PERM_INVENTORY_ADMIN, +] + +logger = logging.getLogger('awx.main.access') + +access_registry = { + # : [, ...], + # ... +} + +def register_access(model_class, access_class): + access_classes = access_registry.setdefault(model_class, []) + access_classes.append(access_class) + +def get_user_queryset(user, model_class): + ''' + Return a queryset for the given model_class containing only the instances + that should be visible to the given user. + ''' + querysets = [] + for access_class in access_registry.get(model_class, []): + access_instance = access_class(user) + querysets.append(access_instance.get_queryset()) + if not querysets: + return model_class.objects.none() + elif len(querysets) == 1: + return querysets[0] + else: + queryset = model_class.objects.all() + for qs in querysets: + queryset = queryset.filter(pk__in=qs.values_list('pk', flat=True)) + return queryset + +def check_user_access(user, model_class, action, *args, **kwargs): + ''' + Return True if user can perform action against model_class with the + provided parameters. + ''' + for access_class in access_registry.get(model_class, []): + access_instance = access_class(user) + access_method = getattr(access_instance, 'can_%s' % action, None) + if not access_method: + logger.debug('%s.%s not found', access_instance.__class__.__name__, + 'can_%s' % action) + continue + result = access_method(*args, **kwargs) + logger.debug('%s.%s %r returned %r', access_instance.__class__.__name__, + access_method.__name__, args, result) + if result: + return result + return False + + +class BaseAccess(object): + ''' + Base class for checking user access to a given model. Subclasses should + define the model attribute, override the get_queryset method to return only + the instances the user should be able to view, and override/define can_* + methods to verify a user's permission to perform a particular action. + ''' + + model = None + + def __init__(self, user): + self.user = user + + def get_queryset(self): + if self.user.is_superuser: + return self.model.objects.all() + else: + return self.model.objects.none() + + def can_read(self, obj): + return bool(obj and self.get_queryset().filter(pk=obj.pk).exists()) + + def can_add(self, data): + return self.user.is_superuser + + def can_change(self, obj, data): + return self.user.is_superuser + + def can_write(self, obj, data): + # Alias for change. + return self.can_change(obj, data) + + def can_admin(self, obj, data): + # Alias for can_change. Can be overridden if admin vs. user change + # permissions need to be different. + return self.can_change(obj, data) + + def can_delete(self, obj): + return self.user.is_superuser + + def can_attach(self, obj, sub_obj, relationship, data, + skip_sub_obj_read_check=False): + if skip_sub_obj_read_check: + return self.can_change(obj, None) + else: + return bool(self.can_change(obj, None) and + check_user_access(self.user, type(sub_obj), 'read', sub_obj)) + + def can_unattach(self, obj, sub_obj, relationship): + return self.can_change(obj, None) + + def check_license(self, add_host=False, feature=None, check_expiration=True): + reader = TaskSerializer() + validation_info = reader.from_database() + if ('test' in sys.argv or 'py.test' in sys.argv[0] or 'jenkins' in sys.argv) and not os.environ.get('SKIP_LICENSE_FIXUP_FOR_TEST', ''): + validation_info['free_instances'] = 99999999 + validation_info['time_remaining'] = 99999999 + validation_info['grace_period_remaining'] = 99999999 + + if check_expiration and validation_info.get('time_remaining', None) is None: + raise PermissionDenied("license is missing") + if check_expiration and validation_info.get("grace_period_remaining") <= 0: + raise PermissionDenied("license has expired") + + free_instances = validation_info.get('free_instances', 0) + available_instances = validation_info.get('available_instances', 0) + if add_host and free_instances == 0: + raise PermissionDenied("license count of %s instances has been reached" % available_instances) + elif add_host and free_instances < 0: + raise PermissionDenied("license count of %s instances has been exceeded" % available_instances) + elif not add_host and free_instances < 0: + raise PermissionDenied("host count exceeds available instances") + + if feature is not None: + if "features" in validation_info and not validation_info["features"].get(feature, False): + raise LicenseForbids("Feature %s is not enabled in the active license" % feature) + elif "features" not in validation_info: + raise LicenseForbids("Features not found in active license") + + +class UserAccess(BaseAccess): + ''' + I can see user records when: + - I'm a superuser. + - I'm that user. + - I'm an org admin (org admins should be able to see all users, in order + to add those users to the org). + - I'm in an org with that user. + - I'm on a team with that user. + I can change some fields for a user (mainly password) when I am that user. + I can change all fields for a user (admin access) or delete when: + - I'm a superuser. + - I'm their org admin. + ''' + + model = User + + def get_queryset(self): + qs = self.model.objects.distinct() + if self.user.is_superuser: + return qs + if tower_settings.ORG_ADMINS_CAN_SEE_ALL_USERS and self.user.deprecated_admin_of_organizations.all().exists(): + return qs + return qs.filter( + Q(pk=self.user.pk) | + Q(deprecated_organizations__in=self.user.deprecated_admin_of_organizations.all()) | + Q(deprecated_organizations__in=self.user.deprecated_organizations.all()) | + Q(deprecated_teams__in=self.user.deprecated_teams.all()) + ).distinct() + + def can_add(self, data): + if data is not None and 'is_superuser' in data: + if to_python_boolean(data['is_superuser'], allow_none=True) and not self.user.is_superuser: + return False + return bool(self.user.is_superuser or + self.user.deprecated_admin_of_organizations.exists()) + + def can_change(self, obj, data): + if data is not None and 'is_superuser' in data: + if to_python_boolean(data['is_superuser'], allow_none=True) and not self.user.is_superuser: + return False + # A user can be changed if they are themselves, or by org admins or + # superusers. Change permission implies changing only certain fields + # that a user should be able to edit for themselves. + return bool(self.user == obj or self.can_admin(obj, data)) + + def can_admin(self, obj, data): + # Admin implies changing all user fields. + if self.user.is_superuser: + return True + return bool(obj.deprecated_organizations.filter(deprecated_admins__in=[self.user]).exists()) + + def can_delete(self, obj): + if obj == self.user: + # cannot delete yourself + return False + super_users = User.objects.filter(is_superuser=True) + if obj.is_superuser and super_users.count() == 1: + # cannot delete the last active superuser + return False + return bool(self.user.is_superuser or + obj.deprecated_organizations.filter(deprecated_admins__in=[self.user]).exists()) + +class OrganizationAccess(BaseAccess): + ''' + I can see organizations when: + - I am a superuser. + - I am an admin or user in that organization. + I can change or delete organizations when: + - I am a superuser. + - I'm an admin of that organization. + ''' + + model = Organization + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by') + if self.user.is_superuser: + return qs + return qs.filter(Q(deprecated_admins__in=[self.user]) | Q(deprecated_users__in=[self.user])) + + def can_change(self, obj, data): + return bool(self.user.is_superuser or + self.user in obj.deprecated_admins.all()) + + def can_delete(self, obj): + self.check_license(feature='multiple_organizations', check_expiration=False) + return self.can_change(obj, None) + +class InventoryAccess(BaseAccess): + ''' + I can see inventory when: + - I'm a superuser. + - I'm an org admin of the inventory's org. + - I have read, write or admin permissions on it. + I can change inventory when: + - I'm a superuser. + - I'm an org admin of the inventory's org. + - I have write or admin permissions on it. + I can delete inventory when: + - I'm a superuser. + - I'm an org admin of the inventory's org. + - I have admin permissions on it. + I can run ad hoc commands when: + - I'm a superuser. + - I'm an org admin of the inventory's org. + - I have read/write/admin permission on an inventory with the run_ad_hoc_commands flag set. + ''' + + model = Inventory + + def get_queryset(self, allowed=None, ad_hoc=None): + allowed = allowed or PERMISSION_TYPES_ALLOWING_INVENTORY_READ + qs = Inventory.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'organization') + if self.user.is_superuser: + return qs + admin_of = qs.filter(organization__deprecated_admins__in=[self.user]).distinct() + has_user_kw = dict( + permissions__user__in=[self.user], + permissions__permission_type__in=allowed, + ) + if ad_hoc is not None: + has_user_kw['permissions__run_ad_hoc_commands'] = ad_hoc + has_user_perms = qs.filter(**has_user_kw).distinct() + has_team_kw = dict( + permissions__team__deprecated_users__in=[self.user], + permissions__permission_type__in=allowed, + ) + if ad_hoc is not None: + has_team_kw['permissions__run_ad_hoc_commands'] = ad_hoc + has_team_perms = qs.filter(**has_team_kw).distinct() + return admin_of | has_user_perms | has_team_perms + + def has_permission_types(self, obj, allowed, ad_hoc=None): + return bool(obj and self.get_queryset(allowed, ad_hoc).filter(pk=obj.pk).exists()) + + def can_read(self, obj): + return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_READ) + + def can_add(self, data): + # If no data is specified, just checking for generic add permission? + if not data: + return bool(self.user.is_superuser or + self.user.deprecated_admin_of_organizations.exists()) + # Otherwise, verify that the user has access to change the parent + # organization of this inventory. + if self.user.is_superuser: + return True + else: + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + if check_user_access(self.user, Organization, 'change', org, None): + return True + return False + + def can_change(self, obj, data): + # Verify that the user has access to the new organization if moving an + # inventory to a new organization. + org_pk = get_pk_from_dict(data, 'organization') + if obj and org_pk and obj.organization.pk != org_pk: + org = get_object_or_400(Organization, pk=org_pk) + if not check_user_access(self.user, Organization, 'change', org, None): + return False + # Otherwise, just check for write permission. + return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_WRITE) + + def can_admin(self, obj, data): + # Verify that the user has access to the new organization if moving an + # inventory to a new organization. + org_pk = get_pk_from_dict(data, 'organization') + if obj and org_pk and obj.organization.pk != org_pk: + org = get_object_or_400(Organization, pk=org_pk) + if not check_user_access(self.user, Organization, 'change', org, None): + return False + # Otherwise, just check for admin permission. + return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_ADMIN) + + def can_delete(self, obj): + return self.can_admin(obj, None) + + def can_run_ad_hoc_commands(self, obj): + return self.has_permission_types(obj, PERMISSION_TYPES_ALLOWING_INVENTORY_READ, True) + +class HostAccess(BaseAccess): + ''' + I can see hosts whenever I can see their inventory. + I can change or delete hosts whenver I can change their inventory. + ''' + + model = Host + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'inventory', + 'last_job__job_template', + 'last_job_host_summary__job') + qs = qs.prefetch_related('groups') + inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) + return qs.filter(inventory_id__in=inventory_ids) + + def can_read(self, obj): + return obj and check_user_access(self.user, Inventory, 'read', obj.inventory) + + def can_add(self, data): + if not data or 'inventory' not in data: + return False + + # Checks for admin or change permission on inventory. + inventory_pk = get_pk_from_dict(data, 'inventory') + inventory = get_object_or_400(Inventory, pk=inventory_pk) + if not check_user_access(self.user, Inventory, 'change', inventory, None): + return False + + # Check to see if we have enough licenses + self.check_license(add_host=True) + return True + + def can_change(self, obj, data): + # Prevent moving a host to a different inventory. + inventory_pk = get_pk_from_dict(data, 'inventory') + if obj and inventory_pk and obj.inventory.pk != inventory_pk: + raise PermissionDenied('Unable to change inventory on a host') + # Checks for admin or change permission on inventory, controls whether + # the user can edit variable data. + return obj and check_user_access(self.user, Inventory, 'change', obj.inventory, None) + + def can_attach(self, obj, sub_obj, relationship, data, + skip_sub_obj_read_check=False): + if not super(HostAccess, self).can_attach(obj, sub_obj, relationship, + data, skip_sub_obj_read_check): + return False + # Prevent assignments between different inventories. + if obj.inventory != sub_obj.inventory: + raise ParseError('Cannot associate two items from different inventories') + return True + + def can_delete(self, obj): + return obj and check_user_access(self.user, Inventory, 'delete', obj.inventory) + +class GroupAccess(BaseAccess): + ''' + I can see groups whenever I can see their inventory. + I can change or delete groups whenever I can change their inventory. + ''' + + model = Group + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'inventory') + qs = qs.prefetch_related('parents', 'children', 'inventory_source') + inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) + return qs.filter(inventory_id__in=inventory_ids) + + def can_read(self, obj): + return obj and check_user_access(self.user, Inventory, 'read', obj.inventory) + + def can_add(self, data): + if not data or 'inventory' not in data: + return False + # Checks for admin or change permission on inventory. + inventory_pk = get_pk_from_dict(data, 'inventory') + inventory = get_object_or_400(Inventory, pk=inventory_pk) + return check_user_access(self.user, Inventory, 'change', inventory, None) + + def can_change(self, obj, data): + # Prevent moving a group to a different inventory. + inventory_pk = get_pk_from_dict(data, 'inventory') + if obj and inventory_pk and obj.inventory.pk != inventory_pk: + raise PermissionDenied('Unable to change inventory on a group') + # Checks for admin or change permission on inventory, controls whether + # the user can attach subgroups or edit variable data. + return obj and check_user_access(self.user, Inventory, 'change', obj.inventory, None) + + def can_attach(self, obj, sub_obj, relationship, data, + skip_sub_obj_read_check=False): + if not super(GroupAccess, self).can_attach(obj, sub_obj, relationship, + data, skip_sub_obj_read_check): + return False + # Prevent assignments between different inventories. + if obj.inventory != sub_obj.inventory: + raise ParseError('Cannot associate two items from different inventories') + # Prevent group from being assigned as its own (grand)child. + if type(obj) == type(sub_obj): + parent_pks = set(obj.all_parents.values_list('pk', flat=True)) + parent_pks.add(obj.pk) + child_pks = set(sub_obj.all_children.values_list('pk', flat=True)) + child_pks.add(sub_obj.pk) + if parent_pks & child_pks: + return False + return True + + def can_delete(self, obj): + return obj and check_user_access(self.user, Inventory, 'delete', obj.inventory) + + +class InventorySourceAccess(BaseAccess): + ''' + I can see inventory sources whenever I can see their group or inventory. + I can change inventory sources whenever I can change their group. + ''' + + model = InventorySource + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'group', 'inventory') + inventory_ids = set(self.user.get_queryset(Inventory).values_list('id', flat=True)) + return qs.filter(Q(inventory_id__in=inventory_ids) | + Q(group__inventory_id__in=inventory_ids)) + + def can_read(self, obj): + if obj and obj.group: + return check_user_access(self.user, Group, 'read', obj.group) + elif obj and obj.inventory: + return check_user_access(self.user, Inventory, 'read', obj.inventory) + else: + return False + + def can_add(self, data): + # Automatically created from group or management command. + return False + + def can_change(self, obj, data): + # Checks for admin or change permission on group. + if obj and obj.group: + return check_user_access(self.user, Group, 'change', obj.group, None) + # Can't change inventory sources attached to only the inventory, since + # these are created automatically from the management command. + else: + return False + + def can_start(self, obj): + return self.can_change(obj, {}) and obj.can_update + +class InventoryUpdateAccess(BaseAccess): + ''' + I can see inventory updates when I can see the inventory source. + I can change inventory updates whenever I can change their source. + I can delete when I can change/delete the inventory source. + ''' + + model = InventoryUpdate + + def get_queryset(self): + qs = InventoryUpdate.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'inventory_source__group', + 'inventory_source__inventory') + inventory_sources_qs = self.user.get_queryset(InventorySource) + return qs.filter(inventory_source__in=inventory_sources_qs) + + def can_cancel(self, obj): + return self.can_change(obj, {}) and obj.can_cancel + +class CredentialAccess(BaseAccess): + ''' + I can see credentials when: + - I'm a superuser. + - It's a user credential and it's my credential. + - It's a user credential and I'm an admin of an organization where that + user is a member of admin of the organization. + - It's a team credential and I'm an admin of the team's organization. + - It's a team credential and I'm a member of the team. + I can change/delete when: + - I'm a superuser. + - It's my user credential. + - It's a user credential for a user in an org I admin. + - It's a team credential for a team in an org I admin. + ''' + + model = Credential + + def get_queryset(self): + """Return the queryset for credentials, based on what the user is + permitted to see. + """ + # Create a base queryset. + # If the user is a superuser, and therefore can see everything, this + # is also sufficient, and we are done. + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by') + if self.user.is_superuser: + return qs + + # Get the list of organizations for which the user is an admin + orgs_as_admin_ids = set(self.user.deprecated_admin_of_organizations.values_list('id', flat=True)) + return qs.filter( + Q(deprecated_user=self.user) | + Q(deprecated_user__deprecated_organizations__id__in=orgs_as_admin_ids) | + Q(deprecated_user__deprecated_admin_of_organizations__id__in=orgs_as_admin_ids) | + Q(deprecated_team__organization__id__in=orgs_as_admin_ids) | + Q(deprecated_team__deprecated_users__in=[self.user]) + ) + + def can_add(self, data): + if self.user.is_superuser: + return True + user_pk = get_pk_from_dict(data, 'user') + if user_pk: + user_obj = get_object_or_400(User, pk=user_pk) + return check_user_access(self.user, User, 'change', user_obj, None) + team_pk = get_pk_from_dict(data, 'team') + if team_pk: + team_obj = get_object_or_400(Team, pk=team_pk) + return check_user_access(self.user, Team, 'change', team_obj, None) + return False + + def can_change(self, obj, data): + if self.user.is_superuser: + return True + if not self.can_add(data): + return False + if self.user == obj.created_by: + return True + if obj.deprecated_user: + if self.user == obj.deprecated_user: + return True + if obj.deprecated_user.deprecated_organizations.filter(deprecated_admins__in=[self.user]).exists(): + return True + if obj.deprecated_user.deprecated_admin_of_organizations.filter(deprecated_admins__in=[self.user]).exists(): + return True + if obj.deprecated_team: + if self.user in obj.deprecated_team.organization.deprecated_admins.all(): + return True + return False + + def can_delete(self, obj): + # Unassociated credentials may be marked deleted by anyone, though we + # shouldn't ever end up with those. + if obj.deprecated_user is None and obj.deprecated_team is None: + return True + return self.can_change(obj, None) + +class TeamAccess(BaseAccess): + ''' + I can see a team when: + - I'm a superuser. + - I'm an admin of the team's organization. + - I'm a member of that team. + I can create/change a team when: + - I'm a superuser. + - I'm an org admin for the team's org. + ''' + + model = Team + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'organization') + if self.user.is_superuser: + return qs + return qs.filter( + Q(organization__deprecated_admins__in=[self.user]) | + Q(deprecated_users__in=[self.user]) + ) + + def can_add(self, data): + if self.user.is_superuser: + return True + else: + org_pk = get_pk_from_dict(data, 'organization') + org = get_object_or_400(Organization, pk=org_pk) + if check_user_access(self.user, Organization, 'change', org, None): + return True + return False + + def can_change(self, obj, data): + # Prevent moving a team to a different organization. + org_pk = get_pk_from_dict(data, 'organization') + if obj and org_pk and obj.organization.pk != org_pk: + raise PermissionDenied('Unable to change organization on a team') + if self.user.is_superuser: + return True + if obj.organization and self.user in obj.organization.deprecated_admins.all(): + return True + return False + + def can_delete(self, obj): + return self.can_change(obj, None) + +class ProjectAccess(BaseAccess): + ''' + I can see projects when: + - I am a superuser. + - I am an admin in an organization associated with the project. + - I am a user in an organization associated with the project. + - I am on a team associated with the project. + - I have been explicitly granted permission to run/check jobs using the + project. + - I created the project but it isn't associated with an organization + I can change/delete when: + - I am a superuser. + - I am an admin in an organization associated with the project. + - I created the project but it isn't associated with an organization + ''' + + model = Project + + def get_queryset(self): + qs = Project.objects.distinct() + qs = qs.select_related('modified_by', 'credential', 'current_job', 'last_job') + if self.user.is_superuser: + return qs + team_ids = Team.objects.filter(deprecated_users__in=[self.user]) + qs = qs.filter(Q(created_by=self.user, deprecated_organizations__isnull=True) | + Q(deprecated_organizations__deprecated_admins__in=[self.user]) | + Q(deprecated_organizations__deprecated_users__in=[self.user]) | + Q(deprecated_teams__in=team_ids)) + allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] + allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] + + deploy_permissions = Permission.objects.filter( + Q(user=self.user) | Q(team_id__in=team_ids), + permission_type__in=allowed_deploy, + ) + check_permissions = Permission.objects.filter( + Q(user=self.user) | Q(team_id__in=team_ids), + permission_type__in=allowed_check, + ) + + perm_deploy_qs = qs.filter(permissions__in=deploy_permissions) + perm_check_qs = qs.filter(permissions__in=check_permissions) + return qs | perm_deploy_qs | perm_check_qs + + def can_add(self, data): + if self.user.is_superuser: + return True + if self.user.deprecated_admin_of_organizations.exists(): + return True + return False + + def can_change(self, obj, data): + if self.user.is_superuser: + return True + if obj.created_by == self.user and not obj.deprecated_organizations.count(): + return True + if obj.deprecated_organizations.filter(deprecated_admins__in=[self.user]).exists(): + return True + return False + + def can_delete(self, obj): + return self.can_change(obj, None) + + def can_start(self, obj): + return self.can_change(obj, {}) and obj.can_update + +class ProjectUpdateAccess(BaseAccess): + ''' + I can see project updates when I can see the project. + I can change when I can change the project. + I can delete when I can change/delete the project. + ''' + + model = ProjectUpdate + + def get_queryset(self): + qs = ProjectUpdate.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'project') + project_ids = set(self.user.get_queryset(Project).values_list('id', flat=True)) + return qs.filter(project_id__in=project_ids) + + def can_cancel(self, obj): + return self.can_change(obj, {}) and obj.can_cancel + + def can_delete(self, obj): + return obj and check_user_access(self.user, Project, 'delete', obj.project) + +class PermissionAccess(BaseAccess): + ''' + I can see a permission when: + - I'm a superuser. + - I'm an org admin and it's for a user in my org. + - I'm an org admin and it's for a team in my org. + - I'm a user and it's assigned to me. + - I'm a member of a team and it's assigned to the team. + I can create/change/delete when: + - I'm a superuser. + - I'm an org admin and the team/user is in my org and the inventory is in + my org and the project is in my org. + ''' + + model = Permission + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'user', 'team', 'inventory', + 'project') + if self.user.is_superuser: + return qs + orgs_as_admin_ids = set(self.user.deprecated_admin_of_organizations.values_list('id', flat=True)) + return qs.filter( + Q(user__deprecated_organizations__in=orgs_as_admin_ids) | + Q(user__deprecated_admin_of_organizations__in=orgs_as_admin_ids) | + Q(team__organization__in=orgs_as_admin_ids) | + Q(user=self.user) | + Q(team__deprecated_users__in=[self.user]) + ) + + def can_add(self, data): + if not data: + return True # generic add permission check + user_pk = get_pk_from_dict(data, 'user') + team_pk = get_pk_from_dict(data, 'team') + if user_pk: + user = get_object_or_400(User, pk=user_pk) + if not check_user_access(self.user, User, 'admin', user, None): + return False + elif team_pk: + team = get_object_or_400(Team, pk=team_pk) + if not check_user_access(self.user, Team, 'admin', team, None): + return False + else: + return False + inventory_pk = get_pk_from_dict(data, 'inventory') + if inventory_pk: + inventory = get_object_or_400(Inventory, pk=inventory_pk) + if not check_user_access(self.user, Inventory, 'admin', inventory, None): + return False + project_pk = get_pk_from_dict(data, 'project') + if project_pk: + project = get_object_or_400(Project, pk=project_pk) + if not check_user_access(self.user, Project, 'admin', project, None): + return False + # FIXME: user/team, inventory and project should probably all be part + # of the same organization. + return True + + def can_change(self, obj, data): + # Prevent assigning a permission to a different user. + user_pk = get_pk_from_dict(data, 'user') + if obj and user_pk and obj.user and obj.user.pk != user_pk: + raise PermissionDenied('Unable to change user on a permission') + # Prevent assigning a permission to a different team. + team_pk = get_pk_from_dict(data, 'team') + if obj and team_pk and obj.team and obj.team.pk != team_pk: + raise PermissionDenied('Unable to change team on a permission') + if self.user.is_superuser: + return True + # If changing inventory, verify access to the new inventory. + new_inventory_pk = get_pk_from_dict(data, 'inventory') + if obj and new_inventory_pk and obj.inventory and obj.inventory.pk != new_inventory_pk: + inventory = get_object_or_400(Inventory, pk=new_inventory_pk) + if not check_user_access(self.user, Inventory, 'admin', inventory, None): + return False + # If changing project, verify access to the new project. + new_project = get_pk_from_dict(data, 'project') + if obj and new_project and obj.project and obj.project.pk != new_project: + project = get_object_or_400(Project, pk=new_project) + if not check_user_access(self.user, Project, 'admin', project, None): + return False + # Check for admin access to the user or team. + if obj.user and check_user_access(self.user, User, 'admin', obj.user, None): + return True + if obj.team and check_user_access(self.user, Team, 'admin', obj.team, None): + return True + return False + + def can_delete(self, obj): + return self.can_change(obj, None) + +class JobTemplateAccess(BaseAccess): + ''' + I can see job templates when: + - I am a superuser. + - I can read the inventory, project and credential (which means I am an + org admin or member of a team with access to all of the above). + - I have permission explicitly granted to check/deploy with the inventory + and project. + + This does not mean I would be able to launch a job from the template or + edit the template. + ''' + + model = JobTemplate + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'inventory', 'project', + 'credential', 'cloud_credential', 'next_schedule') + if self.user.is_superuser: + return qs + credential_ids = self.user.get_queryset(Credential) + inventory_ids = self.user.get_queryset(Inventory) + base_qs = qs.filter( + Q(credential_id__in=credential_ids) | Q(credential__isnull=True), + Q(cloud_credential_id__in=credential_ids) | Q(cloud_credential__isnull=True), + ) + org_admin_ids = base_qs.filter( + Q(project__deprecated_organizations__deprecated_admins__in=[self.user]) | + (Q(project__isnull=True) & Q(job_type=PERM_INVENTORY_SCAN) & Q(inventory__organization__deprecated_admins__in=[self.user])) + ) + + allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] + allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] + + team_ids = Team.objects.filter(deprecated_users__in=[self.user]) + + deploy_permissions_ids = Permission.objects.filter( + Q(user=self.user) | Q(team_id__in=team_ids), + permission_type__in=allowed_deploy, + ) + check_permissions_ids = Permission.objects.filter( + Q(user=self.user) | Q(team_id__in=team_ids), + permission_type__in=allowed_check, + ) + + perm_deploy_ids = base_qs.filter( + job_type=PERM_INVENTORY_DEPLOY, + inventory__permissions__in=deploy_permissions_ids, + project__permissions__in=deploy_permissions_ids, + inventory__permissions__pk=F('project__permissions__pk'), + inventory_id__in=inventory_ids, + ) + + perm_check_ids = base_qs.filter( + job_type=PERM_INVENTORY_CHECK, + inventory__permissions__in=check_permissions_ids, + project__permissions__in=check_permissions_ids, + inventory__permissions__pk=F('project__permissions__pk'), + inventory_id__in=inventory_ids, + ) + + return base_qs.filter( + Q(id__in=org_admin_ids) | + Q(id__in=perm_deploy_ids) | + Q(id__in=perm_check_ids) + ) + + def can_read(self, obj): + # you can only see the job templates that you have permission to launch. + return self.can_start(obj, validate_license=False) + + def can_add(self, data): + ''' + a user can create a job template if they are a superuser, an org admin + of any org that the project is a member, or if they have user or team + based permissions tying the project to the inventory source for the + given action as well as the 'create' deploy permission. + Users who are able to create deploy jobs can also run normal and check (dry run) jobs. + ''' + if not data or '_method' in data: # So the browseable API will work? + return True + + if 'job_type' in data and data['job_type'] == PERM_INVENTORY_SCAN: + self.check_license(feature='system_tracking') + + if 'survey_enabled' in data and data['survey_enabled']: + self.check_license(feature='surveys') + + if self.user.is_superuser: + return True + + # If a credential is provided, the user should have read access to it. + credential_pk = get_pk_from_dict(data, 'credential') + if credential_pk: + credential = get_object_or_400(Credential, pk=credential_pk) + if not check_user_access(self.user, Credential, 'read', credential): + return False + + # If a cloud credential is provided, the user should have read access. + cloud_credential_pk = get_pk_from_dict(data, 'cloud_credential') + if cloud_credential_pk: + cloud_credential = get_object_or_400(Credential, + pk=cloud_credential_pk) + if not check_user_access(self.user, Credential, 'read', cloud_credential): + return False + + # Check that the given inventory ID is valid. + inventory_pk = get_pk_from_dict(data, 'inventory') + inventory = Inventory.objects.filter(id=inventory_pk) + if not inventory.exists(): + return False # Does this make sense? Maybe should check read access + + project_pk = get_pk_from_dict(data, 'project') + if 'job_type' in data and data['job_type'] == PERM_INVENTORY_SCAN: + if not project_pk and check_user_access(self.user, Organization, 'change', inventory[0].organization, None): + return True + elif not check_user_access(self.user, Organization, "change", inventory[0].organization, None): + return False + # If the user has admin access to the project (as an org admin), should + # be able to proceed without additional checks. + project = get_object_or_400(Project, pk=project_pk) + if check_user_access(self.user, Project, 'admin', project, None): + return True + + # Otherwise, check for explicitly granted permissions to create job templates + # for the project and inventory. + permission_qs = Permission.objects.filter( + Q(user=self.user) | Q(team__deprecated_users__in=[self.user]), + inventory=inventory, + project=project, + #permission_type__in=[PERM_INVENTORY_CHECK, PERM_INVENTORY_DEPLOY], + permission_type=PERM_JOBTEMPLATE_CREATE, + ) + if permission_qs.exists(): + return True + return False + + # job_type = data.get('job_type', None) + + # for perm in permission_qs: + # # if you have run permissions, you can also create check jobs + # if job_type == PERM_INVENTORY_CHECK: + # has_perm = True + # # you need explicit run permissions to make run jobs + # elif job_type == PERM_INVENTORY_DEPLOY and perm.permission_type == PERM_INVENTORY_DEPLOY: + # has_perm = True + # if not has_perm: + # return False + # return True + + # shouldn't really matter with permissions given, but make sure the user + # is also currently on the team in case they were added a per-user permission and then removed + # from the project. + #if not project.teams.filter(users__in=[self.user]).count(): + # return False + + def can_start(self, obj, validate_license=True): + # Check license. + if validate_license: + self.check_license() + if obj.job_type == PERM_INVENTORY_SCAN: + self.check_license(feature='system_tracking') + if obj.survey_enabled: + self.check_license(feature='surveys') + + # Super users can start any job + if self.user.is_superuser: + return True + # Check to make sure both the inventory and project exist + if obj.inventory is None: + return False + if obj.job_type == PERM_INVENTORY_SCAN: + if obj.project is None and check_user_access(self.user, Organization, 'change', obj.inventory.organization, None): + return True + if not check_user_access(self.user, Organization, 'change', obj.inventory.organization, None): + return False + if obj.project is None: + return False + # If the user has admin access to the project they can start a job + if check_user_access(self.user, Project, 'admin', obj.project, None): + return True + + # Otherwise check for explicitly granted permissions + permission_qs = Permission.objects.filter( + Q(user=self.user) | Q(team__deprecated_users__in=[self.user]), + inventory=obj.inventory, + project=obj.project, + permission_type__in=[PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_CHECK, PERM_INVENTORY_DEPLOY], + ) + + has_perm = False + for perm in permission_qs: + # If you have job template create permission that implies both CHECK and DEPLOY + # If you have DEPLOY permissions you can run both CHECK and DEPLOY + if perm.permission_type in [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] and \ + obj.job_type == PERM_INVENTORY_DEPLOY: + has_perm = True + # If you only have CHECK permission then you can only run CHECK + if perm.permission_type in [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] and \ + obj.job_type == PERM_INVENTORY_CHECK: + has_perm = True + + return \ + has_perm and \ + check_user_access(self.user, Inventory, 'read', obj.inventory) and \ + check_user_access(self.user, Project, 'read', obj.project) + + def can_change(self, obj, data): + data_for_change = data + if data is not None: + data_for_change = dict(data) + for required_field in ('credential', 'cloud_credential', 'inventory', 'project'): + required_obj = getattr(obj, required_field, None) + if required_field not in data_for_change and required_obj is not None: + data_for_change[required_field] = required_obj.pk + return self.can_read(obj) and self.can_add(data_for_change) + + def can_delete(self, obj): + add_obj = dict(credential=obj.credential.id if obj.credential is not None else None, + cloud_credential=obj.cloud_credential.id if obj.cloud_credential is not None else None, + inventory=obj.inventory.id if obj.inventory is not None else None, + project=obj.project.id if obj.project is not None else None, + job_type=obj.job_type) + return self.can_add(add_obj) + +class JobAccess(BaseAccess): + + model = Job + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'job_template', 'inventory', + 'project', 'credential', 'cloud_credential', 'job_template') + qs = qs.prefetch_related('unified_job_template') + if self.user.is_superuser: + return qs + credential_ids = self.user.get_queryset(Credential) + base_qs = qs.filter( + credential_id__in=credential_ids, + ) + org_admin_ids = base_qs.filter( + Q(project__deprecated_organizations__deprecated_admins__in=[self.user]) | + (Q(project__isnull=True) & Q(job_type=PERM_INVENTORY_SCAN) & Q(inventory__organization__deprecated_admins__in=[self.user])) + ) + + allowed_deploy = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY] + allowed_check = [PERM_JOBTEMPLATE_CREATE, PERM_INVENTORY_DEPLOY, PERM_INVENTORY_CHECK] + team_ids = Team.objects.filter(deprecated_users__in=[self.user]) + + deploy_permissions_ids = Permission.objects.filter( + Q(user=self.user) | Q(team__in=team_ids), + permission_type__in=allowed_deploy, + ) + check_permissions_ids = Permission.objects.filter( + Q(user=self.user) | Q(team__in=team_ids), + permission_type__in=allowed_check, + ) + + perm_deploy_ids = base_qs.filter( + job_type=PERM_INVENTORY_DEPLOY, + inventory__permissions__in=deploy_permissions_ids, + project__permissions__in=deploy_permissions_ids, + inventory__permissions__pk=F('project__permissions__pk'), + ) + + perm_check_ids = base_qs.filter( + job_type=PERM_INVENTORY_CHECK, + inventory__permissions__in=check_permissions_ids, + project__permissions__in=check_permissions_ids, + inventory__permissions__pk=F('project__permissions__pk'), + ) + + return base_qs.filter( + Q(id__in=org_admin_ids) | + Q(id__in=perm_deploy_ids) | + Q(id__in=perm_check_ids) + ) + + def can_add(self, data): + if not data or '_method' in data: # So the browseable API will work? + return True + if not self.user.is_superuser: + return False + + + add_data = dict(data.items()) + + # If a job template is provided, the user should have read access to it. + job_template_pk = get_pk_from_dict(data, 'job_template') + if job_template_pk: + job_template = get_object_or_400(JobTemplate, pk=job_template_pk) + add_data.setdefault('inventory', job_template.inventory.pk) + add_data.setdefault('project', job_template.project.pk) + add_data.setdefault('job_type', job_template.job_type) + if job_template.credential: + add_data.setdefault('credential', job_template.credential.pk) + else: + job_template = None + + return True + + def can_change(self, obj, data): + return obj.status == 'new' and self.can_read(obj) and self.can_add(data) + + def can_delete(self, obj): + return self.can_read(obj) + + def can_start(self, obj): + self.check_license() + + # A super user can relaunch a job + if self.user.is_superuser: + return True + # If a user can launch the job template then they can relaunch a job from that + # job template + has_perm = False + if obj.job_template is not None and check_user_access(self.user, JobTemplate, 'start', obj.job_template): + has_perm = True + dep_access_inventory = check_user_access(self.user, Inventory, 'read', obj.inventory) + dep_access_project = obj.project is None or check_user_access(self.user, Project, 'read', obj.project) + return self.can_read(obj) and dep_access_inventory and dep_access_project and has_perm + + def can_cancel(self, obj): + return self.can_read(obj) and obj.can_cancel + +class SystemJobTemplateAccess(BaseAccess): + ''' + I can only see/manage System Job Templates if I'm a super user + ''' + + model = SystemJobTemplate + + def can_start(self, obj): + return self.can_read(obj) + +class SystemJobAccess(BaseAccess): + ''' + I can only see manage System Jobs if I'm a super user + ''' + model = SystemJob + +class AdHocCommandAccess(BaseAccess): + ''' + I can only see/run ad hoc commands when: + - I am a superuser. + - I am an org admin and have permission to read the credential. + - I am a normal user with a user/team permission that has at least read + permission on the inventory and the run_ad_hoc_commands flag set, and I + can read the credential. + ''' + model = AdHocCommand + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by', 'inventory', + 'credential') + if self.user.is_superuser: + return qs + + credential_ids = set(self.user.get_queryset(Credential).values_list('id', flat=True)) + team_ids = set(Team.objects.filter(deprecated_users__in=[self.user]).values_list('id', flat=True)) + + permission_ids = set(Permission.objects.filter( + Q(user=self.user) | Q(team__in=team_ids), + permission_type__in=PERMISSION_TYPES_ALLOWING_INVENTORY_READ, + run_ad_hoc_commands=True, + ).values_list('id', flat=True)) + + inventory_qs = self.user.get_queryset(Inventory) + inventory_qs = inventory_qs.filter(Q(permissions__in=permission_ids) | Q(organization__deprecated_admins__in=[self.user])) + inventory_ids = set(inventory_qs.values_list('id', flat=True)) + + qs = qs.filter( + credential_id__in=credential_ids, + inventory_id__in=inventory_ids, + ) + return qs + + def can_add(self, data): + if not data or '_method' in data: # So the browseable API will work? + return True + + self.check_license() + + # If a credential is provided, the user should have read access to it. + credential_pk = get_pk_from_dict(data, 'credential') + if credential_pk: + credential = get_object_or_400(Credential, pk=credential_pk) + if not check_user_access(self.user, Credential, 'read', credential): + return False + + # Check that the user has the run ad hoc command permission on the + # given inventory. + inventory_pk = get_pk_from_dict(data, 'inventory') + if inventory_pk: + inventory = get_object_or_400(Inventory, pk=inventory_pk) + if not check_user_access(self.user, Inventory, 'run_ad_hoc_commands', inventory): + return False + + return True + + def can_change(self, obj, data): + return False + + def can_delete(self, obj): + return self.can_read(obj) + + def can_start(self, obj): + return self.can_add({ + 'credential': obj.credential_id, + 'inventory': obj.inventory_id, + }) + + def can_cancel(self, obj): + return self.can_read(obj) and obj.can_cancel + +class AdHocCommandEventAccess(BaseAccess): + ''' + I can see ad hoc command event records whenever I can read both ad hoc + command and host. + ''' + + model = AdHocCommandEvent + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('ad_hoc_command', 'host') + + if self.user.is_superuser: + return qs + ad_hoc_command_qs = self.user.get_queryset(AdHocCommand) + host_qs = self.user.get_queryset(Host) + qs = qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), + ad_hoc_command__in=ad_hoc_command_qs) + return qs + + def can_add(self, data): + return False + + def can_change(self, obj, data): + return False + + def can_delete(self, obj): + return False + +class JobHostSummaryAccess(BaseAccess): + ''' + I can see job/host summary records whenever I can read both job and host. + ''' + + model = JobHostSummary + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('job', 'job__job_template', 'host') + if self.user.is_superuser: + return qs + job_qs = self.user.get_queryset(Job) + host_qs = self.user.get_queryset(Host) + return qs.filter(job__in=job_qs, host__in=host_qs) + + def can_add(self, data): + return False + + def can_change(self, obj, data): + return False + + def can_delete(self, obj): + return False + +class JobEventAccess(BaseAccess): + ''' + I can see job event records whenever I can read both job and host. + ''' + + model = JobEvent + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('job', 'job__job_template', 'host', 'parent') + qs = qs.prefetch_related('hosts', 'children') + + # Filter certain "internal" events generated by async polling. + qs = qs.exclude(event__in=('runner_on_ok', 'runner_on_failed'), + event_data__icontains='"ansible_job_id": "', + event_data__contains='"module_name": "async_status"') + + if self.user.is_superuser: + return qs + job_qs = self.user.get_queryset(Job) + host_qs = self.user.get_queryset(Host) + qs = qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), + job__in=job_qs) + return qs + + def can_add(self, data): + return False + + def can_change(self, obj, data): + return False + + def can_delete(self, obj): + return False + +class UnifiedJobTemplateAccess(BaseAccess): + ''' + I can see a unified job template whenever I can see the same project, + inventory source or job template. Unified job templates do not include + projects without SCM configured or inventory sources without a cloud + source. + ''' + + model = UnifiedJobTemplate + + def get_queryset(self): + qs = self.model.objects.distinct() + project_qs = self.user.get_queryset(Project).filter(scm_type__in=[s[0] for s in Project.SCM_TYPE_CHOICES]) + inventory_source_qs = self.user.get_queryset(InventorySource).filter(source__in=CLOUD_INVENTORY_SOURCES) + job_template_qs = self.user.get_queryset(JobTemplate) + qs = qs.filter(Q(Project___in=project_qs) | + Q(InventorySource___in=inventory_source_qs) | + Q(JobTemplate___in=job_template_qs)) + qs = qs.select_related( + 'created_by', + 'modified_by', + #'project', + #'inventory', + #'credential', + #'cloud_credential', + 'next_schedule', + 'last_job', + 'current_job', + ) + # FIXME: Figure out how to do select/prefetch on related project/inventory/credential/cloud_credential. + return qs + +class UnifiedJobAccess(BaseAccess): + ''' + I can see a unified job whenever I can see the same project update, + inventory update or job. + ''' + + model = UnifiedJob + + def get_queryset(self): + qs = self.model.objects.distinct() + project_update_qs = self.user.get_queryset(ProjectUpdate) + inventory_update_qs = self.user.get_queryset(InventoryUpdate).filter(source__in=CLOUD_INVENTORY_SOURCES) + job_qs = self.user.get_queryset(Job) + ad_hoc_command_qs = self.user.get_queryset(AdHocCommand) + system_job_qs = self.user.get_queryset(SystemJob) + qs = qs.filter(Q(ProjectUpdate___in=project_update_qs) | + Q(InventoryUpdate___in=inventory_update_qs) | + Q(Job___in=job_qs) | + Q(AdHocCommand___in=ad_hoc_command_qs) | + Q(SystemJob___in=system_job_qs)) + qs = qs.select_related( + 'created_by', + 'modified_by', + #'project', + #'inventory', + #'credential', + #'project___credential', + #'inventory_source___credential', + #'inventory_source___inventory', + #'job_template___inventory', + #'job_template___project', + #'job_template___credential', + #'job_template___cloud_credential', + ) + qs = qs.prefetch_related('unified_job_template') + # FIXME: Figure out how to do select/prefetch on related project/inventory/credential/cloud_credential. + return qs + +class ScheduleAccess(BaseAccess): + ''' + I can see a schedule if I can see it's related unified job, I can create them or update them if I have write access + ''' + + model = Schedule + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('created_by', 'modified_by') + qs = qs.prefetch_related('unified_job_template') + if self.user.is_superuser: + return qs + job_template_qs = self.user.get_queryset(JobTemplate) + inventory_source_qs = self.user.get_queryset(InventorySource) + project_qs = self.user.get_queryset(Project) + unified_qs = UnifiedJobTemplate.objects.filter(jobtemplate__in=job_template_qs) | \ + UnifiedJobTemplate.objects.filter(Q(project__in=project_qs)) | \ + UnifiedJobTemplate.objects.filter(Q(inventorysource__in=inventory_source_qs)) + return qs.filter(unified_job_template__in=unified_qs) + + def can_read(self, obj): + if self.user.is_superuser: + return True + if obj and obj.unified_job_template: + job_class = obj.unified_job_template + return check_user_access(self.user, type(job_class), 'read', obj.unified_job_template) + else: + return False + + def can_add(self, data): + if self.user.is_superuser: + return True + pk = get_pk_from_dict(data, 'unified_job_template') + obj = get_object_or_400(UnifiedJobTemplate, pk=pk) + if obj: + return check_user_access(self.user, type(obj), 'change', obj, None) + else: + return False + + def can_change(self, obj, data): + if self.user.is_superuser: + return True + if obj and obj.unified_job_template: + job_class = obj.unified_job_template + return check_user_access(self.user, type(job_class), 'change', job_class, None) + else: + return False + + def can_delete(self, obj): + if self.user.is_superuser: + return True + if obj and obj.unified_job_template: + job_class = obj.unified_job_template + return check_user_access(self.user, type(job_class), 'change', job_class, None) + else: + return False + +class ActivityStreamAccess(BaseAccess): + ''' + I can see activity stream events only when I have permission on all objects included in the event + ''' + + model = ActivityStream + + def get_queryset(self): + qs = self.model.objects.distinct() + qs = qs.select_related('actor') + qs = qs.prefetch_related('organization', 'user', 'inventory', 'host', 'group', 'inventory_source', + 'inventory_update', 'credential', 'team', 'project', 'project_update', + 'permission', 'job_template', 'job') + if self.user.is_superuser: + return qs + + user_admin_orgs = self.user.deprecated_admin_of_organizations.all() + user_orgs = self.user.deprecated_organizations.all() + + #Organization filter + qs = qs.filter(Q(organization__deprecated_admins__in=[self.user]) | Q(organization__deprecated_users__in=[self.user])) + + #User filter + qs = qs.filter(Q(user__pk=self.user.pk) | + Q(user__deprecated_organizations__in=user_admin_orgs) | + Q(user__deprecated_organizations__in=user_orgs)) + + #Inventory filter + inventory_qs = self.user.get_queryset(Inventory) + qs.filter(inventory__in=inventory_qs) + + #Host filter + qs.filter(host__inventory__in=inventory_qs) + + #Group filter + qs.filter(group__inventory__in=inventory_qs) + + #Inventory Source Filter + qs.filter(Q(inventory_source__inventory__in=inventory_qs) | + Q(inventory_source__group__inventory__in=inventory_qs)) + + #Inventory Update Filter + qs.filter(Q(inventory_update__inventory_source__inventory__in=inventory_qs) | + Q(inventory_update__inventory_source__group__inventory__in=inventory_qs)) + + #Credential Update Filter + qs.filter(Q(credential__user=self.user) | + Q(credential__user__deprecated_organizations__in=user_admin_orgs) | + Q(credential__user__deprecated_admin_of_organizations__in=user_admin_orgs) | + Q(credential__team__organization__in=user_admin_orgs) | + Q(credential__team__deprecated_users__in=[self.user])) + + #Team Filter + qs.filter(Q(team__organization__deprecated_admins__in=[self.user]) | + Q(team__deprecated_users__in=[self.user])) + + #Project Filter + project_qs = self.user.get_queryset(Project) + qs.filter(project__in=project_qs) + + #Project Update Filter + qs.filter(project_update__project__in=project_qs) + + #Permission Filter + permission_qs = self.user.get_queryset(Permission) + qs.filter(permission__in=permission_qs) + + #Job Template Filter + jobtemplate_qs = self.user.get_queryset(JobTemplate) + qs.filter(job_template__in=jobtemplate_qs) + + #Job Filter + job_qs = self.user.get_queryset(Job) + qs.filter(job__in=job_qs) + + # Ad Hoc Command Filter + ad_hoc_command_qs = self.user.get_queryset(AdHocCommand) + qs.filter(ad_hoc_command__in=ad_hoc_command_qs) + + # organization_qs = self.user.get_queryset(Organization) + # user_qs = self.user.get_queryset(User) + # inventory_qs = self.user.get_queryset(Inventory) + # host_qs = self.user.get_queryset(Host) + # group_qs = self.user.get_queryset(Group) + # inventory_source_qs = self.user.get_queryset(InventorySource) + # inventory_update_qs = self.user.get_queryset(InventoryUpdate) + # credential_qs = self.user.get_queryset(Credential) + # team_qs = self.user.get_queryset(Team) + # project_qs = self.user.get_queryset(Project) + # project_update_qs = self.user.get_queryset(ProjectUpdate) + # permission_qs = self.user.get_queryset(Permission) + # job_template_qs = self.user.get_queryset(JobTemplate) + # job_qs = self.user.get_queryset(Job) + # qs = qs.filter(Q(organization__in=organization_qs) | + # Q(user__in=user_qs) | + # Q(inventory__in=inventory_qs) | + # Q(host__in=host_qs) | + # Q(group__in=group_qs) | + # Q(inventory_source__in=inventory_source_qs) | + # Q(credential__in=credential_qs) | + # Q(team__in=team_qs) | + # Q(project__in=project_qs) | + # Q(project_update__in=project_update_qs) | + # Q(permission__in=permission_qs) | + # Q(job_template__in=job_template_qs) | + # Q(job__in=job_qs)) + return qs + + def can_add(self, data): + return False + + def can_change(self, obj, data): + return False + + def can_delete(self, obj): + return False + +class CustomInventoryScriptAccess(BaseAccess): + + model = CustomInventoryScript + + def get_queryset(self): + qs = self.model.objects.distinct() + if not self.user.is_superuser: + qs = qs.filter(Q(organization__deprecated_admins__in=[self.user]) | Q(organization__deprecated_users__in=[self.user])) + return qs + + def can_read(self, obj): + if self.user.is_superuser: + return True + return bool(obj.organization in self.user.deprecated_organizations.all() or obj.organization in self.user.deprecated_admin_of_organizations.all()) + + def can_add(self, data): + if self.user.is_superuser: + return True + return False + + def can_change(self, obj, data): + if self.user.is_superuser: + return True + return False + + def can_delete(self, obj): + if self.user.is_superuser: + return True + return False + + +class TowerSettingsAccess(BaseAccess): + ''' + - I can see settings when + - I am a super user + - I can edit settings when + - I am a super user + - I can clear settings when + - I am a super user + ''' + + model = TowerSettings + + def get_queryset(self): + if self.user.is_superuser: + return self.model.objects.all() + return self.model.objects.none() + + def can_change(self, obj, data): + return self.user.is_superuser + + def can_delete(self, obj): + return self.user.is_superuser + +register_access(User, UserAccess) +register_access(Organization, OrganizationAccess) +register_access(Inventory, InventoryAccess) +register_access(Host, HostAccess) +register_access(Group, GroupAccess) +register_access(InventorySource, InventorySourceAccess) +register_access(InventoryUpdate, InventoryUpdateAccess) +register_access(Credential, CredentialAccess) +register_access(Team, TeamAccess) +register_access(Project, ProjectAccess) +register_access(ProjectUpdate, ProjectUpdateAccess) +register_access(Permission, PermissionAccess) +register_access(JobTemplate, JobTemplateAccess) +register_access(Job, JobAccess) +register_access(JobHostSummary, JobHostSummaryAccess) +register_access(JobEvent, JobEventAccess) +register_access(SystemJobTemplate, SystemJobTemplateAccess) +register_access(SystemJob, SystemJobAccess) +register_access(AdHocCommand, AdHocCommandAccess) +register_access(AdHocCommandEvent, AdHocCommandEventAccess) +register_access(Schedule, ScheduleAccess) +register_access(UnifiedJobTemplate, UnifiedJobTemplateAccess) +register_access(UnifiedJob, UnifiedJobAccess) +register_access(ActivityStream, ActivityStreamAccess) +register_access(CustomInventoryScript, CustomInventoryScriptAccess) +register_access(TowerSettings, TowerSettingsAccess) diff --git a/awx/main/migrations/_rbac.py b/awx/main/migrations/_rbac.py new file mode 100644 index 0000000000..4a1115c4b3 --- /dev/null +++ b/awx/main/migrations/_rbac.py @@ -0,0 +1,512 @@ +import logging +from time import time + +from django.utils.encoding import smart_text +from django.db.models import Q + +from collections import defaultdict +from awx.main.utils import getattrd +from awx.main.models.rbac import Role, batch_role_ancestor_rebuilding + +logger = logging.getLogger(__name__) + +def log_migration(wrapped): + '''setup the logging mechanism for each migration method + as it runs, Django resets this, so we use a decorator + to re-add the handler for each method. + ''' + handler = logging.FileHandler("/tmp/tower_rbac_migrations.log", mode="a", encoding="UTF-8") + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + handler.setLevel(logging.DEBUG) + handler.setFormatter(formatter) + + def wrapper(*args, **kwargs): + logger.handlers = [] + logger.addHandler(handler) + return wrapped(*args, **kwargs) + return wrapper + +@log_migration +def create_roles(apps, schema_editor): + ''' + Implicit role creation happens in our post_save hook for all of our + resources. Here we iterate through all of our resource types and call + .save() to ensure all that happens for every object in the system before we + get busy with the actual migration work. + + This gets run after migrate_users, which does role creation for users a + little differently. + ''' + + models = [ + apps.get_model('main', m) for m in [ + 'Organization', + 'Team', + 'Inventory', + 'Project', + 'Credential', + 'CustomInventoryScript', + 'JobTemplate', + ] + ] + + with batch_role_ancestor_rebuilding(): + for model in models: + for obj in model.objects.iterator(): + obj.save() + + +@log_migration +def migrate_users(apps, schema_editor): + User = apps.get_model('auth', "User") + Role = apps.get_model('main', "Role") + ContentType = apps.get_model('contenttypes', "ContentType") + user_content_type = ContentType.objects.get_for_model(User) + + for user in User.objects.iterator(): + user.save() + try: + Role.objects.get(content_type=user_content_type, object_id=user.id) + logger.info(smart_text(u"found existing role for user: {}".format(user.username))) + except Role.DoesNotExist: + role = Role.objects.create( + role_field='admin_role', + content_type = user_content_type, + object_id = user.id + ) + role.members.add(user) + logger.info(smart_text(u"migrating to new role for user: {}".format(user.username))) + + if user.is_superuser: + if Role.objects.filter(singleton_name='system_administrator').exists(): + sa_role = Role.objects.get(singleton_name='system_administrator') + else: + sa_role = Role.objects.create( + singleton_name='system_administrator', + role_field='system_administrator' + ) + + sa_role.members.add(user) + logger.warning(smart_text(u"added superuser: {}".format(user.username))) + +@log_migration +def migrate_organization(apps, schema_editor): + Organization = apps.get_model('main', "Organization") + for org in Organization.objects.iterator(): + for admin in org.deprecated_admins.all(): + org.admin_role.members.add(admin) + logger.info(smart_text(u"added admin: {}, {}".format(org.name, admin.username))) + for user in org.deprecated_users.all(): + org.member_role.members.add(user) + logger.info(smart_text(u"added member: {}, {}".format(org.name, user.username))) + +@log_migration +def migrate_team(apps, schema_editor): + Team = apps.get_model('main', 'Team') + for t in Team.objects.iterator(): + for user in t.deprecated_users.all(): + t.member_role.members.add(user) + logger.info(smart_text(u"team: {}, added user: {}".format(t.name, user.username))) + +def attrfunc(attr_path): + '''attrfunc returns a function that will + attempt to use the attr_path to access the attribute + of an instance that is passed in to the returned function. + + Example: + get_org = attrfunc('inventory.organization') + org = get_org(JobTemplateInstance) + ''' + def attr(inst): + return getattrd(inst, attr_path) + return attr + +def _update_credential_parents(org, cred): + cred.organization = org + cred.save() + +def _discover_credentials(instances, cred, orgfunc): + '''_discover_credentials will find shared credentials across + organizations. If a shared credential is found, it will duplicate + the credential, ensure the proper role permissions are added to the new + credential, and update any references from the old to the newly created + credential. + + instances is a list of all objects that were matched when filtered + with cred. + + orgfunc is a function that when called with an instance from instances + will produce an Organization object. + ''' + orgs = defaultdict(list) + for inst in instances: + try: + orgs[orgfunc(inst)].append(inst) + except AttributeError: + # JobTemplate.inventory can be NULL sometimes, eg when an inventory + # has been deleted. This protects against that. + pass + + if len(orgs) == 1: + try: + _update_credential_parents(orgfunc(instances[0]), cred) + except AttributeError: + # JobTemplate.inventory can be NULL sometimes, eg when an inventory + # has been deleted. This protects against that. + pass + else: + for pos, org in enumerate(orgs): + if pos == 0: + _update_credential_parents(org, cred) + else: + # Create a new credential + cred.pk = None + cred.organization = None + cred.save() + + cred.admin_role, cred.use_role = None, None + + for i in orgs[org]: + i.credential = cred + i.save() + + _update_credential_parents(org, cred) + +@log_migration +def migrate_credential(apps, schema_editor): + Credential = apps.get_model('main', "Credential") + JobTemplate = apps.get_model('main', 'JobTemplate') + Project = apps.get_model('main', 'Project') + InventorySource = apps.get_model('main', 'InventorySource') + + for cred in Credential.objects.iterator(): + results = [x for x in JobTemplate.objects.filter(Q(credential=cred) | Q(cloud_credential=cred)).all()] + \ + [x for x in InventorySource.objects.filter(credential=cred).all()] + if cred.deprecated_team is not None and results: + if len(results) == 1: + _update_credential_parents(results[0].inventory.organization, cred) + else: + _discover_credentials(results, cred, attrfunc('inventory.organization')) + logger.info(smart_text(u"added Credential(name={}, kind={}, host={}) at organization level".format(cred.name, cred.kind, cred.host))) + + projs = Project.objects.filter(credential=cred).all() + if cred.deprecated_team is not None and projs: + if len(projs) == 1: + _update_credential_parents(projs[0].organization, cred) + else: + _discover_credentials(projs, cred, attrfunc('organization')) + logger.info(smart_text(u"added Credential(name={}, kind={}, host={}) at organization level".format(cred.name, cred.kind, cred.host))) + + if cred.deprecated_team is not None: + cred.deprecated_team.admin_role.children.add(cred.admin_role) + cred.deprecated_team.member_role.children.add(cred.use_role) + cred.save() + logger.info(smart_text(u"added Credential(name={}, kind={}, host={}) at user level".format(cred.name, cred.kind, cred.host))) + elif cred.deprecated_user is not None: + cred.admin_role.members.add(cred.deprecated_user) + cred.save() + logger.info(smart_text(u"added Credential(name={}, kind={}, host={}) at user level".format(cred.name, cred.kind, cred.host, ))) + else: + logger.warning(smart_text(u"orphaned credential found Credential(name={}, kind={}, host={}), superuser only".format(cred.name, cred.kind, cred.host, ))) + + +@log_migration +def migrate_inventory(apps, schema_editor): + Inventory = apps.get_model('main', 'Inventory') + Permission = apps.get_model('main', 'Permission') + + def role_from_permission(perm): + if perm.permission_type == 'admin': + return inventory.admin_role + elif perm.permission_type == 'read': + return inventory.read_role + elif perm.permission_type == 'write': + return inventory.update_role + elif perm.permission_type == 'check' or perm.permission_type == 'run' or perm.permission_type == 'create': + # These permission types are handled differntly in RBAC now, nothing to migrate. + return False + else: + return None + + for inventory in Inventory.objects.iterator(): + for perm in Permission.objects.filter(inventory=inventory): + role = None + execrole = None + + role = role_from_permission(perm) + if role is None: + raise Exception(smart_text(u'Unhandled permission type for inventory: {}'.format( perm.permission_type))) + + if perm.run_ad_hoc_commands: + execrole = inventory.use_role + + if perm.team: + if role: + perm.team.member_role.children.add(role) + if execrole: + perm.team.member_role.children.add(execrole) + logger.info(smart_text(u'added Team({}) access to Inventory({})'.format(perm.team.name, inventory.name))) + + if perm.user: + if role: + role.members.add(perm.user) + if execrole: + execrole.members.add(perm.user) + logger.info(smart_text(u'added User({}) access to Inventory({})'.format(perm.user.username, inventory.name))) + +@log_migration +def migrate_projects(apps, schema_editor): + ''' + I can see projects when: + X I am a superuser. + X I am an admin in an organization associated with the project. + X I am a user in an organization associated with the project. + X I am on a team associated with the project. + X I have been explicitly granted permission to run/check jobs using the + project. + X I created the project but it isn't associated with an organization + I can change/delete when: + X I am a superuser. + X I am an admin in an organization associated with the project. + X I created the project but it isn't associated with an organization + ''' + Project = apps.get_model('main', 'Project') + Permission = apps.get_model('main', 'Permission') + JobTemplate = apps.get_model('main', 'JobTemplate') + + # Migrate projects to single organizations, duplicating as necessary + for project in Project.objects.iterator(): + original_project_name = project.name + project_orgs = project.deprecated_organizations.distinct().all() + + if len(project_orgs) >= 1: + first_org = None + for org in project_orgs: + if first_org is None: + # For the first org, re-use our existing Project object, so don't do the below duplication effort + first_org = org + if len(project_orgs) > 1: + project.name = smart_text(u'{} - {}'.format(first_org.name, original_project_name)) + project.organization = first_org + project.save() + else: + new_prj = Project.objects.create( + created = project.created, + modified = project.modified, + polymorphic_ctype_id = project.polymorphic_ctype_id, + description = project.description, + name = smart_text(u'{} - {}'.format(org.name, original_project_name)), + old_pk = project.old_pk, + created_by_id = project.created_by_id, + modified_by_id = project.modified_by_id, + scm_type = project.scm_type, + scm_url = project.scm_url, + scm_branch = project.scm_branch, + scm_clean = project.scm_clean, + scm_delete_on_update = project.scm_delete_on_update, + scm_delete_on_next_update = project.scm_delete_on_next_update, + scm_update_on_launch = project.scm_update_on_launch, + scm_update_cache_timeout = project.scm_update_cache_timeout, + credential = project.credential, + organization = org + ) + if project.scm_type == "": + new_prj.local_path = project.local_path + new_prj.save() + for team in project.deprecated_teams.iterator(): + new_prj.deprecated_teams.add(team) + logger.warning(smart_text(u'cloning Project({}) onto {} as Project({})'.format(original_project_name, org, new_prj))) + job_templates = JobTemplate.objects.filter(project=project, inventory__organization=org).all() + for jt in job_templates: + jt.project = new_prj + jt.save() + for perm in Permission.objects.filter(project=project): + Permission.objects.create( + created = perm.created, + modified = perm.modified, + created_by = perm.created_by, + modified_by = perm.modified_by, + description = perm.description, + name = perm.name, + user = perm.user, + team = perm.team, + project = new_prj, + inventory = perm.inventory, + permission_type = perm.permission_type, + run_ad_hoc_commands = perm.run_ad_hoc_commands, + ) + + # Migrate permissions + for project in Project.objects.iterator(): + if project.organization is None and project.created_by is not None: + project.admin_role.members.add(project.created_by) + logger.warn(smart_text(u'adding Project({}) admin: {}'.format(project.name, project.created_by.username))) + + for team in project.deprecated_teams.all(): + team.member_role.children.add(project.read_role) + logger.info(smart_text(u'adding Team({}) access for Project({})'.format(team.name, project.name))) + + for perm in Permission.objects.filter(project=project): + if perm.permission_type == 'create': + role = project.use_role + else: + role = project.read_role + + if perm.team: + perm.team.member_role.children.add(role) + logger.info(smart_text(u'adding Team({}) access for Project({})'.format(perm.team.name, project.name))) + + if perm.user: + role.members.add(perm.user) + logger.info(smart_text(u'adding User({}) access for Project({})'.format(perm.user.username, project.name))) + + if project.organization is not None: + for user in project.organization.deprecated_users.all(): + if not (project.use_role.members.filter(pk=user.id).exists() or project.admin_role.members.filter(pk=user.id).exists()): + project.read_role.members.add(user) + logger.info(smart_text(u'adding Organization({}) member access to Project({})'.format(project.organization.name, project.name))) + + + +@log_migration +def migrate_job_templates(apps, schema_editor): + ''' + NOTE: This must be run after orgs, inventory, projects, credential, and + users have been migrated + ''' + + + ''' + I can see job templates when: + X I am a superuser. + - I can read the inventory, project and credential (which means I am an + org admin or member of a team with access to all of the above). + - I have permission explicitly granted to check/deploy with the inventory + and project. + + + #This does not mean I would be able to launch a job from the template or + #edit the template. + - access.py can_read for JobTemplate enforces that you can only + see it if you can launch it, so the above imply launch too + ''' + + + ''' + Tower administrators, organization administrators, and project + administrators, within a project under their purview, may create and modify + new job templates for that project. + + When editing a job template, they may select among the inventory groups and + credentials in the organization for which they have usage permissions, or + they may leave either blank to be selected at runtime. + + Additionally, they may specify one or more users/teams that have execution + permission for that job template, among the users/teams that are a member + of that project. + + That execution permission is valid irrespective of any explicit permissions + the user has or has not been granted to the inventory group or credential + specified in the job template. + + ''' + + User = apps.get_model('auth', 'User') + JobTemplate = apps.get_model('main', 'JobTemplate') + Team = apps.get_model('main', 'Team') + Permission = apps.get_model('main', 'Permission') + Credential = apps.get_model('main', 'Credential') + + jt_queryset = JobTemplate.objects.select_related('inventory', 'project', 'inventory__organization', 'execute_role') + + for jt in jt_queryset.iterator(): + jt_permission_qs = Permission.objects.filter( + inventory=jt.inventory, + project=jt.project, + ) + + inventory_permission_qs = Permission.objects.filter( + inventory=jt.inventory, + project__isnull=True, + ) + + team_create_permissions = set( + jt_permission_qs + .filter(permission_type__in=['create']) + .values_list('team__id', flat=True) + ) + team_run_permissions = set( + jt_permission_qs + .filter(permission_type__in=['check', 'run'] if jt.job_type == 'check' else ['run']) + .values_list('team__id', flat=True) + ) + user_create_permissions = set( + jt_permission_qs + .filter(permission_type__in=['create']) + .values_list('user__id', flat=True) + ) + user_run_permissions = set( + jt_permission_qs + .filter(permission_type__in=['check', 'run'] if jt.job_type == 'check' else ['run']) + .values_list('user__id', flat=True) + ) + + team_inv_permissions = defaultdict(set) + user_inv_permissions = defaultdict(set) + + for user_id, team_id, inventory_id in inventory_permission_qs.values_list('user_id', 'team_id', 'inventory_id'): + if user_id: + user_inv_permissions[user_id].add(inventory_id) + if team_id: + team_inv_permissions[team_id].add(inventory_id) + + + for team in Team.objects.filter(id__in=team_create_permissions).iterator(): + if jt.inventory.id in team_inv_permissions[team.id] and \ + ((not jt.credential and not jt.cloud_credential) or + Credential.objects.filter(deprecated_team=team, jobtemplates=jt).exists()): + team.member_role.children.add(jt.admin_role) + logger.info(smart_text(u'transfering admin access on JobTemplate({}) to Team({})'.format(jt.name, team.name))) + for team in Team.objects.filter(id__in=team_run_permissions).iterator(): + if jt.inventory.id in team_inv_permissions[team.id] and \ + ((not jt.credential and not jt.cloud_credential) or + Credential.objects.filter(deprecated_team=team, jobtemplates=jt).exists()): + team.member_role.children.add(jt.execute_role) + logger.info(smart_text(u'transfering execute access on JobTemplate({}) to Team({})'.format(jt.name, team.name))) + + for user in User.objects.filter(id__in=user_create_permissions).iterator(): + cred = jt.credential or jt.cloud_credential + if (jt.inventory.id in user_inv_permissions[user.id] or + any([jt.inventory.id in team_inv_permissions[team.id] for team in user.deprecated_teams.all()])) and \ + (not cred or cred.deprecated_user == user or + (cred.deprecated_team and cred.deprecated_team.deprecated_users.filter(pk=user.id).exists())): + jt.admin_role.members.add(user) + logger.info(smart_text(u'transfering admin access on JobTemplate({}) to User({})'.format(jt.name, user.username))) + for user in User.objects.filter(id__in=user_run_permissions).iterator(): + cred = jt.credential or jt.cloud_credential + + if (jt.inventory.id in user_inv_permissions[user.id] or + any([jt.inventory.id in team_inv_permissions[team.id] for team in user.deprecated_teams.all()])) and \ + (not cred or cred.deprecated_user == user or + (cred.deprecated_team and cred.deprecated_team.deprecated_users.filter(pk=user.id).exists())): + jt.execute_role.members.add(user) + logger.info(smart_text(u'transfering execute access on JobTemplate({}) to User({})'.format(jt.name, user.username))) + + + +@log_migration +def rebuild_role_hierarchy(apps, schema_editor): + logger.info('Computing role roots..') + start = time() + roots = Role.objects \ + .all() \ + .values_list('id', flat=True) + stop = time() + logger.info('Found %d roots in %f seconds, rebuilding ancestry map' % (len(roots), stop - start)) + start = time() + Role.rebuild_role_ancestor_list(roots, []) + stop = time() + logger.info('Rebuild completed in %f seconds' % (stop - start)) + logger.info('Done.') + + diff --git a/awx/main/migrations/_system_tracking.py b/awx/main/migrations/_system_tracking.py new file mode 100644 index 0000000000..9c77fb10f3 --- /dev/null +++ b/awx/main/migrations/_system_tracking.py @@ -0,0 +1,69 @@ + +import logging + +from django.utils.encoding import smart_text +from django.conf import settings + +from awx.fact.models import FactVersion +from awx.fact.utils.dbtransform import KeyTransform +from mongoengine.connection import ConnectionError +from pymongo.errors import OperationFailure + +logger = logging.getLogger(__name__) + +def log_migration(wrapped): + '''setup the logging mechanism for each migration method + as it runs, Django resets this, so we use a decorator + to re-add the handler for each method. + ''' + handler = logging.FileHandler("/tmp/tower_system_tracking_migrations.log", mode="a", encoding="UTF-8") + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + handler.setLevel(logging.DEBUG) + handler.setFormatter(formatter) + + def wrapper(*args, **kwargs): + logger.handlers = [] + logger.addHandler(handler) + return wrapped(*args, **kwargs) + return wrapper + +@log_migration +def migrate_facts(apps, schema_editor): + Fact = apps.get_model('main', "Fact") + Host = apps.get_model('main', "Host") + + if (not hasattr(settings, 'MONGO_HOST')) or settings.MONGO_HOST == NotImplemented: + logger.info("failed to find MONGO_HOST in settings. Will NOT attempt to migrate system_tracking data from Mongo to Postgres.") + # If settings do not specify a mongo database, do not raise error or drop db + return (0, 0) + + try: + n = FactVersion.objects.all().count() + except ConnectionError: + # Let the user know about the error. Likely this is + # a new install and we just don't need to do this + logger.info(smart_text(u"failed to connect to mongo database host {}. Will NOT attempt to migrate system_tracking data from Mongo to Postgres.".format(settings.MONGO_HOST))) + return (0, 0) + except OperationFailure: + # The database was up but something happened when we tried to query it + logger.info(smart_text(u"failed to connect to issue Mongo query on host {}. Will NOT attempt to migrate system_tracking data from Mongo to Postgres.".format(settings.MONGO_HOST))) + return (0, 0) + + migrated_count = 0 + not_migrated_count = 0 + transform = KeyTransform([('.', '\uff0E'), ('$', '\uff04')]) + for factver in FactVersion.objects.all(): + try: + host = Host.objects.only('id').get(inventory__id=factver.host.inventory_id, name=factver.host.hostname) + fact_obj = transform.replace_outgoing(factver.fact) + Fact.objects.create(host_id=host.id, timestamp=fact_obj.timestamp, module=fact_obj.module, facts=fact_obj.fact).save() + migrated_count += 1 + except Host.DoesNotExist: + # No host was found to migrate the facts to. + # This isn't a hard error. Just something the user would want to know. + logger.info(smart_text(u"unable to migrate fact {} not found in Postgres <{}, {}>".format(factver.id, factver.host.inventory_id, factver.host.hostname))) + not_migrated_count += 1 + + logger.info(smart_text(u"successfully migrated {} records of system_tracking data from Mongo to Postgres. {} records not migrated due to corresponding pairs not found in Postgres.".format(migrated_count, not_migrated_count))) + return (migrated_count, not_migrated_count) + diff --git a/awx/main/migrations/_team_cleanup.py b/awx/main/migrations/_team_cleanup.py new file mode 100644 index 0000000000..1a937d1f88 --- /dev/null +++ b/awx/main/migrations/_team_cleanup.py @@ -0,0 +1,30 @@ +# Python +import logging +from django.utils.encoding import smart_text + +logger = logging.getLogger(__name__) + +def log_migration(wrapped): + '''setup the logging mechanism for each migration method + as it runs, Django resets this, so we use a decorator + to re-add the handler for each method. + ''' + handler = logging.FileHandler("/tmp/tower_rbac_migrations.log", mode="a", encoding="UTF-8") + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + handler.setLevel(logging.DEBUG) + handler.setFormatter(formatter) + + def wrapper(*args, **kwargs): + logger.handlers = [] + logger.addHandler(handler) + return wrapped(*args, **kwargs) + return wrapper + +@log_migration +def migrate_team(apps, schema_editor): + '''If an orphan team exists that is still active, delete it.''' + Team = apps.get_model('main', 'Team') + for team in Team.objects.iterator(): + if team.organization is None: + logger.info(smart_text(u"Deleting orphaned team: {}".format(team.name))) + team.delete() diff --git a/awx/main/models/__init__.py b/awx/main/models/__init__.py index 2926e7cf28..1e320e6238 100644 --- a/awx/main/models/__init__.py +++ b/awx/main/models/__init__.py @@ -16,6 +16,12 @@ from awx.main.models.ad_hoc_commands import * # noqa from awx.main.models.schedules import * # noqa from awx.main.models.activity_stream import * # noqa from awx.main.models.ha import * # noqa +from awx.main.models.configuration import * # noqa +from awx.main.models.rbac import * # noqa +from awx.main.models.mixins import * # noqa +from awx.main.models.notifications import * # noqa +from awx.main.models.fact import * # noqa +from awx.main.models.label import * # noqa # Monkeypatch Django serializer to ignore django-taggit fields (which break # the dumpdata command; see https://github.com/alex/django-taggit/issues/155). @@ -32,8 +38,42 @@ _PythonSerializer.handle_m2m_field = _new_handle_m2m_field # Add custom methods to User model for permissions checks. from django.contrib.auth.models import User # noqa from awx.main.access import * # noqa + + User.add_to_class('get_queryset', get_user_queryset) User.add_to_class('can_access', check_user_access) +User.add_to_class('accessible_objects', user_accessible_objects) +User.add_to_class('admin_role', user_admin_role) + +@property +def user_get_organizations(user): + return Organization.objects.filter(member_role__members=user) + +@property +def user_get_admin_of_organizations(user): + return Organization.objects.filter(admin_role__members=user) + +@property +def user_get_auditor_of_organizations(user): + return Organization.objects.filter(auditor_role__members=user) + +User.add_to_class('organizations', user_get_organizations) +User.add_to_class('admin_of_organizations', user_get_admin_of_organizations) +User.add_to_class('auditor_of_organizations', user_get_auditor_of_organizations) + +@property +def user_is_system_auditor(user): + return Role.singleton('system_auditor').members.filter(id=user.id).exists() + +@user_is_system_auditor.setter +def user_is_system_auditor(user, tf): + if user.id: + if tf: + Role.singleton('system_auditor').members.add(user) + else: + Role.singleton('system_auditor').members.remove(user) + +User.add_to_class('is_system_auditor', user_is_system_auditor) # Import signal handlers only after models have been defined. import awx.main.signals # noqa @@ -55,6 +95,11 @@ activity_stream_registrar.connect(Job) activity_stream_registrar.connect(AdHocCommand) # activity_stream_registrar.connect(JobHostSummary) # activity_stream_registrar.connect(JobEvent) -#activity_stream_registrar.connect(Profile) +# activity_stream_registrar.connect(Profile) activity_stream_registrar.connect(Schedule) activity_stream_registrar.connect(CustomInventoryScript) +activity_stream_registrar.connect(TowerSettings) +activity_stream_registrar.connect(NotificationTemplate) +activity_stream_registrar.connect(Notification) +activity_stream_registrar.connect(Label) +activity_stream_registrar.connect(User) diff --git a/awx/main/models/activity_stream.py b/awx/main/models/activity_stream.py index b695831ada..8ff285cb45 100644 --- a/awx/main/models/activity_stream.py +++ b/awx/main/models/activity_stream.py @@ -16,6 +16,7 @@ class ActivityStream(models.Model): class Meta: app_label = 'main' + ordering = ('pk',) OPERATION_CHOICES = [ ('create', _('Entity Created')), @@ -53,6 +54,10 @@ class ActivityStream(models.Model): ad_hoc_command = models.ManyToManyField("AdHocCommand", blank=True) schedule = models.ManyToManyField("Schedule", blank=True) custom_inventory_script = models.ManyToManyField("CustomInventoryScript", blank=True) + notification_template = models.ManyToManyField("NotificationTemplate", blank=True) + notification = models.ManyToManyField("Notification", blank=True) + label = models.ManyToManyField("Label", blank=True) + role = models.ManyToManyField("Role", blank=True) def get_absolute_url(self): return reverse('api:activity_stream_detail', args=(self.pk,)) diff --git a/awx/main/models/ad_hoc_commands.py b/awx/main/models/ad_hoc_commands.py index 1371a39c37..da9aaf740b 100644 --- a/awx/main/models/ad_hoc_commands.py +++ b/awx/main/models/ad_hoc_commands.py @@ -5,6 +5,7 @@ import hmac import json import logging +from urlparse import urljoin # Django from django.conf import settings @@ -21,6 +22,7 @@ from jsonfield import JSONField from awx.main.models.base import * # noqa from awx.main.models.unified_jobs import * # noqa from awx.main.utils import decrypt_field +from awx.main.conf import tower_settings logger = logging.getLogger('awx.main.models.ad_hoc_commands') @@ -29,15 +31,12 @@ __all__ = ['AdHocCommand', 'AdHocCommandEvent'] class AdHocCommand(UnifiedJob): - MODULE_NAME_CHOICES = [(x,x) for x in settings.AD_HOC_COMMANDS] - MODULE_NAME_DEFAULT = 'command' if 'command' in settings.AD_HOC_COMMANDS else None - class Meta(object): app_label = 'main' job_type = models.CharField( max_length=64, - choices=JOB_TYPE_CHOICES, + choices=AD_HOC_JOB_TYPE_CHOICES, default='run', ) inventory = models.ForeignKey( @@ -60,9 +59,8 @@ class AdHocCommand(UnifiedJob): ) module_name = models.CharField( max_length=1024, - default=MODULE_NAME_DEFAULT, - choices=MODULE_NAME_CHOICES, - blank=bool(MODULE_NAME_DEFAULT), + default='', + blank=True, ) module_args = models.TextField( blank=True, @@ -86,6 +84,18 @@ class AdHocCommand(UnifiedJob): editable=False, through='AdHocCommandEvent', ) + extra_vars = models.TextField( + blank=True, + default='', + ) + + extra_vars_dict = VarsDictProperty('extra_vars', True) + + def clean_inventory(self): + inv = self.inventory + if not inv: + raise ValidationError('No valid inventory.') + return inv def clean_credential(self): cred = self.credential @@ -104,7 +114,7 @@ class AdHocCommand(UnifiedJob): if type(self.module_name) not in (str, unicode): raise ValidationError("Invalid type for ad hoc command") module_name = self.module_name.strip() or 'command' - if module_name not in settings.AD_HOC_COMMANDS: + if module_name not in tower_settings.AD_HOC_COMMANDS: raise ValidationError('Unsupported module for ad hoc commands.') return module_name @@ -119,7 +129,7 @@ class AdHocCommand(UnifiedJob): @property def passwords_needed_to_start(self): '''Return list of password field names needed to start the job.''' - if self.credential and self.credential.active: + if self.credential: return self.credential.passwords_needed else: return [] @@ -136,6 +146,9 @@ class AdHocCommand(UnifiedJob): def get_absolute_url(self): return reverse('api:ad_hoc_command_detail', args=(self.pk,)) + def get_ui_url(self): + return urljoin(tower_settings.TOWER_URL_BASE, "/#/ad_hoc_commands/{}".format(self.pk)) + @property def task_auth_token(self): '''Return temporary auth token used for task requests via API.''' @@ -143,6 +156,25 @@ class AdHocCommand(UnifiedJob): h = hmac.new(settings.SECRET_KEY, self.created.isoformat()) return '%d-%s' % (self.pk, h.hexdigest()) + @property + def notification_templates(self): + all_inventory_sources = set() + for h in self.hosts.all(): + for invsrc in h.inventory_sources.all(): + all_inventory_sources.add(invsrc) + active_templates = dict(error=set(), + success=set(), + any=set()) + for invsrc in all_inventory_sources: + notifications_dict = invsrc.notification_templates + for notification_type in active_templates.keys(): + for templ in notifications_dict[notification_type]: + active_templates[notification_type].add(templ) + active_templates['error'] = list(active_templates['error']) + active_templates['any'] = list(active_templates['any']) + active_templates['success'] = list(active_templates['success']) + return active_templates + def get_passwords_needed_to_start(self): return self.passwords_needed_to_start @@ -157,14 +189,14 @@ class AdHocCommand(UnifiedJob): def task_impact(self): # NOTE: We sorta have to assume the host count matches and that forks default to 5 from awx.main.models.inventory import Host - count_hosts = Host.objects.filter(active=True, enabled=True, inventory__ad_hoc_commands__pk=self.pk).count() + count_hosts = Host.objects.filter( enabled=True, inventory__ad_hoc_commands__pk=self.pk).count() return min(count_hosts, 5 if self.forks == 0 else self.forks) * 10 def generate_dependencies(self, active_tasks): from awx.main.models import InventoryUpdate if not self.inventory: return [] - inventory_sources = self.inventory.inventory_sources.filter(active=True, update_on_launch=True) + inventory_sources = self.inventory.inventory_sources.filter( update_on_launch=True) inventory_sources_found = [] dependencies = [] for obj in active_tasks: diff --git a/awx/main/models/base.py b/awx/main/models/base.py index 27df355652..c4914cdd20 100644 --- a/awx/main/models/base.py +++ b/awx/main/models/base.py @@ -9,7 +9,6 @@ import shlex import yaml # Django -from django.conf import settings from django.db import models from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ @@ -26,11 +25,11 @@ from awx.main.utils import encrypt_field __all__ = ['VarsDictProperty', 'BaseModel', 'CreatedModifiedModel', 'PasswordFieldsModel', 'PrimordialModel', 'CommonModel', - 'CommonModelNameNotUnique', + 'CommonModelNameNotUnique', 'NotificationFieldsModel', 'PERM_INVENTORY_ADMIN', 'PERM_INVENTORY_READ', 'PERM_INVENTORY_WRITE', 'PERM_INVENTORY_DEPLOY', 'PERM_INVENTORY_SCAN', 'PERM_INVENTORY_CHECK', 'PERM_JOBTEMPLATE_CREATE', 'JOB_TYPE_CHOICES', - 'PERMISSION_TYPE_CHOICES', 'CLOUD_INVENTORY_SOURCES', + 'AD_HOC_JOB_TYPE_CHOICES', 'PERMISSION_TYPE_CHOICES', 'CLOUD_INVENTORY_SOURCES', 'VERBOSITY_CHOICES'] PERM_INVENTORY_ADMIN = 'admin' @@ -47,6 +46,11 @@ JOB_TYPE_CHOICES = [ (PERM_INVENTORY_SCAN, _('Scan')), ] +AD_HOC_JOB_TYPE_CHOICES = [ + (PERM_INVENTORY_DEPLOY, _('Run')), + (PERM_INVENTORY_CHECK, _('Check')), +] + PERMISSION_TYPE_CHOICES = [ (PERM_INVENTORY_READ, _('Read Inventory')), (PERM_INVENTORY_WRITE, _('Edit Inventory')), @@ -57,16 +61,16 @@ PERMISSION_TYPE_CHOICES = [ (PERM_JOBTEMPLATE_CREATE, _('Create a Job Template')), ] -CLOUD_INVENTORY_SOURCES = ['ec2', 'rax', 'vmware', 'gce', 'azure', 'openstack', 'custom'] +CLOUD_INVENTORY_SOURCES = ['ec2', 'rax', 'vmware', 'gce', 'azure', 'azure_rm', 'openstack', 'custom', 'satellite6', 'cloudforms'] -VERBOSITY_CHOICES = getattr(settings, 'VERBOSITY_CHOICES', [ +VERBOSITY_CHOICES = [ (0, '0 (Normal)'), (1, '1 (Verbose)'), (2, '2 (More Verbose)'), (3, '3 (Debug)'), (4, '4 (Connection Debug)'), (5, '5 (WinRM Debug)'), -]) +] class VarsDictProperty(object): @@ -133,7 +137,7 @@ class BaseModel(models.Model): errors = {} try: super(BaseModel, self).clean_fields(exclude) - except ValidationError, e: + except ValidationError as e: errors = e.update_error_dict(errors) for f in self._meta.fields: if f.name in exclude: @@ -141,7 +145,7 @@ class BaseModel(models.Model): if hasattr(self, 'clean_%s' % f.name): try: setattr(self, f.name, getattr(self, 'clean_%s' % f.name)()) - except ValidationError, e: + except ValidationError as e: errors[f.name] = e.messages if errors: raise ValidationError(errors) @@ -157,16 +161,6 @@ class BaseModel(models.Model): self.save(update_fields=update_fields) return update_fields - def save(self, *args, **kwargs): - # For compatibility with Django 1.4.x, attempt to handle any calls to - # save that pass update_fields. - try: - super(BaseModel, self).save(*args, **kwargs) - except TypeError: - if 'update_fields' not in kwargs: - raise - kwargs.pop('update_fields') - super(BaseModel, self).save(*args, **kwargs) class CreatedModifiedModel(BaseModel): ''' @@ -214,15 +208,6 @@ class PasswordFieldsModel(BaseModel): def _password_field_allows_ask(self, field): return False # Override in subclasses if needed. - def mark_inactive(self, save=True): - ''' - When marking a password model inactive we'll clear sensitive fields - ''' - for sensitive_field in self.PASSWORD_FIELDS: - setattr(self, sensitive_field, "") - self.save() - super(PasswordFieldsModel, self).mark_inactive(save=save) - def save(self, *args, **kwargs): new_instance = not bool(self.pk) # If update_fields has been specified, add our field names to it, @@ -284,29 +269,9 @@ class PrimordialModel(CreatedModifiedModel): editable=False, on_delete=models.SET_NULL, ) - active = models.BooleanField( - default=True, - editable=False, - ) tags = TaggableManager(blank=True) - def mark_inactive(self, save=True, update_fields=None, skip_active_check=False): - '''Use instead of delete to rename and mark inactive.''' - update_fields = update_fields or [] - if skip_active_check or self.active: - dtnow = now() - if 'name' in self._meta.get_all_field_names(): - self.name = "_deleted_%s_%s" % (dtnow.isoformat(), self.name) - if 'name' not in update_fields: - update_fields.append('name') - self.active = False - if 'active' not in update_fields: - update_fields.append('active') - if save: - self.save(update_fields=update_fields) - return update_fields - def save(self, *args, **kwargs): update_fields = kwargs.get('update_fields', []) user = get_current_user() @@ -348,3 +313,26 @@ class CommonModelNameNotUnique(PrimordialModel): max_length=512, unique=False, ) + +class NotificationFieldsModel(BaseModel): + + class Meta: + abstract = True + + notification_templates_error = models.ManyToManyField( + "NotificationTemplate", + blank=True, + related_name='%(class)s_notification_templates_for_errors' + ) + + notification_templates_success = models.ManyToManyField( + "NotificationTemplate", + blank=True, + related_name='%(class)s_notification_templates_for_success' + ) + + notification_templates_any = models.ManyToManyField( + "NotificationTemplate", + blank=True, + related_name='%(class)s_notification_templates_for_any' + ) diff --git a/awx/main/models/configuration.py b/awx/main/models/configuration.py new file mode 100644 index 0000000000..208ccbd487 --- /dev/null +++ b/awx/main/models/configuration.py @@ -0,0 +1,84 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved. + +# Python +import json + +# Django +from django.db import models +from django.utils.encoding import force_text +from django.utils.translation import ugettext_lazy as _ + +# Tower +from awx.main.models.base import CreatedModifiedModel + + +class TowerSettings(CreatedModifiedModel): + + class Meta: + app_label = 'main' + + SETTINGS_TYPE_CHOICES = [ + ('string', _("String")), + ('int', _('Integer')), + ('float', _('Decimal')), + ('json', _('JSON')), + ('bool', _('Boolean')), + ('password', _('Password')), + ('list', _('List')) + ] + + key = models.CharField( + max_length=255, + unique=True + ) + description = models.TextField() + category = models.CharField(max_length=128) + value = models.TextField( + blank=True, + ) + value_type = models.CharField( + max_length=12, + choices=SETTINGS_TYPE_CHOICES + ) + user = models.ForeignKey( + 'auth.User', + related_name='settings', + default=None, + null=True, + editable=False, + ) + + @property + def value_converted(self): + if self.value_type == 'json': + converted_type = json.loads(self.value) + elif self.value_type == 'password': + converted_type = self.value + elif self.value_type == 'list': + if self.value: + converted_type = [x.strip() for x in self.value.split(',')] + else: + converted_type = [] + elif self.value_type == 'bool': + converted_type = force_text(self.value).lower() in ('true', 'yes', '1') + elif self.value_type == 'string': + converted_type = self.value + else: + t = __builtins__[self.value_type] + converted_type = t(self.value) + return converted_type + + @value_converted.setter + def value_converted(self, value): + if self.value_type == 'json': + self.value = json.dumps(value) + elif self.value_type == 'list': + try: + self.value = ','.join(map(force_text, value)) + except TypeError: + self.value = force_text(value) + elif self.value_type == 'bool': + self.value = force_text(bool(value)) + else: + self.value = force_text(value) diff --git a/awx/main/models/credential.py b/awx/main/models/credential.py index a1deb7053f..1bd11ec68e 100644 --- a/awx/main/models/credential.py +++ b/awx/main/models/credential.py @@ -1,25 +1,30 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. -# Python import base64 import re # Django from django.db import models from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError, NON_FIELD_ERRORS +from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse # AWX +from awx.main.fields import ImplicitRoleField from awx.main.constants import CLOUD_PROVIDERS from awx.main.utils import decrypt_field from awx.main.models.base import * # noqa +from awx.main.models.mixins import ResourceMixin +from awx.main.models.rbac import ( + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ROLE_SINGLETON_SYSTEM_AUDITOR, +) __all__ = ['Credential'] -class Credential(PasswordFieldsModel, CommonModelNameNotUnique): +class Credential(PasswordFieldsModel, CommonModelNameNotUnique, ResourceMixin): ''' A credential contains information about how to talk to a remote resource Usually this is a SSH key location, and possibly an unlock password. @@ -27,47 +32,59 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): ''' KIND_CHOICES = [ - ('ssh', _('Machine')), - ('scm', _('Source Control')), - ('aws', _('Amazon Web Services')), - ('rax', _('Rackspace')), + ('ssh', _('Machine')), + ('net', _('Network')), + ('scm', _('Source Control')), + ('aws', _('Amazon Web Services')), + ('rax', _('Rackspace')), ('vmware', _('VMware vCenter')), - ('gce', _('Google Compute Engine')), - ('azure', _('Microsoft Azure')), + ('satellite6', _('Red Hat Satellite 6')), + ('cloudforms', _('Red Hat CloudForms')), + ('gce', _('Google Compute Engine')), + ('azure', _('Microsoft Azure Classic (deprecated)')), + ('azure_rm', _('Microsoft Azure Resource Manager')), ('openstack', _('OpenStack')), ] BECOME_METHOD_CHOICES = [ - ('', _('None')), - ('sudo', _('Sudo')), - ('su', _('Su')), - ('pbrun', _('Pbrun')), + ('', _('None')), + ('sudo', _('Sudo')), + ('su', _('Su')), + ('pbrun', _('Pbrun')), ('pfexec', _('Pfexec')), #('runas', _('Runas')), ] PASSWORD_FIELDS = ('password', 'security_token', 'ssh_key_data', 'ssh_key_unlock', - 'become_password', 'vault_password') + 'become_password', 'vault_password', 'secret', 'authorize_password') class Meta: app_label = 'main' - unique_together = [('user', 'team', 'kind', 'name')] ordering = ('kind', 'name') + unique_together = (('organization', 'name', 'kind'),) - user = models.ForeignKey( + deprecated_user = models.ForeignKey( 'auth.User', null=True, default=None, blank=True, on_delete=models.CASCADE, - related_name='credentials', + related_name='deprecated_credentials', ) - team = models.ForeignKey( + deprecated_team = models.ForeignKey( 'Team', null=True, default=None, blank=True, on_delete=models.CASCADE, + related_name='deprecated_credentials', + ) + organization = models.ForeignKey( + 'Organization', + null=True, + default=None, + blank=True, + on_delete=models.CASCADE, related_name='credentials', ) kind = models.CharField( @@ -115,6 +132,13 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): verbose_name=_('Project'), help_text=_('The identifier for the project.'), ) + domain = models.CharField( + blank=True, + default='', + max_length=100, + verbose_name=_('Domain'), + help_text=_('The identifier for the domain.'), + ) ssh_key_data = models.TextField( blank=True, default='', @@ -154,6 +178,57 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): default='', help_text=_('Vault password (or "ASK" to prompt the user).'), ) + authorize = models.BooleanField( + default=False, + help_text=_('Whether to use the authorize mechanism.'), + ) + authorize_password = models.CharField( + max_length=1024, + blank=True, + default='', + help_text=_('Password used by the authorize mechanism.'), + ) + client = models.CharField( + max_length=128, + blank=True, + default='', + help_text=_('Client Id or Application Id for the credential'), + ) + secret = models.CharField( + max_length=1024, + blank=True, + default='', + help_text=_('Secret Token for this credential'), + ) + subscription = models.CharField( + max_length=1024, + blank=True, + default='', + help_text=_('Subscription identifier for this credential'), + ) + tenant = models.CharField( + max_length=1024, + blank=True, + default='', + help_text=_('Tenant identifier for this credential'), + ) + admin_role = ImplicitRoleField( + parent_role=[ + 'singleton:' + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ], + ) + use_role = ImplicitRoleField( + parent_role=[ + 'organization.admin_role', + 'admin_role', + ] + ) + read_role = ImplicitRoleField(parent_role=[ + 'singleton:' + ROLE_SINGLETON_SYSTEM_AUDITOR, + 'organization.auditor_role', + 'use_role', + 'admin_role', + ]) @property def needs_ssh_password(self): @@ -166,7 +241,7 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): else: ssh_key_data = self.ssh_key_data try: - key_data = self._validate_ssh_private_key(ssh_key_data) + key_data = validate_ssh_private_key(ssh_key_data) except ValidationError: return False else: @@ -208,6 +283,9 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): raise ValidationError('Host required for OpenStack credential.') return host + def clean_domain(self): + return self.domain or '' + def clean_username(self): username = self.username or '' if not username and self.kind == 'aws': @@ -239,128 +317,6 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): raise ValidationError('Project name required for OpenStack credential.') return project - def _validate_ssh_private_key(self, data): - """Validate that the given SSH private key or certificate is, - in fact, valid. - """ - # Map the X in BEGIN X PRIVATE KEY to the key type (ssh-keygen -t). - # Tower jobs using OPENSSH format private keys may still fail if the - # system SSH implementation lacks support for this format. - key_types = { - 'RSA': 'rsa', - 'DSA': 'dsa', - 'EC': 'ecdsa', - 'OPENSSH': 'ed25519', - '': 'rsa1', - } - # Key properties to return if valid. - key_data = { - 'key_type': None, # Key type (from above mapping). - 'key_seg': '', # Key segment (all text including begin/end). - 'key_b64': '', # Key data as base64. - 'key_bin': '', # Key data as binary. - 'key_enc': None, # Boolean, whether key is encrypted. - 'cert_seg': '', # Cert segment (all text including begin/end). - 'cert_b64': '', # Cert data as base64. - 'cert_bin': '', # Cert data as binary. - } - data = data.strip() - validation_error = ValidationError('Invalid private key') - - # Sanity check: We may potentially receive a full PEM certificate, - # and we want to accept these. - cert_begin_re = r'(-{4,})\s*BEGIN\s+CERTIFICATE\s*(-{4,})' - cert_end_re = r'(-{4,})\s*END\s+CERTIFICATE\s*(-{4,})' - cert_begin_match = re.search(cert_begin_re, data) - cert_end_match = re.search(cert_end_re, data) - if cert_begin_match and not cert_end_match: - raise validation_error - elif not cert_begin_match and cert_end_match: - raise validation_error - elif cert_begin_match and cert_end_match: - cert_dashes = set([cert_begin_match.groups()[0], cert_begin_match.groups()[1], - cert_end_match.groups()[0], cert_end_match.groups()[1]]) - if len(cert_dashes) != 1: - raise validation_error - key_data['cert_seg'] = data[cert_begin_match.start():cert_end_match.end()] - - # Find the private key, and also ensure that it internally matches - # itself. - # Set up the valid private key header and footer. - begin_re = r'(-{4,})\s*BEGIN\s+([A-Z0-9]+)?\s*PRIVATE\sKEY\s*(-{4,})' - end_re = r'(-{4,})\s*END\s+([A-Z0-9]+)?\s*PRIVATE\sKEY\s*(-{4,})' - begin_match = re.search(begin_re, data) - end_match = re.search(end_re, data) - if not begin_match or not end_match: - raise validation_error - - # Ensure that everything, such as dash counts and key type, lines up, - # and raise an error if it does not. - dashes = set([begin_match.groups()[0], begin_match.groups()[2], - end_match.groups()[0], end_match.groups()[2]]) - if len(dashes) != 1: - raise validation_error - if begin_match.groups()[1] != end_match.groups()[1]: - raise validation_error - key_type = begin_match.groups()[1] - try: - key_data['key_type'] = key_types[key_type] - except KeyError: - raise ValidationError('Invalid private key: unsupported type %s' % key_type) - - # The private key data begins and ends with the private key. - key_data['key_seg'] = data[begin_match.start():end_match.end()] - - # Establish that we are able to base64 decode the private key; - # if we can't, then it's not a valid key. - # - # If we got a certificate, validate that also, in the same way. - header_re = re.compile(r'^(.+?):\s*?(.+?)(\\??)$') - for segment_name in ('cert', 'key'): - segment_to_validate = key_data['%s_seg' % segment_name] - # If we have nothing; skip this one. - # We've already validated that we have a private key above, - # so we don't need to do it again. - if not segment_to_validate: - continue - - # Ensure that this segment is valid base64 data. - base64_data = '' - line_continues = False - lines = segment_to_validate.splitlines() - for line in lines[1:-1]: - line = line.strip() - if not line: - continue - if line_continues: - line_continues = line.endswith('\\') - continue - line_match = header_re.match(line) - if line_match: - line_continues = line.endswith('\\') - continue - base64_data += line - try: - decoded_data = base64.b64decode(base64_data) - if not decoded_data: - raise validation_error - key_data['%s_b64' % segment_name] = base64_data - key_data['%s_bin' % segment_name] = decoded_data - except TypeError: - raise validation_error - - # Determine if key is encrypted. - if key_data['key_type'] == 'ed25519': - # See https://github.com/openssh/openssh-portable/blob/master/sshkey.c#L3218 - # Decoded key data starts with magic string (null-terminated), four byte - # length field, followed by the ciphername -- if ciphername is anything - # other than 'none' the key is encrypted. - key_data['key_enc'] = not bool(key_data['key_bin'].startswith('openssh-key-v1\x00\x00\x00\x00\x04none')) - else: - key_data['key_enc'] = bool('ENCRYPTED' in key_data['key_seg']) - - return key_data - def clean_ssh_key_data(self): if self.pk: ssh_key_data = decrypt_field(self, 'ssh_key_data') @@ -380,66 +336,18 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): # Validate the private key to ensure that it looks like something # that we can accept. - self._validate_ssh_private_key(ssh_key_data) + validate_ssh_private_key(ssh_key_data) return self.ssh_key_data # No need to return decrypted version here. def clean_ssh_key_unlock(self): if self.has_encrypted_ssh_key_data and not self.ssh_key_unlock: raise ValidationError('SSH key unlock must be set when SSH key ' - 'is encrypted') + 'is encrypted.') return self.ssh_key_unlock def clean(self): - if self.user and self.team: - raise ValidationError('Credential cannot be assigned to both a user and team') - - def _validate_unique_together_with_null(self, unique_check, exclude=None): - # Based on existing Django model validation code, except it doesn't - # skip the check for unique violations when a field is None. See: - # https://github.com/django/django/blob/stable/1.5.x/django/db/models/base.py#L792 - errors = {} - model_class = self.__class__ - if set(exclude or []) & set(unique_check): - return - lookup_kwargs = {} - for field_name in unique_check: - f = self._meta.get_field(field_name) - lookup_value = getattr(self, f.attname) - if f.primary_key and not self._state.adding: - # no need to check for unique primary key when editing - continue - lookup_kwargs[str(field_name)] = lookup_value - if len(unique_check) != len(lookup_kwargs): - return - qs = model_class._default_manager.filter(**lookup_kwargs) - # Exclude the current object from the query if we are editing an - # instance (as opposed to creating a new one) - # Note that we need to use the pk as defined by model_class, not - # self.pk. These can be different fields because model inheritance - # allows single model to have effectively multiple primary keys. - # Refs #17615. - model_class_pk = self._get_pk_val(model_class._meta) - if not self._state.adding and model_class_pk is not None: - qs = qs.exclude(pk=model_class_pk) - if qs.exists(): - key = NON_FIELD_ERRORS - errors.setdefault(key, []).append(self.unique_error_message(model_class, unique_check)) - if errors: - raise ValidationError(errors) - - def validate_unique(self, exclude=None): - errors = {} - try: - super(Credential, self).validate_unique(exclude) - except ValidationError, e: - errors = e.update_error_dict(errors) - try: - unique_fields = ('user', 'team', 'kind', 'name') - self._validate_unique_together_with_null(unique_fields, exclude) - except ValidationError, e: - errors = e.update_error_dict(errors) - if errors: - raise ValidationError(errors) + if self.deprecated_user and self.deprecated_team: + raise ValidationError('Credential cannot be assigned to both a user and team.') def _password_field_allows_ask(self, field): return bool(self.kind == 'ssh' and field != 'ssh_key_data') @@ -453,17 +361,17 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): # changed. if self.pk: cred_before = Credential.objects.get(pk=self.pk) - if self.user and self.team: + if self.deprecated_user and self.deprecated_team: # If the user changed, remove the previously assigned team. if cred_before.user != self.user: - self.team = None - if 'team' not in update_fields: - update_fields.append('team') + self.deprecated_team = None + if 'deprecated_team' not in update_fields: + update_fields.append('deprecated_team') # If the team changed, remove the previously assigned user. - elif cred_before.team != self.team: - self.user = None - if 'user' not in update_fields: - update_fields.append('user') + elif cred_before.deprecated_team != self.deprecated_team: + self.deprecated_user = None + if 'deprecated_user' not in update_fields: + update_fields.append('deprecated_user') # Set cloud flag based on credential kind. cloud = self.kind in CLOUD_PROVIDERS + ('aws',) if self.cloud != cloud: @@ -471,3 +379,126 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique): if 'cloud' not in update_fields: update_fields.append('cloud') super(Credential, self).save(*args, **kwargs) + + +def validate_ssh_private_key(data): + """Validate that the given SSH private key or certificate is, + in fact, valid. + """ + # Map the X in BEGIN X PRIVATE KEY to the key type (ssh-keygen -t). + # Tower jobs using OPENSSH format private keys may still fail if the + # system SSH implementation lacks support for this format. + key_types = { + 'RSA': 'rsa', + 'DSA': 'dsa', + 'EC': 'ecdsa', + 'OPENSSH': 'ed25519', + '': 'rsa1', + } + # Key properties to return if valid. + key_data = { + 'key_type': None, # Key type (from above mapping). + 'key_seg': '', # Key segment (all text including begin/end). + 'key_b64': '', # Key data as base64. + 'key_bin': '', # Key data as binary. + 'key_enc': None, # Boolean, whether key is encrypted. + 'cert_seg': '', # Cert segment (all text including begin/end). + 'cert_b64': '', # Cert data as base64. + 'cert_bin': '', # Cert data as binary. + } + data = data.strip() + validation_error = ValidationError('Invalid private key.') + + # Sanity check: We may potentially receive a full PEM certificate, + # and we want to accept these. + cert_begin_re = r'(-{4,})\s*BEGIN\s+CERTIFICATE\s*(-{4,})' + cert_end_re = r'(-{4,})\s*END\s+CERTIFICATE\s*(-{4,})' + cert_begin_match = re.search(cert_begin_re, data) + cert_end_match = re.search(cert_end_re, data) + if cert_begin_match and not cert_end_match: + raise validation_error + elif not cert_begin_match and cert_end_match: + raise validation_error + elif cert_begin_match and cert_end_match: + cert_dashes = set([cert_begin_match.groups()[0], cert_begin_match.groups()[1], + cert_end_match.groups()[0], cert_end_match.groups()[1]]) + if len(cert_dashes) != 1: + raise validation_error + key_data['cert_seg'] = data[cert_begin_match.start():cert_end_match.end()] + + # Find the private key, and also ensure that it internally matches + # itself. + # Set up the valid private key header and footer. + begin_re = r'(-{4,})\s*BEGIN\s+([A-Z0-9]+)?\s*PRIVATE\sKEY\s*(-{4,})' + end_re = r'(-{4,})\s*END\s+([A-Z0-9]+)?\s*PRIVATE\sKEY\s*(-{4,})' + begin_match = re.search(begin_re, data) + end_match = re.search(end_re, data) + if not begin_match or not end_match: + raise validation_error + + # Ensure that everything, such as dash counts and key type, lines up, + # and raise an error if it does not. + dashes = set([begin_match.groups()[0], begin_match.groups()[2], + end_match.groups()[0], end_match.groups()[2]]) + if len(dashes) != 1: + raise validation_error + if begin_match.groups()[1] != end_match.groups()[1]: + raise validation_error + key_type = begin_match.groups()[1] or '' + try: + key_data['key_type'] = key_types[key_type] + except KeyError: + raise ValidationError('Invalid private key: unsupported type %s' % key_type) + + # The private key data begins and ends with the private key. + key_data['key_seg'] = data[begin_match.start():end_match.end()] + + # Establish that we are able to base64 decode the private key; + # if we can't, then it's not a valid key. + # + # If we got a certificate, validate that also, in the same way. + header_re = re.compile(r'^(.+?):\s*?(.+?)(\\??)$') + for segment_name in ('cert', 'key'): + segment_to_validate = key_data['%s_seg' % segment_name] + # If we have nothing; skip this one. + # We've already validated that we have a private key above, + # so we don't need to do it again. + if not segment_to_validate: + continue + + # Ensure that this segment is valid base64 data. + base64_data = '' + line_continues = False + lines = segment_to_validate.splitlines() + for line in lines[1:-1]: + line = line.strip() + if not line: + continue + if line_continues: + line_continues = line.endswith('\\') + continue + line_match = header_re.match(line) + if line_match: + line_continues = line.endswith('\\') + continue + base64_data += line + try: + decoded_data = base64.b64decode(base64_data) + if not decoded_data: + raise validation_error + key_data['%s_b64' % segment_name] = base64_data + key_data['%s_bin' % segment_name] = decoded_data + except TypeError: + raise validation_error + + # Determine if key is encrypted. + if key_data['key_type'] == 'ed25519': + # See https://github.com/openssh/openssh-portable/blob/master/sshkey.c#L3218 + # Decoded key data starts with magic string (null-terminated), four byte + # length field, followed by the ciphername -- if ciphername is anything + # other than 'none' the key is encrypted. + key_data['key_enc'] = not bool(key_data['key_bin'].startswith('openssh-key-v1\x00\x00\x00\x00\x04none')) + else: + key_data['key_enc'] = bool('ENCRYPTED' in key_data['key_seg']) + + return key_data diff --git a/awx/main/models/fact.py b/awx/main/models/fact.py new file mode 100644 index 0000000000..16a67eb45e --- /dev/null +++ b/awx/main/models/fact.py @@ -0,0 +1,64 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from jsonbfield.fields import JSONField + +__all__ = ('Fact', ) + +class Fact(models.Model): + """A model representing a fact returned from Ansible. + Facts are stored as JSON dictionaries. + """ + host = models.ForeignKey( + 'Host', + related_name='facts', + db_index=True, + on_delete=models.CASCADE, + help_text=_('Host for the facts that the fact scan captured.'), + ) + timestamp = models.DateTimeField( + default=None, + editable=False, + help_text=_('Date and time of the corresponding fact scan gathering time.') + ) + module = models.CharField(max_length=128) + facts = JSONField(blank=True, default={}, help_text=_('Arbitrary JSON structure of module facts captured at timestamp for a single host.')) + + class Meta: + app_label = 'main' + index_together = [ + ["timestamp", "module", "host"], + ] + + @staticmethod + def get_host_fact(host_id, module, timestamp): + qs = Fact.objects.filter(host__id=host_id, module=module, timestamp__lte=timestamp).order_by('-timestamp') + if qs: + return qs[0] + else: + return None + + @staticmethod + def get_timeline(host_id, module=None, ts_from=None, ts_to=None): + kwargs = { + 'host__id': host_id, + } + if module: + kwargs['module'] = module + if ts_from and ts_to and ts_from == ts_to: + kwargs['timestamp'] = ts_from + else: + if ts_from: + kwargs['timestamp__gt'] = ts_from + if ts_to: + kwargs['timestamp__lte'] = ts_to + return Fact.objects.filter(**kwargs).order_by('-timestamp').only('timestamp', 'module').order_by('-timestamp', 'module') + + @staticmethod + def add_fact(host_id, module, timestamp, facts): + fact_obj = Fact.objects.create(host_id=host_id, module=module, timestamp=timestamp, facts=facts) + fact_obj.save() + return fact_obj diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 58875a9630..8dde9f3b3b 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -6,6 +6,7 @@ import datetime import logging import re import copy +from urlparse import urljoin # Django from django.conf import settings @@ -18,19 +19,22 @@ from django.utils.timezone import now # AWX from awx.main.constants import CLOUD_PROVIDERS -from awx.main.fields import AutoOneToOneField +from awx.main.fields import AutoOneToOneField, ImplicitRoleField from awx.main.managers import HostManager from awx.main.models.base import * # noqa from awx.main.models.jobs import Job from awx.main.models.unified_jobs import * # noqa -from awx.main.utils import ignore_inventory_computed_fields, _inventory_updates +from awx.main.models.mixins import ResourceMixin +from awx.main.models.notifications import NotificationTemplate +from awx.main.utils import _inventory_updates +from awx.main.conf import tower_settings __all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'CustomInventoryScript'] logger = logging.getLogger('awx.main.models.inventory') -class Inventory(CommonModel): +class Inventory(CommonModel, ResourceMixin): ''' an inventory source contains lists and hosts. ''' @@ -92,34 +96,37 @@ class Inventory(CommonModel): editable=False, help_text=_('Number of external inventory sources in this inventory with failures.'), ) + admin_role = ImplicitRoleField( + parent_role='organization.admin_role', + ) + update_role = ImplicitRoleField( + parent_role='admin_role', + ) + adhoc_role = ImplicitRoleField( + parent_role='admin_role', + ) + use_role = ImplicitRoleField( + parent_role='adhoc_role', + ) + read_role = ImplicitRoleField(parent_role=[ + 'organization.auditor_role', + 'update_role', + 'use_role', + 'admin_role', + ]) def get_absolute_url(self): return reverse('api:inventory_detail', args=(self.pk,)) - def mark_inactive(self, save=True): - ''' - When marking inventory inactive, also mark hosts and groups inactive. - ''' - with ignore_inventory_computed_fields(): - for host in self.hosts.filter(active=True): - host.mark_inactive() - for group in self.groups.filter(active=True): - group.mark_inactive(recompute=False) - for inventory_source in self.inventory_sources.filter(active=True): - inventory_source.mark_inactive() - super(Inventory, self).mark_inactive(save=save) variables_dict = VarsDictProperty('variables') - def get_group_hosts_map(self, active=None): + def get_group_hosts_map(self): ''' Return dictionary mapping group_id to set of child host_id's. ''' # FIXME: Cache this mapping? group_hosts_kw = dict(group__inventory_id=self.pk, host__inventory_id=self.pk) - if active is not None: - group_hosts_kw['group__active'] = active - group_hosts_kw['host__active'] = active group_hosts_qs = Group.hosts.through.objects.filter(**group_hosts_kw) group_hosts_qs = group_hosts_qs.values_list('group_id', 'host_id') group_hosts_map = {} @@ -128,15 +135,12 @@ class Inventory(CommonModel): group_host_ids.add(host_id) return group_hosts_map - def get_group_parents_map(self, active=None): + def get_group_parents_map(self): ''' Return dictionary mapping group_id to set of parent group_id's. ''' # FIXME: Cache this mapping? group_parents_kw = dict(from_group__inventory_id=self.pk, to_group__inventory_id=self.pk) - if active is not None: - group_parents_kw['from_group__active'] = active - group_parents_kw['to_group__active'] = active group_parents_qs = Group.parents.through.objects.filter(**group_parents_kw) group_parents_qs = group_parents_qs.values_list('from_group_id', 'to_group_id') group_parents_map = {} @@ -145,15 +149,12 @@ class Inventory(CommonModel): group_parents.add(to_group_id) return group_parents_map - def get_group_children_map(self, active=None): + def get_group_children_map(self): ''' Return dictionary mapping group_id to set of child group_id's. ''' # FIXME: Cache this mapping? group_parents_kw = dict(from_group__inventory_id=self.pk, to_group__inventory_id=self.pk) - if active is not None: - group_parents_kw['from_group__active'] = active - group_parents_kw['to_group__active'] = active group_parents_qs = Group.parents.through.objects.filter(**group_parents_kw) group_parents_qs = group_parents_qs.values_list('from_group_id', 'to_group_id') group_children_map = {} @@ -164,12 +165,12 @@ class Inventory(CommonModel): def update_host_computed_fields(self): ''' - Update computed fields for all active hosts in this inventory. + Update computed fields for all hosts in this inventory. ''' hosts_to_update = {} - hosts_qs = self.hosts.filter(active=True) + hosts_qs = self.hosts # Define queryset of all hosts with active failures. - hosts_with_active_failures = hosts_qs.filter(last_job_host_summary__isnull=False, last_job_host_summary__job__active=True, last_job_host_summary__failed=True).values_list('pk', flat=True) + hosts_with_active_failures = hosts_qs.filter(last_job_host_summary__isnull=False, last_job_host_summary__failed=True).values_list('pk', flat=True) # Find all hosts that need the has_active_failures flag set. hosts_to_set = hosts_qs.filter(has_active_failures=False, pk__in=hosts_with_active_failures) for host_pk in hosts_to_set.values_list('pk', flat=True): @@ -181,7 +182,7 @@ class Inventory(CommonModel): host_updates = hosts_to_update.setdefault(host_pk, {}) host_updates['has_active_failures'] = False # Define queryset of all hosts with cloud inventory sources. - hosts_with_cloud_inventory = hosts_qs.filter(inventory_sources__active=True, inventory_sources__source__in=CLOUD_INVENTORY_SOURCES).values_list('pk', flat=True) + hosts_with_cloud_inventory = hosts_qs.filter(inventory_sources__source__in=CLOUD_INVENTORY_SOURCES).values_list('pk', flat=True) # Find all hosts that need the has_inventory_sources flag set. hosts_to_set = hosts_qs.filter(has_inventory_sources=False, pk__in=hosts_with_cloud_inventory) for host_pk in hosts_to_set.values_list('pk', flat=True): @@ -206,13 +207,13 @@ class Inventory(CommonModel): ''' Update computed fields for all active groups in this inventory. ''' - group_children_map = self.get_group_children_map(active=True) - group_hosts_map = self.get_group_hosts_map(active=True) - active_host_pks = set(self.hosts.filter(active=True).values_list('pk', flat=True)) - failed_host_pks = set(self.hosts.filter(active=True, last_job_host_summary__job__active=True, last_job_host_summary__failed=True).values_list('pk', flat=True)) - # active_group_pks = set(self.groups.filter(active=True).values_list('pk', flat=True)) + group_children_map = self.get_group_children_map() + group_hosts_map = self.get_group_hosts_map() + active_host_pks = set(self.hosts.values_list('pk', flat=True)) + failed_host_pks = set(self.hosts.filter(last_job_host_summary__failed=True).values_list('pk', flat=True)) + # active_group_pks = set(self.groups.values_list('pk', flat=True)) failed_group_pks = set() # Update below as we check each group. - groups_with_cloud_pks = set(self.groups.filter(active=True, inventory_sources__active=True, inventory_sources__source__in=CLOUD_INVENTORY_SOURCES).values_list('pk', flat=True)) + groups_with_cloud_pks = set(self.groups.filter(inventory_sources__source__in=CLOUD_INVENTORY_SOURCES).values_list('pk', flat=True)) groups_to_update = {} # Build list of group pks to check, starting with the groups at the @@ -284,11 +285,11 @@ class Inventory(CommonModel): self.update_host_computed_fields() if update_groups: self.update_group_computed_fields() - active_hosts = self.hosts.filter(active=True) + active_hosts = self.hosts failed_hosts = active_hosts.filter(has_active_failures=True) - active_groups = self.groups.filter(active=True) + active_groups = self.groups failed_groups = active_groups.filter(has_active_failures=True) - active_inventory_sources = self.inventory_sources.filter(active=True, source__in=CLOUD_INVENTORY_SOURCES) + active_inventory_sources = self.inventory_sources.filter( source__in=CLOUD_INVENTORY_SOURCES) failed_inventory_sources = active_inventory_sources.filter(last_job_failed=True) computed_fields = { 'has_active_failures': bool(failed_hosts.count()), @@ -325,7 +326,7 @@ class Host(CommonModelNameNotUnique): class Meta: app_label = 'main' unique_together = (("name", "inventory"),) # FIXME: Add ('instance_id', 'inventory') after migration. - ordering = ('inventory', 'name') + ordering = ('name',) inventory = models.ForeignKey( 'Inventory', @@ -337,7 +338,7 @@ class Host(CommonModelNameNotUnique): help_text=_('Is this host online and available for running jobs?'), ) instance_id = models.CharField( - max_length=100, + max_length=1024, blank=True, default='', ) @@ -388,24 +389,13 @@ class Host(CommonModelNameNotUnique): def get_absolute_url(self): return reverse('api:host_detail', args=(self.pk,)) - def mark_inactive(self, save=True, from_inventory_import=False, skip_active_check=False): - ''' - When marking hosts inactive, remove all associations to related - inventory sources. - ''' - super(Host, self).mark_inactive(save=save, skip_active_check=skip_active_check) - if not from_inventory_import: - self.inventory_sources.clear() - def update_computed_fields(self, update_inventory=True, update_groups=True): ''' Update model fields that are computed from database relationships. ''' has_active_failures = bool(self.last_job_host_summary and - self.last_job_host_summary.job.active and self.last_job_host_summary.failed) - active_inventory_sources = self.inventory_sources.filter(active=True, - source__in=CLOUD_INVENTORY_SOURCES) + active_inventory_sources = self.inventory_sources.filter(source__in=CLOUD_INVENTORY_SOURCES) computed_fields = { 'has_active_failures': has_active_failures, 'has_inventory_sources': bool(active_inventory_sources.count()), @@ -421,7 +411,7 @@ class Host(CommonModelNameNotUnique): # change. # NOTE: I think this is no longer needed # if update_groups: - # for group in self.all_groups.filter(active=True): + # for group in self.all_groups: # group.update_computed_fields() # if update_inventory: # self.inventory.update_computed_fields(update_groups=False, @@ -531,15 +521,16 @@ class Group(CommonModelNameNotUnique): return reverse('api:group_detail', args=(self.pk,)) @transaction.atomic - def mark_inactive_recursive(self): - from awx.main.tasks import bulk_inventory_element_delete + def delete_recursive(self): from awx.main.utils import ignore_inventory_computed_fields - from awx.main.signals import disable_activity_stream + from awx.main.tasks import update_inventory_computed_fields + from awx.main.signals import disable_activity_stream, activity_stream_delete + def mark_actual(): all_group_hosts = Group.hosts.through.objects.select_related("host", "group").filter(group__inventory=self.inventory) group_hosts = {'groups': {}, 'hosts': {}} - all_group_parents = Group.parents.through.objects.select_related("parent", "group").filter(from_group__inventory=self.inventory) + all_group_parents = Group.parents.through.objects.select_related("from_group", "to_group").filter(from_group__inventory=self.inventory) group_children = {} group_parents = {} marked_hosts = [] @@ -585,51 +576,24 @@ class Group(CommonModelNameNotUnique): for direct_child in group_children[group]: linked_children.append((group, direct_child)) marked_groups.append(group) - Group.objects.filter(id__in=marked_groups).update(active=False) - Host.objects.filter(id__in=marked_hosts).update(active=False) - Group.parents.through.objects.filter(to_group__id__in=marked_groups) - Group.hosts.through.objects.filter(group__id__in=marked_groups) - Group.inventory_sources.through.objects.filter(group__id__in=marked_groups).delete() - bulk_inventory_element_delete.delay(self.inventory.id, groups=marked_groups, hosts=marked_hosts) + Group.objects.filter(id__in=marked_groups).delete() + Host.objects.filter(id__in=marked_hosts).delete() + update_inventory_computed_fields.delay(self.inventory.id) with ignore_inventory_computed_fields(): with disable_activity_stream(): mark_actual() - - def mark_inactive(self, save=True, recompute=True, from_inventory_import=False, skip_active_check=False): - ''' - When marking groups inactive, remove all associations to related - groups/hosts/inventory_sources. - ''' - def mark_actual(): - super(Group, self).mark_inactive(save=save, skip_active_check=skip_active_check) - self.inventory_source.mark_inactive(save=save) - self.inventory_sources.clear() - self.parents.clear() - self.children.clear() - self.hosts.clear() - i = self.inventory - - if from_inventory_import: - super(Group, self).mark_inactive(save=save, skip_active_check=skip_active_check) - elif recompute: - with ignore_inventory_computed_fields(): - mark_actual() - i.update_computed_fields() - else: - mark_actual() + activity_stream_delete(None, self) def update_computed_fields(self): ''' Update model fields that are computed from database relationships. ''' - active_hosts = self.all_hosts.filter(active=True) - failed_hosts = active_hosts.filter(last_job_host_summary__job__active=True, - last_job_host_summary__failed=True) - active_groups = self.all_children.filter(active=True) + active_hosts = self.all_hosts + failed_hosts = active_hosts.filter(last_job_host_summary__failed=True) + active_groups = self.all_children # FIXME: May not be accurate unless we always update groups depth-first. failed_groups = active_groups.filter(has_active_failures=True) - active_inventory_sources = self.inventory_sources.filter(active=True, - source__in=CLOUD_INVENTORY_SOURCES) + active_inventory_sources = self.inventory_sources.filter(source__in=CLOUD_INVENTORY_SOURCES) computed_fields = { 'total_hosts': active_hosts.count(), 'has_active_failures': bool(failed_hosts.count()), @@ -737,13 +701,16 @@ class InventorySourceOptions(BaseModel): ''' SOURCE_CHOICES = [ - ('', _('Manual')), - ('file', _('Local File, Directory or Script')), - ('rax', _('Rackspace Cloud Servers')), - ('ec2', _('Amazon EC2')), - ('gce', _('Google Compute Engine')), - ('azure', _('Microsoft Azure')), + ('', _('Manual')), + ('file', _('Local File, Directory or Script')), + ('rax', _('Rackspace Cloud Servers')), + ('ec2', _('Amazon EC2')), + ('gce', _('Google Compute Engine')), + ('azure', _('Microsoft Azure Classic (deprecated)')), + ('azure_rm', _('Microsoft Azure Resource Manager')), ('vmware', _('VMware vCenter')), + ('satellite6', _('Red Hat Satellite 6')), + ('cloudforms', _('Red Hat CloudForms')), ('openstack', _('OpenStack')), ('custom', _('Custom Script')), ] @@ -961,6 +928,10 @@ class InventorySourceOptions(BaseModel): regions.insert(0, ('all', 'All')) return regions + @classmethod + def get_azure_rm_region_choices(self): + return InventorySourceOptions.get_azure_region_choices() + @classmethod def get_vmware_region_choices(self): """Return a complete list of regions in VMware, as a list of two-tuples @@ -973,6 +944,16 @@ class InventorySourceOptions(BaseModel): """I don't think openstack has regions""" return [('all', 'All')] + @classmethod + def get_satellite6_region_choices(self): + """Red Hat Satellite 6 region choices (not implemented)""" + return [('all', 'All')] + + @classmethod + def get_cloudforms_region_choices(self): + """Red Hat CloudForms region choices (not implemented)""" + return [('all', 'All')] + def clean_credential(self): if not self.source: return None @@ -990,7 +971,7 @@ class InventorySourceOptions(BaseModel): # an EC2 instance with an IAM Role assigned, boto will use credentials # from the instance metadata instead of those explicitly provided. elif self.source in CLOUD_PROVIDERS and self.source != 'ec2': - raise ValidationError('Credential is required for a cloud source') + raise ValidationError('Credential is required for a cloud source.') return cred def clean_source_regions(self): @@ -1147,7 +1128,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): return 'never updated' # inherit the child job status else: - return self.last_job.status + return self.last_job.status else: return 'none' @@ -1156,7 +1137,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): def _can_update(self): if self.source == 'custom': - return bool(self.source_script and self.source_script.active) + return bool(self.source_script) else: return bool(self.source in CLOUD_INVENTORY_SOURCES) @@ -1173,17 +1154,37 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): @property def needs_update_on_launch(self): - if self.active and self.source and self.update_on_launch: + if self.source and self.update_on_launch: if not self.last_job_run: return True if (self.last_job_run + datetime.timedelta(seconds=self.update_cache_timeout)) <= now(): return True return False + @property + def notification_templates(self): + base_notification_templates = NotificationTemplate.objects + error_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_errors__in=[self])) + success_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_success__in=[self])) + any_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_any__in=[self])) + if self.inventory.organization is not None: + error_notification_templates = set(error_notification_templates + list(base_notification_templates + .filter(organization_notification_templates_for_errors=self.inventory.organization))) + success_notification_templates = set(success_notification_templates + list(base_notification_templates + .filter(organization_notification_templates_for_success=self.inventory.organization))) + any_notification_templates = set(any_notification_templates + list(base_notification_templates + .filter(organization_notification_templates_for_any=self.inventory.organization))) + return dict(error=list(error_notification_templates), + success=list(success_notification_templates), + any=list(any_notification_templates)) + def clean_source(self): source = self.source if source and self.group: - qs = self.group.inventory_sources.filter(source__in=CLOUD_INVENTORY_SOURCES, active=True, group__active=True) + qs = self.group.inventory_sources.filter(source__in=CLOUD_INVENTORY_SOURCES) existing_sources = qs.exclude(pk=self.pk) if existing_sources.count(): s = u', '.join([x.group.name for x in existing_sources]) @@ -1227,7 +1228,7 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions): def save(self, *args, **kwargs): update_fields = kwargs.get('update_fields', []) inventory_source = self.inventory_source - if self.active and inventory_source.inventory and self.name == inventory_source.name: + if inventory_source.inventory and self.name == inventory_source.name: if inventory_source.group: self.name = '%s (%s)' % (inventory_source.group.name, inventory_source.inventory.name) else: @@ -1239,6 +1240,9 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions): def get_absolute_url(self): return reverse('api:inventory_update_detail', args=(self.pk,)) + def get_ui_url(self): + return urljoin(tower_settings.TOWER_URL_BASE, "/#/inventory_sync/{}".format(self.pk)) + def is_blocked_by(self, obj): if type(obj) == InventoryUpdate: if self.inventory_source.inventory == obj.inventory_source.inventory: @@ -1260,12 +1264,12 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions): return False if (self.source not in ('custom', 'ec2') and - not (self.credential and self.credential.active)): + not (self.credential)): return False return True -class CustomInventoryScript(CommonModelNameNotUnique): +class CustomInventoryScript(CommonModelNameNotUnique, ResourceMixin): class Meta: app_label = 'main' @@ -1286,6 +1290,13 @@ class CustomInventoryScript(CommonModelNameNotUnique): on_delete=models.SET_NULL, ) + admin_role = ImplicitRoleField( + parent_role='organization.admin_role', + ) + read_role = ImplicitRoleField( + parent_role=['organization.auditor_role', 'organization.member_role', 'admin_role'], + ) + def get_absolute_url(self): return reverse('api:inventory_script_detail', args=(self.pk,)) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 51f577bac5..ac67bf8d67 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -6,6 +6,7 @@ import hmac import json import yaml import logging +from urlparse import urljoin # Django from django.conf import settings @@ -22,9 +23,14 @@ from jsonfield import JSONField from awx.main.constants import CLOUD_PROVIDERS from awx.main.models.base import * # noqa from awx.main.models.unified_jobs import * # noqa +from awx.main.models.notifications import NotificationTemplate from awx.main.utils import decrypt_field, ignore_inventory_computed_fields from awx.main.utils import emit_websocket_notification -from awx.main.redact import PlainTextCleaner +from awx.main.redact import PlainTextCleaner, REPLACE_STR +from awx.main.conf import tower_settings +from awx.main.fields import ImplicitRoleField +from awx.main.models.mixins import ResourceMixin + logger = logging.getLogger('awx.main.models.jobs') @@ -47,7 +53,9 @@ class JobOptions(BaseModel): inventory = models.ForeignKey( 'Inventory', related_name='%(class)ss', + blank=True, null=True, + default=None, on_delete=models.SET_NULL, ) project = models.ForeignKey( @@ -79,6 +87,14 @@ class JobOptions(BaseModel): default=None, on_delete=models.SET_NULL, ) + network_credential = models.ForeignKey( + 'Credential', + related_name='%(class)ss_as_network_credential+', + blank=True, + null=True, + default=None, + on_delete=models.SET_NULL, + ) forks = models.PositiveIntegerField( blank=True, default=0, @@ -120,7 +136,6 @@ class JobOptions(BaseModel): default=False, ) - extra_vars_dict = VarsDictProperty('extra_vars', True) def clean_credential(self): @@ -131,6 +146,14 @@ class JobOptions(BaseModel): ) return cred + def clean_network_credential(self): + cred = self.network_credential + if cred and cred.kind != 'net': + raise ValidationError( + 'You must provide a network credential.', + ) + return cred + def clean_cloud_credential(self): cred = self.cloud_credential if cred and cred.kind not in CLOUD_PROVIDERS + ('aws',): @@ -143,12 +166,12 @@ class JobOptions(BaseModel): @property def passwords_needed_to_start(self): '''Return list of password field names needed to start the job.''' - if self.credential and self.credential.active: + if self.credential: return self.credential.passwords_needed else: return [] -class JobTemplate(UnifiedJobTemplate, JobOptions): +class JobTemplate(UnifiedJobTemplate, JobOptions, ResourceMixin): ''' A job template is a reusable job definition for applying a project (with playbook) to an inventory source with a given credential. @@ -168,6 +191,26 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): blank=True, default=False, ) + ask_limit_on_launch = models.BooleanField( + blank=True, + default=False, + ) + ask_tags_on_launch = models.BooleanField( + blank=True, + default=False, + ) + ask_job_type_on_launch = models.BooleanField( + blank=True, + default=False, + ) + ask_inventory_on_launch = models.BooleanField( + blank=True, + default=False, + ) + ask_credential_on_launch = models.BooleanField( + blank=True, + default=False, + ) survey_enabled = models.BooleanField( default=False, @@ -177,6 +220,19 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): blank=True, default={}, ) + admin_role = ImplicitRoleField( + parent_role=['project.organization.admin_role', 'inventory.organization.admin_role'] + ) + execute_role = ImplicitRoleField( + parent_role=['admin_role'], + ) + read_role = ImplicitRoleField( + parent_role=['project.organization.auditor_role', 'inventory.organization.auditor_role', 'execute_role', 'admin_role'], + ) + allow_simultaneous = models.BooleanField( + default=False, + ) + @classmethod def _get_unified_job_class(cls): @@ -185,9 +241,42 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): @classmethod def _get_unified_job_field_names(cls): return ['name', 'description', 'job_type', 'inventory', 'project', - 'playbook', 'credential', 'cloud_credential', 'forks', 'schedule', + 'playbook', 'credential', 'cloud_credential', 'network_credential', 'forks', 'schedule', 'limit', 'verbosity', 'job_tags', 'extra_vars', 'launch_type', - 'force_handlers', 'skip_tags', 'start_at_task', 'become_enabled'] + 'force_handlers', 'skip_tags', 'start_at_task', 'become_enabled', + 'labels',] + + def resource_validation_data(self): + ''' + Process consistency errors and need-for-launch related fields. + ''' + resources_needed_to_start = [] + validation_errors = {} + + # Inventory and Credential related checks + if self.inventory is None: + resources_needed_to_start.append('inventory') + if not self.ask_inventory_on_launch: + validation_errors['inventory'] = ["Job Template must provide 'inventory' or allow prompting for it.",] + if self.credential is None: + resources_needed_to_start.append('credential') + if not self.ask_credential_on_launch: + validation_errors['credential'] = ["Job Template must provide 'credential' or allow prompting for it.",] + + # Job type dependent checks + if self.job_type == 'scan': + if self.inventory is None or self.ask_inventory_on_launch: + validation_errors['inventory'] = ["Scan jobs must be assigned a fixed inventory.",] + elif self.project is None: + resources_needed_to_start.append('project') + validation_errors['project'] = ["Job types 'run' and 'check' must have assigned a project.",] + + return (validation_errors, resources_needed_to_start) + + @property + def resources_needed_to_start(self): + validation_errors, resources_needed_to_start = self.resource_validation_data() + return resources_needed_to_start def create_job(self, **kwargs): ''' @@ -203,7 +292,13 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): Return whether job template can be used to start a new job without requiring any user input. ''' - return bool(self.credential and not len(self.passwords_needed_to_start) and not len(self.variables_needed_to_start)) + prompting_needed = False + for value in self._ask_for_vars_dict().values(): + if value: + prompting_needed = True + return (not prompting_needed and + not self.passwords_needed_to_start and + not self.variables_needed_to_start) @property def variables_needed_to_start(self): @@ -228,60 +323,60 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): if not self.survey_enabled: return errors if 'name' not in self.survey_spec: - errors.append("'name' missing from survey spec") + errors.append("'name' missing from survey spec.") if 'description' not in self.survey_spec: - errors.append("'description' missing from survey spec") + errors.append("'description' missing from survey spec.") for survey_element in self.survey_spec.get("spec", []): if survey_element['variable'] not in data and \ survey_element['required']: errors.append("'%s' value missing" % survey_element['variable']) elif survey_element['type'] in ["textarea", "text", "password"]: if survey_element['variable'] in data: - if 'min' in survey_element and survey_element['min'] not in ["", None] and len(data[survey_element['variable']]) < survey_element['min']: - errors.append("'%s' value %s is too small (must be at least %s)" % - (survey_element['variable'], data[survey_element['variable']], survey_element['min'])) - if 'max' in survey_element and survey_element['max'] not in ["", None] and len(data[survey_element['variable']]) > survey_element['max']: - errors.append("'%s' value %s is too large (must be no more than %s)" % + if 'min' in survey_element and survey_element['min'] not in ["", None] and len(data[survey_element['variable']]) < int(survey_element['min']): + errors.append("'%s' value %s is too small (length is %s must be at least %s)." % + (survey_element['variable'], data[survey_element['variable']], len(data[survey_element['variable']]), survey_element['min'])) + if 'max' in survey_element and survey_element['max'] not in ["", None] and len(data[survey_element['variable']]) > int(survey_element['max']): + errors.append("'%s' value %s is too large (must be no more than %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['max'])) elif survey_element['type'] == 'integer': if survey_element['variable'] in data: if 'min' in survey_element and survey_element['min'] not in ["", None] and survey_element['variable'] in data and \ - data[survey_element['variable']] < survey_element['min']: - errors.append("'%s' value %s is too small (must be at least %s)" % + data[survey_element['variable']] < int(survey_element['min']): + errors.append("'%s' value %s is too small (must be at least %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['min'])) if 'max' in survey_element and survey_element['max'] not in ["", None] and survey_element['variable'] in data and \ - data[survey_element['variable']] > survey_element['max']: - errors.append("'%s' value %s is too large (must be no more than %s)" % + data[survey_element['variable']] > int(survey_element['max']): + errors.append("'%s' value %s is too large (must be no more than %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['max'])) if type(data[survey_element['variable']]) != int: - errors.append("Value %s for %s expected to be an integer" % (data[survey_element['variable']], - survey_element['variable'])) + errors.append("Value %s for '%s' expected to be an integer." % (data[survey_element['variable']], + survey_element['variable'])) elif survey_element['type'] == 'float': if survey_element['variable'] in data: - if 'min' in survey_element and survey_element['min'] not in ["", None] and data[survey_element['variable']] < survey_element['min']: - errors.append("'%s' value %s is too small (must be at least %s)" % + if 'min' in survey_element and survey_element['min'] not in ["", None] and data[survey_element['variable']] < float(survey_element['min']): + errors.append("'%s' value %s is too small (must be at least %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['min'])) - if 'max' in survey_element and survey_element['max'] not in ["", None] and data[survey_element['variable']] > survey_element['max']: - errors.append("'%s' value %s is too large (must be no more than %s)" % + if 'max' in survey_element and survey_element['max'] not in ["", None] and data[survey_element['variable']] > float(survey_element['max']): + errors.append("'%s' value %s is too large (must be no more than %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['max'])) if type(data[survey_element['variable']]) not in (float, int): - errors.append("Value %s for %s expected to be a numeric type" % (data[survey_element['variable']], - survey_element['variable'])) + errors.append("Value %s for '%s' expected to be a numeric type." % (data[survey_element['variable']], + survey_element['variable'])) elif survey_element['type'] == 'multiselect': if survey_element['variable'] in data: if type(data[survey_element['variable']]) != list: - errors.append("'%s' value is expected to be a list" % survey_element['variable']) + errors.append("'%s' value is expected to be a list." % survey_element['variable']) else: for val in data[survey_element['variable']]: if val not in survey_element['choices']: - errors.append("Value %s for %s expected to be one of %s" % (val, survey_element['variable'], - survey_element['choices'])) + errors.append("Value %s for '%s' expected to be one of %s." % (val, survey_element['variable'], + survey_element['choices'])) elif survey_element['type'] == 'multiplechoice': if survey_element['variable'] in data: if data[survey_element['variable']] not in survey_element['choices']: - errors.append("Value %s for %s expected to be one of %s" % (data[survey_element['variable']], - survey_element['variable'], - survey_element['choices'])) + errors.append("Value %s for '%s' expected to be one of %s." % (data[survey_element['variable']], + survey_element['variable'], + survey_element['choices'])) return errors def _update_unified_job_kwargs(self, **kwargs): @@ -306,7 +401,7 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): except Exception: try: kwargs_extra_vars = yaml.safe_load(kwargs_extra_vars) - assert type(kwargs_extra_vars) is dict + assert isinstance(kwargs_extra_vars, dict) except: kwargs_extra_vars = {} else: @@ -318,17 +413,76 @@ class JobTemplate(UnifiedJobTemplate, JobOptions): kwargs['extra_vars'] = json.dumps(extra_vars) return kwargs + def _ask_for_vars_dict(self): + return dict( + extra_vars=self.ask_variables_on_launch, + limit=self.ask_limit_on_launch, + job_tags=self.ask_tags_on_launch, + skip_tags=self.ask_tags_on_launch, + job_type=self.ask_job_type_on_launch, + inventory=self.ask_inventory_on_launch, + credential=self.ask_credential_on_launch + ) + + def _accept_or_ignore_job_kwargs(self, **kwargs): + # Sort the runtime fields allowed and disallowed by job template + ignored_fields = {} + prompted_fields = {} + + ask_for_vars_dict = self._ask_for_vars_dict() + + for field in ask_for_vars_dict: + if field in kwargs: + if field == 'extra_vars': + prompted_fields[field] = {} + ignored_fields[field] = {} + if ask_for_vars_dict[field]: + prompted_fields[field] = kwargs[field] + else: + if field == 'extra_vars' and self.survey_enabled and self.survey_spec: + # Accept vars defined in the survey and no others + survey_vars = [question['variable'] for question in self.survey_spec.get('spec', [])] + for key in kwargs[field]: + if key in survey_vars: + prompted_fields[field][key] = kwargs[field][key] + else: + ignored_fields[field][key] = kwargs[field][key] + else: + ignored_fields[field] = kwargs[field] + + # Special case to ignore inventory if it is a scan job + if prompted_fields.get('job_type', None) == 'scan' or self.job_type == 'scan': + if 'inventory' in prompted_fields: + ignored_fields['inventory'] = prompted_fields.pop('inventory') + + return prompted_fields, ignored_fields + @property def cache_timeout_blocked(self): - if Job.objects.filter(job_template=self, status__in=['pending', 'waiting', 'running']).count() > getattr(settings, 'SCHEDULE_MAX_JOBS', 10): + if Job.objects.filter(job_template=self, status__in=['pending', 'waiting', 'running']).count() > getattr(tower_settings, 'SCHEDULE_MAX_JOBS', 10): logger.error("Job template %s could not be started because there are more than %s other jobs from that template waiting to run" % - (self.name, getattr(settings, 'SCHEDULE_MAX_JOBS', 10))) + (self.name, getattr(tower_settings, 'SCHEDULE_MAX_JOBS', 10))) return True return False def _can_update(self): return self.can_start_without_user_input() + @property + def notification_templates(self): + # Return all notification_templates defined on the Job Template, on the Project, and on the Organization for each trigger type + # TODO: Currently there is no org fk on project so this will need to be added once that is + # available after the rbac pr + base_notification_templates = NotificationTemplate.objects + error_notification_templates = list(base_notification_templates.filter(unifiedjobtemplate_notification_templates_for_errors__in=[self, self.project])) + success_notification_templates = list(base_notification_templates.filter(unifiedjobtemplate_notification_templates_for_success__in=[self, self.project])) + any_notification_templates = list(base_notification_templates.filter(unifiedjobtemplate_notification_templates_for_any__in=[self, self.project])) + # Get Organization NotificationTemplates + if self.project is not None and self.project.organization is not None: + error_notification_templates = set(error_notification_templates + list(base_notification_templates.filter(organization_notification_templates_for_errors=self.project.organization))) + success_notification_templates = set(success_notification_templates + list(base_notification_templates.filter(organization_notification_templates_for_success=self.project.organization))) + any_notification_templates = set(any_notification_templates + list(base_notification_templates.filter(organization_notification_templates_for_any=self.project.organization))) + return dict(error=list(error_notification_templates), success=list(success_notification_templates), any=list(any_notification_templates)) class Job(UnifiedJob, JobOptions): ''' @@ -368,6 +522,9 @@ class Job(UnifiedJob, JobOptions): def get_absolute_url(self): return reverse('api:job_detail', args=(self.pk,)) + def get_ui_url(self): + return urljoin(tower_settings.TOWER_URL_BASE, "/#/jobs/{}".format(self.pk)) + @property def task_auth_token(self): '''Return temporary auth token used for task requests via API.''' @@ -381,6 +538,36 @@ class Job(UnifiedJob, JobOptions): return self.job_template.ask_variables_on_launch return False + @property + def ask_limit_on_launch(self): + if self.job_template is not None: + return self.job_template.ask_limit_on_launch + return False + + @property + def ask_tags_on_launch(self): + if self.job_template is not None: + return self.job_template.ask_tags_on_launch + return False + + @property + def ask_job_type_on_launch(self): + if self.job_template is not None: + return self.job_template.ask_job_type_on_launch + return False + + @property + def ask_inventory_on_launch(self): + if self.job_template is not None: + return self.job_template.ask_inventory_on_launch + return False + + @property + def ask_credential_on_launch(self): + if self.job_template is not None: + return self.job_template.ask_credential_on_launch + return False + def get_passwords_needed_to_start(self): return self.passwords_needed_to_start @@ -392,14 +579,15 @@ class Job(UnifiedJob, JobOptions): def is_blocked_by(self, obj): from awx.main.models import InventoryUpdate, ProjectUpdate if type(obj) == Job: - if obj.job_template is not None and obj.job_template == self.job_template: - if obj.launch_type == 'callback' and self.launch_type == 'callback': - if obj.limit != self.limit: - # NOTE: This is overriden by api/views.py.JobTemplateCallback.post() check - # which limits job runs on a JT to one per host in a callback scenario - # I'm leaving this here in case we change that + if obj.job_template is not None and obj.inventory is not None: + if obj.job_template == self.job_template and \ + obj.inventory == self.inventory: + if self.job_template.allow_simultaneous: return False - return True + if obj.launch_type == 'callback' and self.launch_type == 'callback' and \ + obj.limit != self.limit: + return False + return True return False if type(obj) == InventoryUpdate: if self.inventory == obj.inventory_source.inventory: @@ -451,14 +639,12 @@ class Job(UnifiedJob, JobOptions): def generate_dependencies(self, active_tasks): from awx.main.models import InventoryUpdate, ProjectUpdate - if self.inventory is None or self.project is None: - return [] - inventory_sources = self.inventory.inventory_sources.filter(active=True, update_on_launch=True) + inventory_sources = self.inventory.inventory_sources.filter(update_on_launch=True) project_found = False inventory_sources_found = [] dependencies = [] for obj in active_tasks: - if type(obj) == ProjectUpdate: + if type(obj) == ProjectUpdate and self.project is not None: if obj.project == self.project: project_found = True if type(obj) == InventoryUpdate: @@ -476,7 +662,7 @@ class Job(UnifiedJob, JobOptions): for source in inventory_sources.filter(pk__in=inventory_sources_already_updated): if source not in inventory_sources_found: inventory_sources_found.append(source) - if not project_found and self.project.needs_update_on_launch: + if not project_found and self.project is not None and self.project.needs_update_on_launch: dependencies.append(self.project.create_project_update(launch_type='dependency')) if inventory_sources.count(): # and not has_setup_failures? Probably handled as an error scenario in the task runner for source in inventory_sources: @@ -484,9 +670,29 @@ class Job(UnifiedJob, JobOptions): dependencies.append(source.create_inventory_update(launch_type='dependency')) return dependencies + def notification_data(self): + data = super(Job, self).notification_data() + all_hosts = {} + for h in self.job_host_summaries.all(): + all_hosts[h.host_name] = dict(failed=h.failed, + changed=h.changed, + dark=h.dark, + failures=h.failures, + ok=h.ok, + processed=h.processed, + skipped=h.skipped) + data.update(dict(inventory=self.inventory.name if self.inventory else None, + project=self.project.name if self.project else None, + playbook=self.playbook, + credential=self.credential.name if self.credential else None, + limit=self.limit, + extra_vars=self.extra_vars, + hosts=all_hosts)) + return data + def handle_extra_data(self, extra_data): extra_vars = {} - if type(extra_data) == dict: + if isinstance(extra_data, dict): extra_vars = extra_data elif extra_data is None: return @@ -495,12 +701,27 @@ class Job(UnifiedJob, JobOptions): return try: extra_vars = json.loads(extra_data) - except Exception, e: + except Exception as e: logger.warn("Exception deserializing extra vars: " + str(e)) evars = self.extra_vars_dict evars.update(extra_vars) self.update_fields(extra_vars=json.dumps(evars)) + def display_extra_vars(self): + ''' + Hides fields marked as passwords in survey. + ''' + if self.extra_vars and self.job_template and self.job_template.survey_enabled: + try: + extra_vars = json.loads(self.extra_vars) + for key in self.job_template.survey_password_variables(): + if key in extra_vars: + extra_vars[key] = REPLACE_STR + return json.dumps(extra_vars) + except ValueError: + pass + return self.extra_vars + def _survey_search_and_replace(self, content): # Use job template survey spec to identify password fields. # Then lookup password fields in extra_vars and save the values @@ -522,8 +743,10 @@ class Job(UnifiedJob, JobOptions): def copy(self): presets = {} - for kw in self.job_template._get_unified_job_field_names(): + for kw in JobTemplate._get_unified_job_field_names(): presets[kw] = getattr(self, kw) + if not self.job_template: + self.job_template = JobTemplate(name='temporary') return self.job_template.create_unified_job(**presets) # Job Credential required @@ -532,7 +755,7 @@ class Job(UnifiedJob, JobOptions): if not super(Job, self).can_start: return False - if not (self.credential and self.credential.active): + if not (self.credential): return False return True @@ -991,7 +1214,6 @@ class SystemJobOptions(BaseModel): SYSTEM_JOB_TYPE = [ ('cleanup_jobs', _('Remove jobs older than a certain number of days')), ('cleanup_activitystream', _('Remove activity stream entries older than a certain number of days')), - ('cleanup_deleted', _('Purge previously deleted items from the database')), ('cleanup_facts', _('Purge and/or reduce the granularity of system tracking data')), ] @@ -1025,6 +1247,19 @@ class SystemJobTemplate(UnifiedJobTemplate, SystemJobOptions): def cache_timeout_blocked(self): return False + @property + def notification_templates(self): + # TODO: Go through RBAC instead of calling all(). Need to account for orphaned NotificationTemplates + base_notification_templates = NotificationTemplate.objects.all() + error_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_errors__in=[self])) + success_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_success__in=[self])) + any_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_any__in=[self])) + return dict(error=list(error_notification_templates), + success=list(success_notification_templates), + any=list(any_notification_templates)) class SystemJob(UnifiedJob, SystemJobOptions): @@ -1064,12 +1299,15 @@ class SystemJob(UnifiedJob, SystemJobOptions): def get_absolute_url(self): return reverse('api:system_job_detail', args=(self.pk,)) + def get_ui_url(self): + return urljoin(tower_settings.TOWER_URL_BASE, "/#/management_jobs/{}".format(self.pk)) + def is_blocked_by(self, obj): return True def handle_extra_data(self, extra_data): extra_vars = {} - if type(extra_data) == dict: + if isinstance(extra_data, dict): extra_vars = extra_data elif extra_data is None: return @@ -1078,7 +1316,7 @@ class SystemJob(UnifiedJob, SystemJobOptions): return try: extra_vars = json.loads(extra_data) - except Exception, e: + except Exception as e: logger.warn("Exception deserializing extra vars: " + str(e)) evars = self.extra_vars_dict evars.update(extra_vars) diff --git a/awx/main/models/label.py b/awx/main/models/label.py new file mode 100644 index 0000000000..af9a2241b7 --- /dev/null +++ b/awx/main/models/label.py @@ -0,0 +1,58 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +# Django +from django.db import models +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ + +# AWX +from awx.main.models.base import CommonModelNameNotUnique +from awx.main.models.unified_jobs import UnifiedJobTemplate, UnifiedJob + +__all__ = ('Label', ) + +class Label(CommonModelNameNotUnique): + ''' + Generic Tag. Designed for tagging Job Templates, but expandable to other models. + ''' + + class Meta: + app_label = 'main' + unique_together = (("name", "organization"),) + ordering = ('organization', 'name') + + organization = models.ForeignKey( + 'Organization', + related_name='labels', + help_text=_('Organization this label belongs to.'), + on_delete=models.CASCADE, + ) + + def get_absolute_url(self): + return reverse('api:label_detail', args=(self.pk,)) + + @staticmethod + def get_orphaned_labels(): + return \ + Label.objects.filter( + organization=None, + jobtemplate_labels__isnull=True + ) + + def is_detached(self): + return bool( + Label.objects.filter( + id=self.id, + unifiedjob_labels__isnull=True, + unifiedjobtemplate_labels__isnull=True + ).count()) + + def is_candidate_for_detach(self): + c1 = UnifiedJob.objects.filter(labels__in=[self.id]).count() + c2 = UnifiedJobTemplate.objects.filter(labels__in=[self.id]).count() + if (c1 + c2 - 1) == 0: + return True + else: + return False + diff --git a/awx/main/models/mixins.py b/awx/main/models/mixins.py new file mode 100644 index 0000000000..3f9f2043d5 --- /dev/null +++ b/awx/main/models/mixins.py @@ -0,0 +1,62 @@ +# Django +from django.db import models +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import User # noqa + +# AWX +from awx.main.models.rbac import ( + Role, RoleAncestorEntry, get_roles_on_resource +) + + +__all__ = ['ResourceMixin'] + +class ResourceMixin(models.Model): + + class Meta: + abstract = True + + @classmethod + def accessible_objects(cls, accessor, role_field): + ''' + Use instead of `MyModel.objects` when you want to only consider + resources that a user has specific permissions for. For example: + + MyModel.accessible_objects(user, 'read_role').filter(name__istartswith='bar'); + + NOTE: This should only be used for list type things. If you have a + specific resource you want to check permissions on, it is more + performant to resolve the resource in question then call + `myresource.get_permissions(user)`. + ''' + return ResourceMixin._accessible_objects(cls, accessor, role_field) + + @staticmethod + def _accessible_objects(cls, accessor, role_field): + if type(accessor) == User: + ancestor_roles = accessor.roles.all() + elif type(accessor) == Role: + ancestor_roles = [accessor] + else: + accessor_type = ContentType.objects.get_for_model(accessor) + ancestor_roles = Role.objects.filter(content_type__pk=accessor_type.id, + object_id=accessor.id) + qs = cls.objects.filter(pk__in = + RoleAncestorEntry.objects.filter( + ancestor__in=ancestor_roles, + content_type_id = ContentType.objects.get_for_model(cls).id, + role_field = role_field + ).values_list('object_id').distinct() + ) + return qs + + + def get_permissions(self, accessor): + ''' + Returns a string list of the roles a accessor has for a given resource. + An accessor can be either a User, Role, or an arbitrary resource that + contains one or more Roles associated with it. + ''' + + return get_roles_on_resource(self, accessor) + diff --git a/awx/main/models/notifications.py b/awx/main/models/notifications.py new file mode 100644 index 0000000000..75fffea642 --- /dev/null +++ b/awx/main/models/notifications.py @@ -0,0 +1,173 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging + +from django.db import models +from django.core.urlresolvers import reverse +from django.core.mail.message import EmailMessage +from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import smart_str + +from awx.main.models.base import * # noqa +from awx.main.utils import encrypt_field, decrypt_field +from awx.main.notifications.email_backend import CustomEmailBackend +from awx.main.notifications.slack_backend import SlackBackend +from awx.main.notifications.twilio_backend import TwilioBackend +from awx.main.notifications.pagerduty_backend import PagerDutyBackend +from awx.main.notifications.hipchat_backend import HipChatBackend +from awx.main.notifications.webhook_backend import WebhookBackend +from awx.main.notifications.irc_backend import IrcBackend + +# Django-JSONField +from jsonfield import JSONField + +logger = logging.getLogger('awx.main.models.notifications') + +__all__ = ['NotificationTemplate', 'Notification'] + +class NotificationTemplate(CommonModel): + + NOTIFICATION_TYPES = [('email', _('Email'), CustomEmailBackend), + ('slack', _('Slack'), SlackBackend), + ('twilio', _('Twilio'), TwilioBackend), + ('pagerduty', _('Pagerduty'), PagerDutyBackend), + ('hipchat', _('HipChat'), HipChatBackend), + ('webhook', _('Webhook'), WebhookBackend), + ('irc', _('IRC'), IrcBackend)] + NOTIFICATION_TYPE_CHOICES = [(x[0], x[1]) for x in NOTIFICATION_TYPES] + CLASS_FOR_NOTIFICATION_TYPE = dict([(x[0], x[2]) for x in NOTIFICATION_TYPES]) + + class Meta: + app_label = 'main' + + organization = models.ForeignKey( + 'Organization', + blank=False, + null=True, + on_delete=models.SET_NULL, + related_name='notification_templates', + ) + + notification_type = models.CharField( + max_length = 32, + choices=NOTIFICATION_TYPE_CHOICES, + ) + + notification_configuration = JSONField(blank=False) + + def get_absolute_url(self): + return reverse('api:notification_template_detail', args=(self.pk,)) + + @property + def notification_class(self): + return self.CLASS_FOR_NOTIFICATION_TYPE[self.notification_type] + + def save(self, *args, **kwargs): + new_instance = not bool(self.pk) + update_fields = kwargs.get('update_fields', []) + for field in filter(lambda x: self.notification_class.init_parameters[x]['type'] == "password", + self.notification_class.init_parameters): + if self.notification_configuration[field].startswith("$encrypted$"): + continue + if new_instance: + value = self.notification_configuration[field] + setattr(self, '_saved_{}_{}'.format("config", field), value) + self.notification_configuration[field] = '' + else: + encrypted = encrypt_field(self, 'notification_configuration', subfield=field) + self.notification_configuration[field] = encrypted + if 'notification_configuration' not in update_fields: + update_fields.append('notification_configuration') + super(NotificationTemplate, self).save(*args, **kwargs) + if new_instance: + update_fields = [] + for field in filter(lambda x: self.notification_class.init_parameters[x]['type'] == "password", + self.notification_class.init_parameters): + saved_value = getattr(self, '_saved_{}_{}'.format("config", field), '') + self.notification_configuration[field] = saved_value + if 'notification_configuration' not in update_fields: + update_fields.append('notification_configuration') + self.save(update_fields=update_fields) + + @property + def recipients(self): + return self.notification_configuration[self.notification_class.recipient_parameter] + + def generate_notification(self, subject, message): + notification = Notification(notification_template=self, + notification_type=self.notification_type, + recipients=smart_str(self.recipients), + subject=subject, + body=message) + notification.save() + return notification + + def send(self, subject, body): + for field in filter(lambda x: self.notification_class.init_parameters[x]['type'] == "password", + self.notification_class.init_parameters): + self.notification_configuration[field] = decrypt_field(self, + 'notification_configuration', + subfield=field) + recipients = self.notification_configuration.pop(self.notification_class.recipient_parameter) + if not isinstance(recipients, list): + recipients = [recipients] + sender = self.notification_configuration.pop(self.notification_class.sender_parameter, None) + backend_obj = self.notification_class(**self.notification_configuration) + notification_obj = EmailMessage(subject, backend_obj.format_body(body), sender, recipients) + return backend_obj.send_messages([notification_obj]) + +class Notification(CreatedModifiedModel): + ''' + A notification event emitted when a NotificationTemplate is run + ''' + + NOTIFICATION_STATE_CHOICES = [ + ('pending', _('Pending')), + ('successful', _('Successful')), + ('failed', _('Failed')), + ] + + class Meta: + app_label = 'main' + ordering = ('pk',) + + notification_template = models.ForeignKey( + 'NotificationTemplate', + related_name='notifications', + on_delete=models.CASCADE, + editable=False + ) + status = models.CharField( + max_length=20, + choices=NOTIFICATION_STATE_CHOICES, + default='pending', + editable=False, + ) + error = models.TextField( + blank=True, + default='', + editable=False, + ) + notifications_sent = models.IntegerField( + default=0, + editable=False, + ) + notification_type = models.CharField( + max_length = 32, + choices=NotificationTemplate.NOTIFICATION_TYPE_CHOICES, + ) + recipients = models.TextField( + blank=True, + default='', + editable=False, + ) + subject = models.TextField( + blank=True, + default='', + editable=False, + ) + body = JSONField(blank=True) + + def get_absolute_url(self): + return reverse('api:notification_detail', args=(self.pk,)) diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index f20f69f70b..5f3dc9d7c9 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -16,13 +16,19 @@ from django.utils.timezone import now as tz_now from django.utils.translation import ugettext_lazy as _ # AWX -from awx.main.fields import AutoOneToOneField +from awx.main.fields import AutoOneToOneField, ImplicitRoleField from awx.main.models.base import * # noqa +from awx.main.models.rbac import ( + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ROLE_SINGLETON_SYSTEM_AUDITOR, +) +from awx.main.models.mixins import ResourceMixin +from awx.main.conf import tower_settings __all__ = ['Organization', 'Team', 'Permission', 'Profile', 'AuthToken'] -class Organization(CommonModel): +class Organization(CommonModel, NotificationFieldsModel, ResourceMixin): ''' An organization is the basic unit of multi-tenancy divisions ''' @@ -31,21 +37,34 @@ class Organization(CommonModel): app_label = 'main' ordering = ('name',) - users = models.ManyToManyField( + deprecated_users = models.ManyToManyField( 'auth.User', blank=True, - related_name='organizations', + related_name='deprecated_organizations', ) - admins = models.ManyToManyField( + deprecated_admins = models.ManyToManyField( 'auth.User', blank=True, - related_name='admin_of_organizations', + related_name='deprecated_admin_of_organizations', ) - projects = models.ManyToManyField( + deprecated_projects = models.ManyToManyField( 'Project', blank=True, - related_name='organizations', + related_name='deprecated_organizations', ) + admin_role = ImplicitRoleField( + parent_role='singleton:' + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ) + auditor_role = ImplicitRoleField( + parent_role='singleton:' + ROLE_SINGLETON_SYSTEM_AUDITOR, + ) + member_role = ImplicitRoleField( + parent_role='admin_role', + ) + read_role = ImplicitRoleField( + parent_role=['member_role', 'auditor_role'], + ) + def get_absolute_url(self): return reverse('api:organization_detail', args=(self.pk,)) @@ -53,14 +72,9 @@ class Organization(CommonModel): def __unicode__(self): return self.name - def mark_inactive(self, save=True): - for script in self.custom_inventory_scripts.all(): - script.organization = None - script.save() - super(Organization, self).mark_inactive(save=save) -class Team(CommonModelNameNotUnique): +class Team(CommonModelNameNotUnique, ResourceMixin): ''' A team is a group of users that work on common projects. ''' @@ -70,38 +84,44 @@ class Team(CommonModelNameNotUnique): unique_together = [('organization', 'name')] ordering = ('organization__name', 'name') - users = models.ManyToManyField( + deprecated_users = models.ManyToManyField( 'auth.User', blank=True, - related_name='teams', + related_name='deprecated_teams', ) organization = models.ForeignKey( 'Organization', blank=False, - null=True, - on_delete=models.SET_NULL, + null=False, + on_delete=models.CASCADE, related_name='teams', ) - projects = models.ManyToManyField( + deprecated_projects = models.ManyToManyField( 'Project', blank=True, - related_name='teams', + related_name='deprecated_teams', + ) + admin_role = ImplicitRoleField( + parent_role='organization.admin_role', + ) + member_role = ImplicitRoleField( + parent_role='admin_role', + ) + read_role = ImplicitRoleField( + parent_role=['organization.auditor_role', 'member_role'], ) def get_absolute_url(self): return reverse('api:team_detail', args=(self.pk,)) - def mark_inactive(self, save=True): - ''' - When marking a team inactive we'll wipe out its credentials also - ''' - for cred in self.credentials.all(): - cred.mark_inactive() - super(Team, self).mark_inactive(save=save) class Permission(CommonModelNameNotUnique): ''' A permission allows a user, project, or team to be able to use an inventory source. + + NOTE: This class is deprecated, permissions and access is to be handled by + our new RBAC system. This class should be able to be safely removed after a 3.0.0 + migration. - anoek 2016-01-28 ''' class Meta: @@ -173,7 +193,7 @@ class Profile(CreatedModifiedModel): ) """ -Since expiration and session expiration is event driven a token could be +Since expiration and session expiration is event driven a token could be invalidated for both reasons. Further, we only support a single reason for a session token being invalid. For this case, mark the token as expired. @@ -197,7 +217,7 @@ class AuthToken(BaseModel): class Meta: app_label = 'main' - + key = models.CharField(max_length=40, primary_key=True) user = models.ForeignKey('auth.User', related_name='auth_tokens', on_delete=models.CASCADE) @@ -242,7 +262,7 @@ class AuthToken(BaseModel): if not now: now = tz_now() if not self.pk or not self.is_expired(now=now): - self.expires = now + datetime.timedelta(seconds=settings.AUTH_TOKEN_EXPIRATION) + self.expires = now + datetime.timedelta(seconds=tower_settings.AUTH_TOKEN_EXPIRATION) if save: self.save() @@ -259,12 +279,12 @@ class AuthToken(BaseModel): if now is None: now = tz_now() invalid_tokens = AuthToken.objects.none() - if settings.AUTH_TOKEN_PER_USER != -1: + if tower_settings.AUTH_TOKEN_PER_USER != -1: invalid_tokens = AuthToken.objects.filter( user=user, expires__gt=now, reason='', - ).order_by('-created')[settings.AUTH_TOKEN_PER_USER:] + ).order_by('-created')[tower_settings.AUTH_TOKEN_PER_USER:] return invalid_tokens def generate_key(self): @@ -293,7 +313,7 @@ class AuthToken(BaseModel): valid_n_tokens_qs = self.user.auth_tokens.filter( expires__gt=now, reason='', - ).order_by('-created')[0:settings.AUTH_TOKEN_PER_USER] + ).order_by('-created')[0:tower_settings.AUTH_TOKEN_PER_USER] valid_n_tokens = valid_n_tokens_qs.values_list('key', flat=True) return bool(self.key in valid_n_tokens) @@ -302,17 +322,8 @@ class AuthToken(BaseModel): return self.key -# Add mark_inactive method to User model. -def user_mark_inactive(user, save=True): - '''Use instead of delete to rename and mark users inactive.''' - if user.is_active: - # Set timestamp to datetime.isoformat() but without the time zone - # offset to stay withint the 30 character username limit. - dtnow = tz_now() - deleted_ts = dtnow.strftime('%Y-%m-%dT%H:%M:%S.%f') - user.username = '_d_%s' % deleted_ts - user.is_active = False - if save: - user.save() - -User.add_to_class('mark_inactive', user_mark_inactive) +# Add get_absolute_url method to User model if not present. +if not hasattr(User, 'get_absolute_url'): + def user_get_absolute_url(user): + return reverse('api:user_detail', args=(user.pk,)) + User.add_to_class('get_absolute_url', user_get_absolute_url) diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index b90e29cd85..93c4a42e36 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -11,7 +11,7 @@ import urlparse from django.conf import settings from django.db import models from django.utils.translation import ugettext_lazy as _ -from django.utils.encoding import smart_str +from django.utils.encoding import smart_str, smart_text from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse from django.utils.timezone import now, make_aware, get_default_timezone @@ -20,8 +20,16 @@ from django.utils.timezone import now, make_aware, get_default_timezone from awx.lib.compat import slugify from awx.main.models.base import * # noqa from awx.main.models.jobs import Job +from awx.main.models.notifications import NotificationTemplate from awx.main.models.unified_jobs import * # noqa +from awx.main.models.mixins import ResourceMixin from awx.main.utils import update_scm_url +from awx.main.fields import ImplicitRoleField +from awx.main.conf import tower_settings +from awx.main.models.rbac import ( + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ROLE_SINGLETON_SYSTEM_AUDITOR, +) __all__ = ['Project', 'ProjectUpdate'] @@ -49,7 +57,7 @@ class ProjectOptions(models.Model): paths = [x.decode('utf-8') for x in os.listdir(settings.PROJECTS_ROOT) if (os.path.isdir(os.path.join(settings.PROJECTS_ROOT, x)) and not x.startswith('.') and not x.startswith('_'))] - qs = Project.objects.filter(active=True) + qs = Project.objects used_paths = qs.values_list('local_path', flat=True) return [x for x in paths if x not in used_paths] else: @@ -107,11 +115,11 @@ class ProjectOptions(models.Model): try: scm_url = update_scm_url(self.scm_type, scm_url, check_special_cases=False) - except ValueError, e: - raise ValidationError((e.args or ('Invalid SCM URL',))[0]) + except ValueError as e: + raise ValidationError((e.args or ('Invalid SCM URL.',))[0]) scm_url_parts = urlparse.urlsplit(scm_url) if self.scm_type and not any(scm_url_parts): - raise ValidationError('SCM URL is required') + raise ValidationError('SCM URL is required.') return unicode(self.scm_url or '') def clean_credential(self): @@ -120,7 +128,7 @@ class ProjectOptions(models.Model): cred = self.credential if cred: if cred.kind != 'scm': - raise ValidationError('Credential kind must be "scm"') + raise ValidationError("Credential kind must be 'scm'.") try: scm_url = update_scm_url(self.scm_type, self.scm_url, check_special_cases=False) @@ -134,8 +142,8 @@ class ProjectOptions(models.Model): try: update_scm_url(self.scm_type, self.scm_url, scm_username, scm_password) - except ValueError, e: - raise ValidationError((e.args or ('Invalid credential',))[0]) + except ValueError as e: + raise ValidationError((e.args or ('Invalid credential.',))[0]) except ValueError: pass return cred @@ -181,11 +189,11 @@ class ProjectOptions(models.Model): # Filter files in a tasks subdirectory. if 'tasks' in playbook.split(os.sep): continue - results.append(playbook) + results.append(smart_text(playbook)) return sorted(results, key=lambda x: smart_str(x).lower()) -class Project(UnifiedJobTemplate, ProjectOptions): +class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin): ''' A project represents a playbook git repo that can access a set of inventories ''' @@ -194,6 +202,13 @@ class Project(UnifiedJobTemplate, ProjectOptions): app_label = 'main' ordering = ('id',) + organization = models.ForeignKey( + 'Organization', + blank=True, + null=True, + on_delete=models.CASCADE, + related_name='projects', + ) scm_delete_on_next_update = models.BooleanField( default=False, editable=False, @@ -206,6 +221,26 @@ class Project(UnifiedJobTemplate, ProjectOptions): blank=True, ) + admin_role = ImplicitRoleField(parent_role=[ + 'organization.admin_role', + 'singleton:' + ROLE_SINGLETON_SYSTEM_ADMINISTRATOR, + ]) + + use_role = ImplicitRoleField( + parent_role='admin_role', + ) + + update_role = ImplicitRoleField( + parent_role='admin_role', + ) + + read_role = ImplicitRoleField(parent_role=[ + 'organization.auditor_role', + 'singleton:' + ROLE_SINGLETON_SYSTEM_AUDITOR, + 'use_role', + 'update_role', + ]) + @classmethod def _get_unified_job_class(cls): return ProjectUpdate @@ -221,6 +256,7 @@ class Project(UnifiedJobTemplate, ProjectOptions): # If update_fields has been specified, add our field names to it, # if it hasn't been specified, then we're just doing a normal save. update_fields = kwargs.get('update_fields', []) + skip_update = bool(kwargs.pop('skip_update', False)) # Check if scm_type or scm_url changes. if self.pk: project_before = self.__class__.objects.get(pk=self.pk) @@ -244,7 +280,7 @@ class Project(UnifiedJobTemplate, ProjectOptions): if update_fields: self.save(update_fields=update_fields) # If we just created a new project with SCM, start the initial update. - if new_instance and self.scm_type: + if new_instance and self.scm_type and not skip_update: self.update() def _get_current_status(self): @@ -299,16 +335,40 @@ class Project(UnifiedJobTemplate, ProjectOptions): if (self.last_job_run + datetime.timedelta(seconds=self.scm_update_cache_timeout)) > now(): return True return False - + @property def needs_update_on_launch(self): - if self.active and self.scm_type and self.scm_update_on_launch: + if self.scm_type and self.scm_update_on_launch: if not self.last_job_run: return True if (self.last_job_run + datetime.timedelta(seconds=self.scm_update_cache_timeout)) <= now(): return True return False + @property + def notification_templates(self): + base_notification_templates = NotificationTemplate.objects + error_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_errors=self)) + success_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_success=self)) + any_notification_templates = list(base_notification_templates + .filter(unifiedjobtemplate_notification_templates_for_any=self)) + # Get Organization NotificationTemplates + if self.organization is not None: + error_notification_templates = set(error_notification_templates + + list(base_notification_templates + .filter(organization_notification_templates_for_errors=self.organization))) + success_notification_templates = set(success_notification_templates + + list(base_notification_templates + .filter(organization_notification_templates_for_success=self.organization))) + any_notification_templates = set(any_notification_templates + + list(base_notification_templates + .filter(organization_notification_templates_for_any=self.organization))) + return dict(error=list(error_notification_templates), + success=list(success_notification_templates), + any=list(any_notification_templates)) + def get_absolute_url(self): return reverse('api:project_detail', args=(self.pk,)) @@ -370,6 +430,9 @@ class ProjectUpdate(UnifiedJob, ProjectOptions): def get_absolute_url(self): return reverse('api:project_update_detail', args=(self.pk,)) + def get_ui_url(self): + return urlparse.urljoin(tower_settings.TOWER_URL_BASE, "/#/scm_update/{}".format(self.pk)) + def _update_parent_instance(self): parent_instance = self._get_parent_instance() if parent_instance: diff --git a/awx/main/models/rbac.py b/awx/main/models/rbac.py new file mode 100644 index 0000000000..5e040b85a1 --- /dev/null +++ b/awx/main/models/rbac.py @@ -0,0 +1,466 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +# Python +import logging +import threading +import contextlib +import re + +# Django +from django.db import models, transaction, connection +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey + + +# AWX +from django.contrib.auth.models import User # noqa +from awx.main.models.base import * # noqa + +__all__ = [ + 'Role', + 'batch_role_ancestor_rebuilding', + 'get_roles_on_resource', + 'ROLE_SINGLETON_SYSTEM_ADMINISTRATOR', + 'ROLE_SINGLETON_SYSTEM_AUDITOR', +] + +logger = logging.getLogger('awx.main.models.rbac') + +ROLE_SINGLETON_SYSTEM_ADMINISTRATOR='system_administrator' +ROLE_SINGLETON_SYSTEM_AUDITOR='system_auditor' + +role_names = { + 'system_administrator' : 'System Administrator', + 'system_auditor' : 'System Auditor', + 'adhoc_role' : 'Ad Hoc', + 'admin_role' : 'Admin', + 'auditor_role' : 'Auditor', + 'execute_role' : 'Execute', + 'member_role' : 'Member', + 'read_role' : 'Read', + 'update_role' : 'Update', + 'use_role' : 'Use', +} + +role_descriptions = { + 'system_administrator' : 'Can manage all aspects of the system', + 'system_auditor' : 'Can view all settings on the system', + 'adhoc_role' : 'May run ad hoc commands on an inventory', + 'admin_role' : 'Can manage all aspects of the %s', + 'auditor_role' : 'Can view all settings for the %s', + 'execute_role' : 'May run the job template', + 'member_role' : 'User is a member of the %s', + 'read_role' : 'May view settings for the %s', + 'update_role' : 'May update project or inventory or group using the configured source update system', + 'use_role' : 'Can use the %s in a job template', +} + + +tls = threading.local() # thread local storage + + +def check_singleton(func): + ''' + check_singleton is a decorator that checks if a user given + to a `visible_roles` method is in either of our singleton roles (Admin, Auditor) + and if so, returns their full list of roles without filtering. + ''' + def wrapper(*args, **kwargs): + sys_admin = Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR) + sys_audit = Role.singleton(ROLE_SINGLETON_SYSTEM_AUDITOR) + user = args[0] + if user in sys_admin or user in sys_audit: + if len(args) == 2: + return args[1] + return Role.objects.all() + return func(*args, **kwargs) + return wrapper + +@contextlib.contextmanager +def batch_role_ancestor_rebuilding(allow_nesting=False): + ''' + Batches the role ancestor rebuild work necessary whenever role-role + relations change. This can result in a big speedup when performing + any bulk manipulation. + + WARNING: Calls to anything related to checking access/permissions + while within the context of the batch_role_ancestor_rebuilding will + likely not work. + ''' + + batch_role_rebuilding = getattr(tls, 'batch_role_rebuilding', False) + + try: + setattr(tls, 'batch_role_rebuilding', True) + if not batch_role_rebuilding: + setattr(tls, 'additions', set()) + setattr(tls, 'removals', set()) + yield + + finally: + setattr(tls, 'batch_role_rebuilding', batch_role_rebuilding) + if not batch_role_rebuilding: + additions = getattr(tls, 'additions') + removals = getattr(tls, 'removals') + with transaction.atomic(): + Role.rebuild_role_ancestor_list(list(additions), list(removals)) + delattr(tls, 'additions') + delattr(tls, 'removals') + + +class Role(models.Model): + ''' + Role model + ''' + + class Meta: + app_label = 'main' + verbose_name_plural = _('roles') + db_table = 'main_rbac_roles' + index_together = [ + ("content_type", "object_id") + ] + + role_field = models.TextField(null=False) + singleton_name = models.TextField(null=True, default=None, db_index=True, unique=True) + parents = models.ManyToManyField('Role', related_name='children') + implicit_parents = models.TextField(null=False, default='[]') + ancestors = models.ManyToManyField( + 'Role', + through='RoleAncestorEntry', + through_fields=('descendent', 'ancestor'), + related_name='descendents' + ) # auto-generated by `rebuild_role_ancestor_list` + members = models.ManyToManyField('auth.User', related_name='roles') + content_type = models.ForeignKey(ContentType, null=True, default=None) + object_id = models.PositiveIntegerField(null=True, default=None) + content_object = GenericForeignKey('content_type', 'object_id') + + def save(self, *args, **kwargs): + super(Role, self).save(*args, **kwargs) + self.rebuild_role_ancestor_list([self.id], []) + + def get_absolute_url(self): + return reverse('api:role_detail', args=(self.pk,)) + + def __contains__(self, accessor): + if type(accessor) == User: + return self.ancestors.filter(members=accessor).exists() + elif accessor.__class__.__name__ == 'Team': + return self.ancestors.filter(pk=accessor.member_role.id).exists() + elif type(accessor) == Role: + return self.ancestors.filter(pk=accessor).exists() + else: + accessor_type = ContentType.objects.get_for_model(accessor) + roles = Role.objects.filter(content_type__pk=accessor_type.id, + object_id=accessor.id) + return self.ancestors.filter(pk__in=roles).exists() + + @property + def name(self): + global role_names + return role_names[self.role_field] + + @property + def description(self): + global role_descriptions + description = role_descriptions[self.role_field] + if '%s' in description and self.content_type: + model = self.content_type.model_class() + model_name = re.sub(r'([a-z])([A-Z])', r'\1 \2', model.__name__).lower() + description = description % model_name + + return description + + @staticmethod + def rebuild_role_ancestor_list(additions, removals): + ''' + Updates our `ancestors` map to accurately reflect all of the ancestors for a role + + You should never need to call this. Signal handlers should be calling + this method when the role hierachy changes automatically. + ''' + # The ancestry table + # ================================================= + # + # The role ancestors table denormalizes the parental relations + # between all roles in the system. If you have role A which is a + # parent of B which is a parent of C, then the ancestors table will + # contain a row noting that B is a descendent of A, and two rows for + # denoting that C is a descendent of both A and B. In addition to + # storing entries for each descendent relationship, we also store an + # entry that states that C is a 'descendent' of itself, C. This makes + # usage of this table simple in our queries as it enables us to do + # straight joins where we would have to do unions otherwise. + # + # The simple version of what this function is doing + # ================================================= + # + # When something changes in our role "hierarchy", we need to update + # the `Role.ancestors` mapping to reflect these changes. The basic + # idea, which the code in this method is modeled after, is to do + # this: When a change happens to a role's parents list, we update + # that role's ancestry list, then we recursively update any child + # roles ancestry lists. Because our role relationships are not + # strictly hierarchical, and can even have loops, this process may + # necessarily visit the same nodes more than once. To handle this + # without having to keep track of what should be updated (again) and + # in what order, we simply use the termination condition of stopping + # when our stored ancestry list matches what our list should be, eg, + # when nothing changes. This can be simply implemented: + # + # if actual_ancestors != stored_ancestors: + # for id in actual_ancestors - stored_ancestors: + # self.ancestors.add(id) + # for id in stored_ancestors - actual_ancestors: + # self.ancestors.remove(id) + # + # for child in self.children.all(): + # child.rebuild_role_ancestor_list() + # + # However this results in a lot of calls to the database, so the + # optimized implementation below effectively does this same thing, + # but we update all children at once, so effectively we sweep down + # through our hierarchy one layer at a time instead of one node at a + # time. Because of how this method works, we can also start from many + # roots at once and sweep down a large set of roles, which we take + # advantage of when performing bulk operations. + # + # + # SQL Breakdown + # ============= + # We operate under the assumption that our parent's ancestor list is + # correct, thus we can always compute what our ancestor list should + # be by taking the union of our parent's ancestor lists and adding + # our self reference entry where ancestor_id = descendent_id + # + # The DELETE query deletes all entries in the ancestor table that + # should no longer be there (as determined by the NOT EXISTS query, + # which checks to see if the ancestor is still an ancestor of one + # or more of our parents) + # + # The INSERT query computes the list of what our ancestor maps should + # be, and inserts any missing entries. + # + # Once complete, we select all of the children for the roles we are + # working with, this list becomes the new role list we are working + # with. + # + # When our delete or insert query return that they have not performed + # any work, then we know that our children will also not need to be + # updated, and so we can terminate our loop. + # + # + + if len(additions) == 0 and len(removals) == 0: + return + + global tls + batch_role_rebuilding = getattr(tls, 'batch_role_rebuilding', False) + + if batch_role_rebuilding: + getattr(tls, 'additions').update(set(additions)) + getattr(tls, 'removals').update(set(removals)) + return + + cursor = connection.cursor() + loop_ct = 0 + + sql_params = { + 'ancestors_table': Role.ancestors.through._meta.db_table, + 'parents_table': Role.parents.through._meta.db_table, + 'roles_table': Role._meta.db_table, + } + + # SQLlite has a 1M sql statement limit.. since the django sqllite + # driver isn't letting us pass in the ids through the preferred + # parameter binding system, this function exists to obey this. + # est max 12 bytes per number, used up to 2 times in a query, + # minus 4k of padding for the other parts of the query, leads us + # to the magic number of 41496, or 40000 for a nice round number + def split_ids_for_sqlite(role_ids): + for i in xrange(0, len(role_ids), 40000): + yield role_ids[i:i + 40000] + + + with transaction.atomic(): + while len(additions) > 0 or len(removals) > 0: + if loop_ct > 100: + raise Exception('Role ancestry rebuilding error: infinite loop detected') + loop_ct += 1 + + delete_ct = 0 + if len(removals) > 0: + for ids in split_ids_for_sqlite(removals): + sql_params['ids'] = ','.join(str(x) for x in ids) + cursor.execute(''' + DELETE FROM %(ancestors_table)s + WHERE descendent_id IN (%(ids)s) + AND descendent_id != ancestor_id + AND NOT EXISTS ( + SELECT 1 + FROM %(parents_table)s as parents + INNER JOIN %(ancestors_table)s as inner_ancestors + ON (parents.to_role_id = inner_ancestors.descendent_id) + WHERE parents.from_role_id = %(ancestors_table)s.descendent_id + AND %(ancestors_table)s.ancestor_id = inner_ancestors.ancestor_id + ) + ''' % sql_params) + + delete_ct += cursor.rowcount + + insert_ct = 0 + if len(additions) > 0: + for ids in split_ids_for_sqlite(additions): + sql_params['ids'] = ','.join(str(x) for x in ids) + cursor.execute(''' + INSERT INTO %(ancestors_table)s (descendent_id, ancestor_id, role_field, content_type_id, object_id) + SELECT from_id, to_id, new_ancestry_list.role_field, new_ancestry_list.content_type_id, new_ancestry_list.object_id FROM ( + SELECT roles.id from_id, + ancestors.ancestor_id to_id, + roles.role_field, + COALESCE(roles.content_type_id, 0) content_type_id, + COALESCE(roles.object_id, 0) object_id + FROM %(roles_table)s as roles + INNER JOIN %(parents_table)s as parents + ON (parents.from_role_id = roles.id) + INNER JOIN %(ancestors_table)s as ancestors + ON (parents.to_role_id = ancestors.descendent_id) + WHERE roles.id IN (%(ids)s) + + UNION + + SELECT id from_id, + id to_id, + role_field, + COALESCE(content_type_id, 0) content_type_id, + COALESCE(object_id, 0) object_id + from %(roles_table)s WHERE id IN (%(ids)s) + ) new_ancestry_list + WHERE NOT EXISTS ( + SELECT 1 FROM %(ancestors_table)s + WHERE %(ancestors_table)s.descendent_id = new_ancestry_list.from_id + AND %(ancestors_table)s.ancestor_id = new_ancestry_list.to_id + ) + + ''' % sql_params) + insert_ct += cursor.rowcount + + if insert_ct == 0 and delete_ct == 0: + break + + new_additions = set() + for ids in split_ids_for_sqlite(additions): + sql_params['ids'] = ','.join(str(x) for x in ids) + # get all children for the roles we're operating on + cursor.execute('SELECT DISTINCT from_role_id FROM %(parents_table)s WHERE to_role_id IN (%(ids)s)' % sql_params) + new_additions.update([row[0] for row in cursor.fetchall()]) + additions = list(new_additions) + + new_removals = set() + for ids in split_ids_for_sqlite(removals): + sql_params['ids'] = ','.join(str(x) for x in ids) + # get all children for the roles we're operating on + cursor.execute('SELECT DISTINCT from_role_id FROM %(parents_table)s WHERE to_role_id IN (%(ids)s)' % sql_params) + new_removals.update([row[0] for row in cursor.fetchall()]) + removals = list(new_removals) + + + @staticmethod + @check_singleton + def visible_roles(user): + sql_params = { + 'ancestors_table': Role.ancestors.through._meta.db_table, + 'parents_table': Role.parents.through._meta.db_table, + 'roles_table': Role._meta.db_table, + 'ids': ','.join(str(x) for x in user.roles.values_list('id', flat=True)) + } + + qs = Role.objects.extra( + where = [''' + %(roles_table)s.id IN ( + SELECT DISTINCT visible_roles_t2.ancestor_id + FROM %(ancestors_table)s as visible_roles_t1 + LEFT JOIN %(ancestors_table)s as visible_roles_t2 ON (visible_roles_t1.descendent_id = visible_roles_t2.descendent_id) + WHERE visible_roles_t1.ancestor_id IN (%(ids)s) + ) + ''' % sql_params] + ) + return qs + + @staticmethod + @check_singleton + def filter_visible_roles(user, roles_qs): + sql_params = { + 'ancestors_table': Role.ancestors.through._meta.db_table, + 'parents_table': Role.parents.through._meta.db_table, + 'roles_table': Role._meta.db_table, + 'ids': ','.join(str(x) for x in user.roles.all().values_list('id', flat=True)) + } + + qs = roles_qs.extra( + where = [''' + EXISTS ( + SELECT 1 + FROM %(ancestors_table)s as visible_roles_t1 + LEFT JOIN %(ancestors_table)s as visible_roles_t2 ON (visible_roles_t1.descendent_id = visible_roles_t2.descendent_id) + WHERE visible_roles_t1.ancestor_id = %(roles_table)s.id + AND visible_roles_t2.ancestor_id IN (%(ids)s) + ) ''' % sql_params] + ) + return qs + + @staticmethod + def singleton(name): + role, _ = Role.objects.get_or_create(singleton_name=name, role_field=name) + return role + + def is_ancestor_of(self, role): + return role.ancestors.filter(id=self.id).exists() + +class RoleAncestorEntry(models.Model): + + class Meta: + app_label = 'main' + verbose_name_plural = _('role_ancestors') + db_table = 'main_rbac_role_ancestors' + index_together = [ + ("ancestor", "content_type_id", "object_id"), # used by get_roles_on_resource + ("ancestor", "content_type_id", "role_field"), # used by accessible_objects + ("ancestor", "descendent"), # used by rebuild_role_ancestor_list in the NOT EXISTS clauses. + ] + + descendent = models.ForeignKey(Role, null=False, on_delete=models.CASCADE, related_name='+') + ancestor = models.ForeignKey(Role, null=False, on_delete=models.CASCADE, related_name='+') + role_field = models.TextField(null=False) + content_type_id = models.PositiveIntegerField(null=False) + object_id = models.PositiveIntegerField(null=False) + + +def get_roles_on_resource(resource, accessor): + ''' + Returns a string list of the roles a accessor has for a given resource. + An accessor can be either a User, Role, or an arbitrary resource that + contains one or more Roles associated with it. + ''' + + if type(accessor) == User: + roles = accessor.roles.all() + elif type(accessor) == Role: + roles = [accessor] + else: + accessor_type = ContentType.objects.get_for_model(accessor) + roles = Role.objects.filter(content_type__pk=accessor_type.id, + object_id=accessor.id) + + return [ + role_field for role_field in + RoleAncestorEntry.objects.filter( + ancestor__in=roles, + content_type_id=ContentType.objects.get_for_model(resource).id, + object_id=resource.id + ).values_list('role_field', flat=True).distinct() + ] diff --git a/awx/main/models/schedules.py b/awx/main/models/schedules.py index fbde23d07a..d9de8b394e 100644 --- a/awx/main/models/schedules.py +++ b/awx/main/models/schedules.py @@ -27,7 +27,7 @@ __all__ = ['Schedule'] class ScheduleFilterMethods(object): def enabled(self, enabled=True): - return self.filter(enabled=enabled, active=enabled) + return self.filter(enabled=enabled) def before(self, dt): return self.filter(next_run__lt=dt) @@ -47,7 +47,7 @@ class ScheduleManager(ScheduleFilterMethods, models.Manager): use_for_related_objects = True - def get_query_set(self): + def get_queryset(self): return ScheduleQuerySet(self.model, using=self._db) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 2a7875d321..36b2dfe75e 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -8,15 +8,16 @@ import logging import re import os import os.path +from collections import OrderedDict from StringIO import StringIO # Django from django.conf import settings from django.db import models from django.core.exceptions import NON_FIELD_ERRORS -from django.utils.datastructures import SortedDict from django.utils.translation import ugettext_lazy as _ from django.utils.timezone import now +from django.utils.encoding import smart_text # Django-JSONField from jsonfield import JSONField @@ -38,9 +39,10 @@ __all__ = ['UnifiedJobTemplate', 'UnifiedJob'] logger = logging.getLogger('awx.main.models.unified_jobs') CAN_CANCEL = ('new', 'pending', 'waiting', 'running') +ACTIVE_STATES = CAN_CANCEL -class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): +class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique, NotificationFieldsModel): ''' Concrete base class for unified job templates. ''' @@ -77,7 +79,7 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): ('updating', _('Updating')), # Same as running. ] - ALL_STATUS_CHOICES = SortedDict(PROJECT_STATUS_CHOICES + INVENTORY_SOURCE_STATUS_CHOICES + JOB_TEMPLATE_STATUS_CHOICES + DEPRECATED_STATUS_CHOICES).items() + ALL_STATUS_CHOICES = OrderedDict(PROJECT_STATUS_CHOICES + INVENTORY_SOURCE_STATUS_CHOICES + JOB_TEMPLATE_STATUS_CHOICES + DEPRECATED_STATUS_CHOICES).items() class Meta: app_label = 'main' @@ -140,6 +142,11 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): default='ok', editable=False, ) + labels = models.ManyToManyField( + "Label", + blank=True, + related_name='%(class)s_labels' + ) def get_absolute_url(self): real_instance = self.get_real_instance() @@ -209,17 +216,6 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): self.next_job_run = related_schedules[0].next_run self.save(update_fields=['next_schedule', 'next_job_run']) - def mark_inactive(self, save=True): - ''' - When marking a unified job template inactive, also mark its schedules - inactive. - ''' - for schedule in self.schedules.filter(active=True): - schedule.mark_inactive() - schedule.enabled = False - schedule.save() - super(UnifiedJobTemplate, self).mark_inactive(save=save) - def save(self, *args, **kwargs): # If update_fields has been specified, add our field names to it, # if it hasn't been specified, then we're just doing a normal save. @@ -297,16 +293,25 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): ''' return kwargs # Override if needed in subclass. + @property + def notification_templates(self): + ''' + Return notification_templates relevant to this Unified Job Template + ''' + # NOTE: Derived classes should implement + return NotificationTemplate.objects.none() + def create_unified_job(self, **kwargs): ''' Create a new unified job based on this unified job template. ''' - save_unified_job = kwargs.pop('save', True) unified_job_class = self._get_unified_job_class() parent_field_name = unified_job_class._get_parent_field_name() kwargs.pop('%s_id' % parent_field_name, None) create_kwargs = {} - create_kwargs[parent_field_name] = self + m2m_fields = {} + if self.pk: + create_kwargs[parent_field_name] = self for field_name in self._get_unified_job_field_names(): # Foreign keys can be specified as field_name or field_name_id. id_field_name = '%s_id' % field_name @@ -321,16 +326,27 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): value = value.id create_kwargs[id_field_name] = value elif field_name in kwargs: - if field_name == 'extra_vars' and type(kwargs[field_name]) == dict: + if field_name == 'extra_vars' and isinstance(kwargs[field_name], dict): create_kwargs[field_name] = json.dumps(kwargs['extra_vars']) + # We can't get a hold of django.db.models.fields.related.ManyRelatedManager to compare + # so this is the next best thing. + elif kwargs[field_name].__class__.__name__ is 'ManyRelatedManager': + m2m_fields[field_name] = kwargs[field_name] else: create_kwargs[field_name] = kwargs[field_name] elif hasattr(self, field_name): - create_kwargs[field_name] = getattr(self, field_name) + field_obj = self._meta.get_field_by_name(field_name)[0] + # Many to Many can be specified as field_name + if isinstance(field_obj, models.ManyToManyField): + m2m_fields[field_name] = getattr(self, field_name) + else: + create_kwargs[field_name] = getattr(self, field_name) new_kwargs = self._update_unified_job_kwargs(**create_kwargs) unified_job = unified_job_class(**new_kwargs) - if save_unified_job: - unified_job.save() + unified_job.save() + for field_name, src_field_value in m2m_fields.iteritems(): + dest_field = getattr(unified_job, field_name) + dest_field.add(*list(src_field_value.all().values_list('id', flat=True))) return unified_job @@ -385,6 +401,11 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique editable=False, related_name='%(class)s_blocked_jobs+', ) + notifications = models.ManyToManyField( + 'Notification', + editable=False, + related_name='%(class)s_notifications', + ) cancel_flag = models.BooleanField( blank=True, default=False, @@ -462,6 +483,12 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique default='', editable=False, ) + labels = models.ManyToManyField( + "Label", + blank=True, + related_name='%(class)s_labels' + ) + def get_absolute_url(self): real_instance = self.get_real_instance() @@ -470,6 +497,13 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique else: return '' + def get_ui_url(self): + real_instance = self.get_real_instance() + if real_instance != self: + return real_instance.get_ui_url() + else: + return '' + @classmethod def _get_task_class(cls): raise NotImplementedError # Implement in subclasses. @@ -717,7 +751,17 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique tasks that might preclude creating one''' return [] - def start(self, error_callback, **kwargs): + def notification_data(self): + return dict(id=self.id, + name=self.name, + url=self.get_ui_url(), + created_by=smart_text(self.created_by), + started=self.started.isoformat() if self.started is not None else None, + finished=self.finished.isoformat() if self.finished is not None else None, + status=self.status, + traceback=self.result_traceback) + + def start(self, error_callback, success_callback, **kwargs): ''' Start the task running via Celery. ''' @@ -743,7 +787,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique # if field not in needed]) if 'extra_vars' in kwargs: self.handle_extra_data(kwargs['extra_vars']) - task_class().apply_async((self.pk,), opts, link_error=error_callback) + task_class().apply_async((self.pk,), opts, link_error=error_callback, link=success_callback) return True def signal_start(self, **kwargs): @@ -765,7 +809,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique # Sanity check: If we are running unit tests, then run synchronously. if getattr(settings, 'CELERY_UNIT_TEST', False): - return self.start(None, **kwargs) + return self.start(None, None, **kwargs) # Save the pending status, and inform the SocketIO listener. self.update_fields(start_args=json.dumps(kwargs), status='pending') diff --git a/awx/main/notifications/__init__.py b/awx/main/notifications/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/awx/main/notifications/base.py b/awx/main/notifications/base.py new file mode 100644 index 0000000000..a68c88ed46 --- /dev/null +++ b/awx/main/notifications/base.py @@ -0,0 +1,20 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import json + +from django.utils.encoding import smart_text +from django.core.mail.backends.base import BaseEmailBackend + +class TowerBaseEmailBackend(BaseEmailBackend): + + def format_body(self, body): + if "body" in body: + body_actual = body['body'] + else: + body_actual = smart_text("{} #{} had status {} on Ansible Tower, view details at {}\n\n".format(body['friendly_name'], + body['id'], + body['status'], + body['url'])) + body_actual += json.dumps(body, indent=4) + return body_actual diff --git a/awx/main/notifications/email_backend.py b/awx/main/notifications/email_backend.py new file mode 100644 index 0000000000..7ca5690b28 --- /dev/null +++ b/awx/main/notifications/email_backend.py @@ -0,0 +1,31 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import json + +from django.utils.encoding import smart_text +from django.core.mail.backends.smtp import EmailBackend + +class CustomEmailBackend(EmailBackend): + + init_parameters = {"host": {"label": "Host", "type": "string"}, + "port": {"label": "Port", "type": "int"}, + "username": {"label": "Username", "type": "string"}, + "password": {"label": "Password", "type": "password"}, + "use_tls": {"label": "Use TLS", "type": "bool"}, + "use_ssl": {"label": "Use SSL", "type": "bool"}, + "sender": {"label": "Sender Email", "type": "string"}, + "recipients": {"label": "Recipient List", "type": "list"}} + recipient_parameter = "recipients" + sender_parameter = "sender" + + def format_body(self, body): + if "body" in body: + body_actual = body['body'] + else: + body_actual = smart_text("{} #{} had status {} on Ansible Tower, view details at {}\n\n".format(body['friendly_name'], + body['id'], + body['status'], + body['url'])) + body_actual += json.dumps(body, indent=4) + return body_actual diff --git a/awx/main/notifications/hipchat_backend.py b/awx/main/notifications/hipchat_backend.py new file mode 100644 index 0000000000..b34c5e5fd1 --- /dev/null +++ b/awx/main/notifications/hipchat_backend.py @@ -0,0 +1,49 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging + +import requests + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend + +logger = logging.getLogger('awx.main.notifications.hipchat_backend') + +class HipChatBackend(TowerBaseEmailBackend): + + init_parameters = {"token": {"label": "Token", "type": "password"}, + "rooms": {"label": "Destination Rooms", "type": "list"}, + "color": {"label": "Notification Color", "type": "string"}, + "api_url": {"label": "API Url (e.g: https://mycompany.hipchat.com)", "type": "string"}, + "notify": {"label": "Notify room", "type": "bool"}, + "message_from": {"label": "Label to be shown with notification", "type": "string"}} + recipient_parameter = "rooms" + sender_parameter = "message_from" + + def __init__(self, token, color, api_url, notify, fail_silently=False, **kwargs): + super(HipChatBackend, self).__init__(fail_silently=fail_silently) + self.token = token + self.color = color + self.api_url = api_url + self.notify = notify + + def send_messages(self, messages): + sent_messages = 0 + + for m in messages: + for rcp in m.recipients(): + r = requests.post("{}/v2/room/{}/notification".format(self.api_url, rcp), + params={"auth_token": self.token}, + json={"color": self.color, + "message": m.subject, + "notify": self.notify, + "from": m.from_email, + "message_format": "text"}) + if r.status_code != 204: + logger.error(smart_text("Error sending messages: {}".format(r.text))) + if not self.fail_silently: + raise Exception(smart_text("Error sending message to hipchat: {}".format(r.text))) + sent_messages += 1 + return sent_messages diff --git a/awx/main/notifications/irc_backend.py b/awx/main/notifications/irc_backend.py new file mode 100644 index 0000000000..61158bbe5d --- /dev/null +++ b/awx/main/notifications/irc_backend.py @@ -0,0 +1,95 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import time +import ssl +import logging + +import irc.client + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend + +logger = logging.getLogger('awx.main.notifications.irc_backend') + +class IrcBackend(TowerBaseEmailBackend): + + init_parameters = {"server": {"label": "IRC Server Address", "type": "string"}, + "port": {"label": "IRC Server Port", "type": "int"}, + "nickname": {"label": "IRC Nick", "type": "string"}, + "password": {"label": "IRC Server Password", "type": "password"}, + "use_ssl": {"label": "SSL Connection", "type": "bool"}, + "targets": {"label": "Destination Channels or Users", "type": "list"}} + recipient_parameter = "targets" + sender_parameter = None + + def __init__(self, server, port, nickname, password, use_ssl, fail_silently=False, **kwargs): + super(IrcBackend, self).__init__(fail_silently=fail_silently) + self.server = server + self.port = port + self.nickname = nickname + self.password = password if password != "" else None + self.use_ssl = use_ssl + self.connection = None + + def open(self): + if self.connection is not None: + return False + if self.use_ssl: + connection_factory = irc.connection.Factory(wrapper=ssl.wrap_socket) + else: + connection_factory = irc.connection.Factory() + try: + self.reactor = irc.client.Reactor() + self.connection = self.reactor.server().connect( + self.server, + self.port, + self.nickname, + password=self.password, + connect_factory=connection_factory, + ) + except irc.client.ServerConnectionError as e: + logger.error(smart_text("Exception connecting to irc server: {}".format(e))) + if not self.fail_silently: + raise + return True + + def close(self): + if self.connection is None: + return + self.connection = None + + def on_connect(self, connection, event): + for c in self.channels: + if irc.client.is_channel(c): + connection.join(c) + else: + for m in self.channels[c]: + connection.privmsg(c, m.subject) + self.channels_sent += 1 + + def on_join(self, connection, event): + for m in self.channels[event.target]: + connection.privmsg(event.target, m.subject) + self.channels_sent += 1 + + def send_messages(self, messages): + if self.connection is None: + self.open() + self.channels = {} + self.channels_sent = 0 + for m in messages: + for r in m.recipients(): + if r not in self.channels: + self.channels[r] = [] + self.channels[r].append(m) + self.connection.add_global_handler("welcome", self.on_connect) + self.connection.add_global_handler("join", self.on_join) + start_time = time.time() + process_time = time.time() + while self.channels_sent < len(self.channels) and (process_time - start_time) < 60: + self.reactor.process_once(0.1) + process_time = time.time() + self.reactor.disconnect_all() + return self.channels_sent diff --git a/awx/main/notifications/pagerduty_backend.py b/awx/main/notifications/pagerduty_backend.py new file mode 100644 index 0000000000..390fac3d20 --- /dev/null +++ b/awx/main/notifications/pagerduty_backend.py @@ -0,0 +1,50 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging +import pygerduty + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend + +logger = logging.getLogger('awx.main.notifications.pagerduty_backend') + +class PagerDutyBackend(TowerBaseEmailBackend): + + init_parameters = {"subdomain": {"label": "Pagerduty subdomain", "type": "string"}, + "token": {"label": "API Token", "type": "password"}, + "service_key": {"label": "API Service/Integration Key", "type": "string"}, + "client_name": {"label": "Client Identifier", "type": "string"}} + recipient_parameter = "service_key" + sender_parameter = "client_name" + + def __init__(self, subdomain, token, fail_silently=False, **kwargs): + super(PagerDutyBackend, self).__init__(fail_silently=fail_silently) + self.subdomain = subdomain + self.token = token + + def format_body(self, body): + return body + + def send_messages(self, messages): + sent_messages = 0 + + try: + pager = pygerduty.PagerDuty(self.subdomain, self.token) + except Exception as e: + if not self.fail_silently: + raise + logger.error(smart_text("Exception connecting to PagerDuty: {}".format(e))) + for m in messages: + try: + pager.trigger_incident(m.recipients()[0], + description=m.subject, + details=m.body, + client=m.from_email) + sent_messages += 1 + except Exception as e: + logger.error(smart_text("Exception sending messages: {}".format(e))) + if not self.fail_silently: + raise + return sent_messages diff --git a/awx/main/notifications/slack_backend.py b/awx/main/notifications/slack_backend.py new file mode 100644 index 0000000000..ffc52bc44b --- /dev/null +++ b/awx/main/notifications/slack_backend.py @@ -0,0 +1,54 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging +from slackclient import SlackClient + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend + +logger = logging.getLogger('awx.main.notifications.slack_backend') + +class SlackBackend(TowerBaseEmailBackend): + + init_parameters = {"token": {"label": "Token", "type": "password"}, + "channels": {"label": "Destination Channels", "type": "list"}} + recipient_parameter = "channels" + sender_parameter = None + + def __init__(self, token, fail_silently=False, **kwargs): + super(SlackBackend, self).__init__(fail_silently=fail_silently) + self.token = token + self.connection = None + + def open(self): + if self.connection is not None: + return False + self.connection = SlackClient(self.token) + if not self.connection.rtm_connect(): + if not self.fail_silently: + raise Exception("Slack Notification Token is invalid") + return True + + def close(self): + if self.connection is None: + return + self.connection = None + + def send_messages(self, messages): + if self.connection is None: + self.open() + sent_messages = 0 + for m in messages: + try: + for r in m.recipients(): + if r.startswith('#'): + r = r[1:] + self.connection.rtm_send_message(r, m.subject) + sent_messages += 1 + except Exception as e: + logger.error(smart_text("Exception sending messages: {}".format(e))) + if not self.fail_silently: + raise + return sent_messages diff --git a/awx/main/notifications/twilio_backend.py b/awx/main/notifications/twilio_backend.py new file mode 100644 index 0000000000..df411c68c5 --- /dev/null +++ b/awx/main/notifications/twilio_backend.py @@ -0,0 +1,48 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging + +from twilio.rest import TwilioRestClient + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend + +logger = logging.getLogger('awx.main.notifications.twilio_backend') + +class TwilioBackend(TowerBaseEmailBackend): + + init_parameters = {"account_sid": {"label": "Account SID", "type": "string"}, + "account_token": {"label": "Account Token", "type": "password"}, + "from_number": {"label": "Source Phone Number", "type": "string"}, + "to_numbers": {"label": "Destination SMS Numbers", "type": "list"}} + recipient_parameter = "to_numbers" + sender_parameter = "from_number" + + def __init__(self, account_sid, account_token, fail_silently=False, **kwargs): + super(TwilioBackend, self).__init__(fail_silently=fail_silently) + self.account_sid = account_sid + self.account_token = account_token + + def send_messages(self, messages): + sent_messages = 0 + try: + connection = TwilioRestClient(self.account_sid, self.account_token) + except Exception as e: + if not self.fail_silently: + raise + logger.error(smart_text("Exception connecting to Twilio: {}".format(e))) + + for m in messages: + try: + connection.messages.create( + to=m.to, + from_=m.from_email, + body=m.subject) + sent_messages += 1 + except Exception as e: + logger.error(smart_text("Exception sending messages: {}".format(e))) + if not self.fail_silently: + raise + return sent_messages diff --git a/awx/main/notifications/webhook_backend.py b/awx/main/notifications/webhook_backend.py new file mode 100644 index 0000000000..fbefe78037 --- /dev/null +++ b/awx/main/notifications/webhook_backend.py @@ -0,0 +1,42 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import logging +import requests +import json + +from django.utils.encoding import smart_text + +from awx.main.notifications.base import TowerBaseEmailBackend +from awx.main.utils import get_awx_version + +logger = logging.getLogger('awx.main.notifications.webhook_backend') + +class WebhookBackend(TowerBaseEmailBackend): + + init_parameters = {"url": {"label": "Target URL", "type": "string"}, + "headers": {"label": "HTTP Headers", "type": "object"}} + recipient_parameter = "url" + sender_parameter = None + + def __init__(self, headers, fail_silently=False, **kwargs): + self.headers = headers + super(WebhookBackend, self).__init__(fail_silently=fail_silently) + + def format_body(self, body): + return body + + def send_messages(self, messages): + sent_messages = 0 + if 'User-Agent' not in self.headers: + self.headers['User-Agent'] = "Tower {}".format(get_awx_version()) + for m in messages: + r = requests.post("{}".format(m.recipients()[0]), + data=json.dumps(m.body), + headers=self.headers) + if r.status_code >= 400: + logger.error(smart_text("Error sending notification webhook: {}".format(r.text))) + if not self.fail_silently: + raise Exception(smart_text("Error sending notification webhook: {}".format(r.text))) + sent_messages += 1 + return sent_messages diff --git a/awx/main/redact.py b/awx/main/redact.py index 10f7877faa..0e9ad0b5d1 100644 --- a/awx/main/redact.py +++ b/awx/main/redact.py @@ -29,12 +29,10 @@ class UriCleaner(object): username = o.username password = o.password - # Given a python MatchObject, with respect to redactedtext, find and + # Given a python MatchObject, with respect to redactedtext, find and # replace the first occurance of username and the first and second # occurance of password - # TODO: Ideally, we would replace username and password using the index - # that they were found at. uri_str = redactedtext[match.start():match.end()] if username: uri_str = uri_str.replace(username, UriCleaner.REPLACE_STR, 1) diff --git a/awx/main/registrar.py b/awx/main/registrar.py index 6d01ec8d2d..de6673fc5a 100644 --- a/awx/main/registrar.py +++ b/awx/main/registrar.py @@ -3,8 +3,7 @@ import logging -from django.conf import settings -from django.db.models.signals import pre_save, post_save, post_delete, m2m_changed +from django.db.models.signals import pre_save, post_save, pre_delete, m2m_changed logger = logging.getLogger('awx.main.registrar') @@ -14,15 +13,16 @@ class ActivityStreamRegistrar(object): self.models = [] def connect(self, model): - if not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True): + from awx.main.conf import tower_settings + if not getattr(tower_settings, 'ACTIVITY_STREAM_ENABLED', True): return from awx.main.signals import activity_stream_create, activity_stream_update, activity_stream_delete, activity_stream_associate - + if model not in self.models: self.models.append(model) post_save.connect(activity_stream_create, sender=model, dispatch_uid=str(self.__class__) + str(model) + "_create") pre_save.connect(activity_stream_update, sender=model, dispatch_uid=str(self.__class__) + str(model) + "_update") - post_delete.connect(activity_stream_delete, sender=model, dispatch_uid=str(self.__class__) + str(model) + "_delete") + pre_delete.connect(activity_stream_delete, sender=model, dispatch_uid=str(self.__class__) + str(model) + "_delete") for m2mfield in model._meta.many_to_many: try: @@ -36,7 +36,7 @@ class ActivityStreamRegistrar(object): if model in self.models: post_save.disconnect(dispatch_uid=str(self.__class__) + str(model) + "_create") pre_save.disconnect(dispatch_uid=str(self.__class__) + str(model) + "_update") - post_delete.disconnect(dispatch_uid=str(self.__class__) + str(model) + "_delete") + pre_delete.disconnect(dispatch_uid=str(self.__class__) + str(model) + "_delete") self.models.pop(model) diff --git a/awx/main/signals.py b/awx/main/signals.py index 2f426b74b3..7389f01763 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -8,8 +8,7 @@ import threading import json # Django -from django.conf import settings -from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed +from django.db.models.signals import post_save, pre_delete, post_delete, m2m_changed from django.dispatch import receiver # Django-CRUM @@ -22,14 +21,14 @@ from awx.api.serializers import * # noqa from awx.main.utils import model_instance_diff, model_to_dict, camelcase_to_underscore, emit_websocket_notification from awx.main.utils import ignore_inventory_computed_fields, ignore_inventory_group_removal, _inventory_updates from awx.main.tasks import update_inventory_computed_fields +from awx.main.conf import tower_settings __all__ = [] logger = logging.getLogger('awx.main.signals') -# Update has_active_failures for inventory/groups when a Host/Group is deleted -# or marked inactive, when a Host-Group or Group-Group relationship is updated, -# or when a Job is deleted or marked inactive. +# Update has_active_failures for inventory/groups when a Host/Group is deleted, +# when a Host-Group or Group-Group relationship is updated, or when a Job is deleted def emit_job_event_detail(sender, **kwargs): instance = kwargs['instance'] @@ -69,7 +68,7 @@ def emit_update_inventory_computed_fields(sender, **kwargs): else: sender_name = unicode(sender._meta.verbose_name) if kwargs['signal'] == post_save: - if sender == Job and instance.active: + if sender == Job: return sender_action = 'saved' elif kwargs['signal'] == post_delete: @@ -92,7 +91,6 @@ def emit_update_inventory_on_created_or_deleted(sender, **kwargs): return instance = kwargs['instance'] if ('created' in kwargs and kwargs['created']) or \ - (hasattr(instance, '_saved_active_state') and instance._saved_active_state != instance.active) or \ kwargs['signal'] == post_delete: pass else: @@ -108,34 +106,119 @@ def emit_update_inventory_on_created_or_deleted(sender, **kwargs): if inventory is not None: update_inventory_computed_fields.delay(inventory.id, True) -def store_initial_active_state(sender, **kwargs): - instance = kwargs['instance'] - if instance.id is not None: - instance._saved_active_state = sender.objects.get(id=instance.id).active - else: - instance._saved_active_state = True +def rebuild_role_ancestor_list(reverse, model, instance, pk_set, action, **kwargs): + 'When a role parent is added or removed, update our role hierarchy list' + if action == 'post_add': + if reverse: + model.rebuild_role_ancestor_list(list(pk_set), []) + else: + model.rebuild_role_ancestor_list([instance.id], []) + + if action in ['post_remove', 'post_clear']: + if reverse: + model.rebuild_role_ancestor_list([], list(pk_set)) + else: + model.rebuild_role_ancestor_list([], [instance.id]) + +def sync_superuser_status_to_rbac(instance, **kwargs): + 'When the is_superuser flag is changed on a user, reflect that in the membership of the System Admnistrator role' + if instance.is_superuser: + Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR).members.add(instance) + else: + Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR).members.remove(instance) + +def create_user_role(instance, **kwargs): + try: + Role.objects.get( + content_type=ContentType.objects.get_for_model(instance), + object_id=instance.id, + role_field='admin_role' + ) + except Role.DoesNotExist: + role = Role.objects.create( + role_field='admin_role', + content_object = instance, + ) + role.members.add(instance) + +def org_admin_edit_members(instance, action, model, reverse, pk_set, **kwargs): + content_type = ContentType.objects.get_for_model(Organization) + + if reverse: + return + else: + if instance.content_type == content_type and \ + instance.content_object.member_role.id == instance.id: + items = model.objects.filter(pk__in=pk_set).all() + for user in items: + if action == 'post_add': + instance.content_object.admin_role.children.add(user.admin_role) + if action == 'pre_remove': + instance.content_object.admin_role.children.remove(user.admin_role) + +def rbac_activity_stream(instance, sender, **kwargs): + user_type = ContentType.objects.get_for_model(User) + # Only if we are associating/disassociating + if kwargs['action'] in ['pre_add', 'pre_remove']: + # Only if this isn't for the User.admin_role + if hasattr(instance, 'content_type'): + if instance.content_type in [None, user_type]: + return + elif sender.__name__ == 'Role_parents': + role = kwargs['model'].objects.filter(pk__in=kwargs['pk_set']).first() + # don't record implicit creation / parents + if role is not None and role.content_type is not None: + parent = role.content_type.name + "." + role.role_field + # Get the list of implicit parents that were defined at the class level. + # We have to take this list from the class property to avoid including parents + # that may have been added since the creation of the ImplicitRoleField + implicit_parents = getattr(instance.content_object.__class__, instance.role_field).field.parent_role + if type(implicit_parents) != list: + implicit_parents = [implicit_parents] + # Ignore any singleton parents we find. If the parent for the role + # matches any of the implicit parents we find, skip recording the activity stream. + for ip in implicit_parents: + if '.' not in ip and 'singleton:' not in ip: + ip = instance.content_type.name + "." + ip + if parent == ip: + return + else: + role = instance + instance = instance.content_object + else: + role = kwargs['model'].objects.filter(pk__in=kwargs['pk_set']).first() + + activity_stream_associate(sender, instance, role=role, **kwargs) + +def cleanup_detached_labels_on_deleted_parent(sender, instance, **kwargs): + for l in instance.labels.all(): + if l.is_candidate_for_detach(): + l.delete() -pre_save.connect(store_initial_active_state, sender=Host) post_save.connect(emit_update_inventory_on_created_or_deleted, sender=Host) post_delete.connect(emit_update_inventory_on_created_or_deleted, sender=Host) -pre_save.connect(store_initial_active_state, sender=Group) post_save.connect(emit_update_inventory_on_created_or_deleted, sender=Group) post_delete.connect(emit_update_inventory_on_created_or_deleted, sender=Group) m2m_changed.connect(emit_update_inventory_computed_fields, sender=Group.hosts.through) m2m_changed.connect(emit_update_inventory_computed_fields, sender=Group.parents.through) m2m_changed.connect(emit_update_inventory_computed_fields, sender=Host.inventory_sources.through) m2m_changed.connect(emit_update_inventory_computed_fields, sender=Group.inventory_sources.through) -pre_save.connect(store_initial_active_state, sender=InventorySource) post_save.connect(emit_update_inventory_on_created_or_deleted, sender=InventorySource) post_delete.connect(emit_update_inventory_on_created_or_deleted, sender=InventorySource) -pre_save.connect(store_initial_active_state, sender=Job) post_save.connect(emit_update_inventory_on_created_or_deleted, sender=Job) post_delete.connect(emit_update_inventory_on_created_or_deleted, sender=Job) post_save.connect(emit_job_event_detail, sender=JobEvent) post_save.connect(emit_ad_hoc_command_event_detail, sender=AdHocCommandEvent) +m2m_changed.connect(rebuild_role_ancestor_list, Role.parents.through) +m2m_changed.connect(org_admin_edit_members, Role.members.through) +m2m_changed.connect(rbac_activity_stream, Role.members.through) +m2m_changed.connect(rbac_activity_stream, Role.parents.through) +post_save.connect(sync_superuser_status_to_rbac, sender=User) +post_save.connect(create_user_role, sender=User) +pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJob) +pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJobTemplate) -# Migrate hosts, groups to parent group(s) whenever a group is deleted or -# marked as inactive. +# Migrate hosts, groups to parent group(s) whenever a group is deleted @receiver(pre_delete, sender=Group) def save_related_pks_before_group_delete(sender, **kwargs): @@ -155,83 +238,33 @@ def migrate_children_from_deleted_group_to_parent_groups(sender, **kwargs): parents_pks = getattr(instance, '_saved_parents_pks', []) hosts_pks = getattr(instance, '_saved_hosts_pks', []) children_pks = getattr(instance, '_saved_children_pks', []) + is_updating = getattr(_inventory_updates, 'is_updating', False) + with ignore_inventory_group_removal(): with ignore_inventory_computed_fields(): if parents_pks: - for parent_group in Group.objects.filter(pk__in=parents_pks, active=True): - for child_host in Host.objects.filter(pk__in=hosts_pks, active=True): + for parent_group in Group.objects.filter(pk__in=parents_pks): + for child_host in Host.objects.filter(pk__in=hosts_pks): logger.debug('adding host %s to parent %s after group deletion', child_host, parent_group) parent_group.hosts.add(child_host) - for child_group in Group.objects.filter(pk__in=children_pks, active=True): + for child_group in Group.objects.filter(pk__in=children_pks): logger.debug('adding group %s to parent %s after group deletion', child_group, parent_group) parent_group.children.add(child_group) inventory_pk = getattr(instance, '_saved_inventory_pk', None) - if inventory_pk: + if inventory_pk and not is_updating: try: - inventory = Inventory.objects.get(pk=inventory_pk, active=True) + inventory = Inventory.objects.get(pk=inventory_pk) inventory.update_computed_fields() except Inventory.DoesNotExist: pass -@receiver(pre_save, sender=Group) -def save_related_pks_before_group_marked_inactive(sender, **kwargs): - if getattr(_inventory_updates, 'is_removing', False): - return - instance = kwargs['instance'] - if not instance.pk or instance.active: - return - instance._saved_inventory_pk = instance.inventory.pk - instance._saved_parents_pks = set(instance.parents.values_list('pk', flat=True)) - instance._saved_hosts_pks = set(instance.hosts.values_list('pk', flat=True)) - instance._saved_children_pks = set(instance.children.values_list('pk', flat=True)) - instance._saved_inventory_source_pk = instance.inventory_source.pk -@receiver(post_save, sender=Group) -def migrate_children_from_inactive_group_to_parent_groups(sender, **kwargs): - if getattr(_inventory_updates, 'is_removing', False): - return - instance = kwargs['instance'] - if instance.active: - return - parents_pks = getattr(instance, '_saved_parents_pks', []) - hosts_pks = getattr(instance, '_saved_hosts_pks', []) - children_pks = getattr(instance, '_saved_children_pks', []) - with ignore_inventory_group_removal(): - with ignore_inventory_computed_fields(): - if parents_pks: - for parent_group in Group.objects.filter(pk__in=parents_pks, active=True): - for child_host in Host.objects.filter(pk__in=hosts_pks, active=True): - logger.debug('moving host %s to parent %s after marking group %s inactive', - child_host, parent_group, instance) - parent_group.hosts.add(child_host) - for child_group in Group.objects.filter(pk__in=children_pks, active=True): - logger.debug('moving group %s to parent %s after marking group %s inactive', - child_group, parent_group, instance) - parent_group.children.add(child_group) - parent_group.children.remove(instance) - inventory_source_pk = getattr(instance, '_saved_inventory_source_pk', None) - if inventory_source_pk: - try: - inventory_source = InventorySource.objects.get(pk=inventory_source_pk, active=True) - inventory_source.mark_inactive() - except InventorySource.DoesNotExist: - pass - inventory_pk = getattr(instance, '_saved_inventory_pk', None) - if not getattr(_inventory_updates, 'is_updating', False): - if inventory_pk: - try: - inventory = Inventory.objects.get(pk=inventory_pk, active=True) - inventory.update_computed_fields() - except Inventory.DoesNotExist: - pass - -# Update host pointers to last_job and last_job_host_summary when a job is -# marked inactive or deleted. +# Update host pointers to last_job and last_job_host_summary when a job is deleted def _update_host_last_jhs(host): - jhs_qs = JobHostSummary.objects.filter(job__active=True, host__pk=host.pk) + jhs_qs = JobHostSummary.objects.filter(host__pk=host.pk) try: jhs = jhs_qs.order_by('-job__pk')[0] except IndexError: @@ -247,19 +280,10 @@ def _update_host_last_jhs(host): if update_fields: host.save(update_fields=update_fields) -@receiver(post_save, sender=Job) -def update_host_last_job_when_job_marked_inactive(sender, **kwargs): - instance = kwargs['instance'] - if instance.active: - return - hosts_qs = Host.objects.filter(active=True, last_job__pk=instance.pk) - for host in hosts_qs: - _update_host_last_jhs(host) - @receiver(pre_delete, sender=Job) def save_host_pks_before_job_delete(sender, **kwargs): instance = kwargs['instance'] - hosts_qs = Host.objects.filter(active=True, last_job__pk=instance.pk) + hosts_qs = Host.objects.filter( last_job__pk=instance.pk) instance._saved_hosts_pks = set(hosts_qs.values_list('pk', flat=True)) @receiver(post_delete, sender=Job) @@ -273,7 +297,7 @@ def update_host_last_job_after_job_deleted(sender, **kwargs): class ActivityStreamEnabled(threading.local): def __init__(self): - self.enabled = getattr(settings, 'ACTIVITY_STREAM_ENABLED', True) + self.enabled = getattr(tower_settings, 'ACTIVITY_STREAM_ENABLED', True) def __nonzero__(self): return bool(self.enabled) @@ -299,13 +323,16 @@ model_serializer_mapping = { Host: HostSerializer, Group: GroupSerializer, InventorySource: InventorySourceSerializer, + CustomInventoryScript: CustomInventoryScriptSerializer, Credential: CredentialSerializer, Team: TeamSerializer, Project: ProjectSerializer, - Permission: PermissionSerializer, JobTemplate: JobTemplateSerializer, Job: JobSerializer, AdHocCommand: AdHocCommandSerializer, + TowerSettings: TowerSettingsSerializer, + NotificationTemplate: NotificationTemplateSerializer, + Notification: NotificationSerializer, } def activity_stream_create(sender, instance, created, **kwargs): @@ -313,14 +340,22 @@ def activity_stream_create(sender, instance, created, **kwargs): # Skip recording any inventory source directly associated with a group. if isinstance(instance, InventorySource) and instance.group: return - # TODO: Rethink details of the new instance object1 = camelcase_to_underscore(instance.__class__.__name__) + changes = model_to_dict(instance, model_serializer_mapping) + # Special case where Job survey password variables need to be hidden + if type(instance) == Job: + if 'extra_vars' in changes: + changes['extra_vars'] = instance.display_extra_vars() activity_entry = ActivityStream( operation='create', object1=object1, - changes=json.dumps(model_to_dict(instance, model_serializer_mapping))) + changes=json.dumps(changes)) activity_entry.save() - getattr(activity_entry, object1).add(instance) + #TODO: Weird situation where cascade SETNULL doesn't work + # it might actually be a good idea to remove all of these FK references since + # we don't really use them anyway. + if type(instance) is not TowerSettings: + getattr(activity_entry, object1).add(instance) def activity_stream_update(sender, instance, **kwargs): if instance.id is None: @@ -332,11 +367,6 @@ def activity_stream_update(sender, instance, **kwargs): except sender.DoesNotExist: return - # Handle the AWX mark-inactive for delete event - if hasattr(instance, 'active') and not instance.active: - activity_stream_delete(sender, instance, **kwargs) - return - new = instance changes = model_instance_diff(old, new, model_serializer_mapping) if changes is None: @@ -347,19 +377,16 @@ def activity_stream_update(sender, instance, **kwargs): object1=object1, changes=json.dumps(changes)) activity_entry.save() - getattr(activity_entry, object1).add(instance) + if type(instance) is not TowerSettings: + getattr(activity_entry, object1).add(instance) def activity_stream_delete(sender, instance, **kwargs): if not activity_stream_enabled: return - try: - old = sender.objects.get(id=instance.id) - except sender.DoesNotExist: - return # Skip recording any inventory source directly associated with a group. if isinstance(instance, InventorySource) and instance.group: return - changes = model_instance_diff(old, instance) + changes = model_to_dict(instance) object1 = camelcase_to_underscore(instance.__class__.__name__) activity_entry = ActivityStream( operation='delete', @@ -370,7 +397,7 @@ def activity_stream_delete(sender, instance, **kwargs): def activity_stream_associate(sender, instance, **kwargs): if not activity_stream_enabled: return - if 'pre_add' in kwargs['action'] or 'pre_remove' in kwargs['action']: + if kwargs['action'] in ['pre_add', 'pre_remove']: if kwargs['action'] == 'pre_add': action = 'associate' elif kwargs['action'] == 'pre_remove': @@ -380,15 +407,33 @@ def activity_stream_associate(sender, instance, **kwargs): obj1 = instance object1=camelcase_to_underscore(obj1.__class__.__name__) obj_rel = sender.__module__ + "." + sender.__name__ + for entity_acted in kwargs['pk_set']: obj2 = kwargs['model'] obj2_id = entity_acted - obj2_actual = obj2.objects.get(id=obj2_id) - object2 = camelcase_to_underscore(obj2.__name__) - # Skip recording any inventory source changes here. + obj2_actual = obj2.objects.filter(id=obj2_id) + if not obj2_actual.exists(): + continue + obj2_actual = obj2_actual[0] + if isinstance(obj2_actual, Role) and obj2_actual.content_object is not None: + obj2_actual = obj2_actual.content_object + object2 = camelcase_to_underscore(obj2_actual.__class__.__name__) + else: + object2 = camelcase_to_underscore(obj2.__name__) + # Skip recording any inventory source, or system job template changes here. if isinstance(obj1, InventorySource) or isinstance(obj2_actual, InventorySource): continue + if isinstance(obj1, SystemJobTemplate) or isinstance(obj2_actual, SystemJobTemplate): + continue + if isinstance(obj1, SystemJob) or isinstance(obj2_actual, SystemJob): + continue activity_entry = ActivityStream( + changes=json.dumps(dict(object1=object1, + object1_pk=obj1.pk, + object2=object2, + object2_pk=obj2_id, + action=action, + relationship=obj_rel)), operation=action, object1=object1, object2=object2, @@ -397,6 +442,23 @@ def activity_stream_associate(sender, instance, **kwargs): getattr(activity_entry, object1).add(obj1) getattr(activity_entry, object2).add(obj2_actual) + # Record the role for RBAC changes + if 'role' in kwargs: + role = kwargs['role'] + if role.content_object is not None: + obj_rel = '.'.join([role.content_object.__module__, + role.content_object.__class__.__name__, + role.role_field]) + + # If the m2m is from the User side we need to + # set the content_object of the Role for our entry. + if type(instance) == User and role.content_object is not None: + getattr(activity_entry, role.content_type.name.replace(' ', '_')).add(role.content_object) + + activity_entry.role.add(role) + activity_entry.object_relationship_type = obj_rel + activity_entry.save() + @receiver(current_user_getter) def get_current_user_from_drf_request(sender, **kwargs): diff --git a/awx/main/migrations/0001_v12b1_initial.py b/awx/main/south_migrations/0001_v12b1_initial.py similarity index 100% rename from awx/main/migrations/0001_v12b1_initial.py rename to awx/main/south_migrations/0001_v12b1_initial.py diff --git a/awx/main/migrations/0002_v12b2_changes.py b/awx/main/south_migrations/0002_v12b2_changes.py similarity index 99% rename from awx/main/migrations/0002_v12b2_changes.py rename to awx/main/south_migrations/0002_v12b2_changes.py index 06fd7bd219..da4992b514 100644 --- a/awx/main/migrations/0002_v12b2_changes.py +++ b/awx/main/south_migrations/0002_v12b2_changes.py @@ -661,4 +661,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0003_v12b2_changes.py b/awx/main/south_migrations/0003_v12b2_changes.py similarity index 100% rename from awx/main/migrations/0003_v12b2_changes.py rename to awx/main/south_migrations/0003_v12b2_changes.py diff --git a/awx/main/migrations/0004_v12b2_changes.py b/awx/main/south_migrations/0004_v12b2_changes.py similarity index 99% rename from awx/main/migrations/0004_v12b2_changes.py rename to awx/main/south_migrations/0004_v12b2_changes.py index f8984566dc..796f3a3314 100644 --- a/awx/main/migrations/0004_v12b2_changes.py +++ b/awx/main/south_migrations/0004_v12b2_changes.py @@ -340,4 +340,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0005_v12b2_changes.py b/awx/main/south_migrations/0005_v12b2_changes.py similarity index 99% rename from awx/main/migrations/0005_v12b2_changes.py rename to awx/main/south_migrations/0005_v12b2_changes.py index 7b136aa916..6a451eec97 100644 --- a/awx/main/migrations/0005_v12b2_changes.py +++ b/awx/main/south_migrations/0005_v12b2_changes.py @@ -270,4 +270,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0006_v12b2_changes.py b/awx/main/south_migrations/0006_v12b2_changes.py similarity index 99% rename from awx/main/migrations/0006_v12b2_changes.py rename to awx/main/south_migrations/0006_v12b2_changes.py index 8193359d54..9440d54b72 100644 --- a/awx/main/migrations/0006_v12b2_changes.py +++ b/awx/main/south_migrations/0006_v12b2_changes.py @@ -255,4 +255,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0007_v12b2_changes.py b/awx/main/south_migrations/0007_v12b2_changes.py similarity index 99% rename from awx/main/migrations/0007_v12b2_changes.py rename to awx/main/south_migrations/0007_v12b2_changes.py index 1a08e77746..2894db993a 100644 --- a/awx/main/migrations/0007_v12b2_changes.py +++ b/awx/main/south_migrations/0007_v12b2_changes.py @@ -268,4 +268,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0008_v12changes.py b/awx/main/south_migrations/0008_v12changes.py similarity index 99% rename from awx/main/migrations/0008_v12changes.py rename to awx/main/south_migrations/0008_v12changes.py index c8be2a290e..ea98d42f3e 100644 --- a/awx/main/migrations/0008_v12changes.py +++ b/awx/main/south_migrations/0008_v12changes.py @@ -257,4 +257,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0009_v13_changes.py b/awx/main/south_migrations/0009_v13_changes.py similarity index 99% rename from awx/main/migrations/0009_v13_changes.py rename to awx/main/south_migrations/0009_v13_changes.py index 9fdf67f616..51db04032b 100644 --- a/awx/main/migrations/0009_v13_changes.py +++ b/awx/main/south_migrations/0009_v13_changes.py @@ -405,4 +405,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0010_v13_changes.py b/awx/main/south_migrations/0010_v13_changes.py similarity index 99% rename from awx/main/migrations/0010_v13_changes.py rename to awx/main/south_migrations/0010_v13_changes.py index f57569f820..239852d336 100644 --- a/awx/main/migrations/0010_v13_changes.py +++ b/awx/main/south_migrations/0010_v13_changes.py @@ -518,4 +518,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0011_v13_encrypt_passwords.py b/awx/main/south_migrations/0011_v13_encrypt_passwords.py similarity index 100% rename from awx/main/migrations/0011_v13_encrypt_passwords.py rename to awx/main/south_migrations/0011_v13_encrypt_passwords.py diff --git a/awx/main/migrations/0012_v13_changes.py b/awx/main/south_migrations/0012_v13_changes.py similarity index 99% rename from awx/main/migrations/0012_v13_changes.py rename to awx/main/south_migrations/0012_v13_changes.py index eb3bf704a4..1826d17d8e 100644 --- a/awx/main/migrations/0012_v13_changes.py +++ b/awx/main/south_migrations/0012_v13_changes.py @@ -327,4 +327,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0013_v13_changes.py b/awx/main/south_migrations/0013_v13_changes.py similarity index 99% rename from awx/main/migrations/0013_v13_changes.py rename to awx/main/south_migrations/0013_v13_changes.py index 723416eba6..0fe5bddf26 100644 --- a/awx/main/migrations/0013_v13_changes.py +++ b/awx/main/south_migrations/0013_v13_changes.py @@ -331,4 +331,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0014_v13_changes.py b/awx/main/south_migrations/0014_v13_changes.py similarity index 99% rename from awx/main/migrations/0014_v13_changes.py rename to awx/main/south_migrations/0014_v13_changes.py index f706a6938d..4416539998 100644 --- a/awx/main/migrations/0014_v13_changes.py +++ b/awx/main/south_migrations/0014_v13_changes.py @@ -336,4 +336,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0015_v14_changes.py b/awx/main/south_migrations/0015_v14_changes.py similarity index 99% rename from awx/main/migrations/0015_v14_changes.py rename to awx/main/south_migrations/0015_v14_changes.py index 042a79a3a9..bcb8dd06ea 100644 --- a/awx/main/migrations/0015_v14_changes.py +++ b/awx/main/south_migrations/0015_v14_changes.py @@ -335,4 +335,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0016_v14_changes.py b/awx/main/south_migrations/0016_v14_changes.py similarity index 99% rename from awx/main/migrations/0016_v14_changes.py rename to awx/main/south_migrations/0016_v14_changes.py index b480df3a30..eae2f42094 100644 --- a/awx/main/migrations/0016_v14_changes.py +++ b/awx/main/south_migrations/0016_v14_changes.py @@ -427,4 +427,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0017_v14_changes.py b/awx/main/south_migrations/0017_v14_changes.py similarity index 99% rename from awx/main/migrations/0017_v14_changes.py rename to awx/main/south_migrations/0017_v14_changes.py index 3593f369fa..af1c4821e4 100644 --- a/awx/main/migrations/0017_v14_changes.py +++ b/awx/main/south_migrations/0017_v14_changes.py @@ -388,4 +388,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0018_v14_changes.py b/awx/main/south_migrations/0018_v14_changes.py similarity index 100% rename from awx/main/migrations/0018_v14_changes.py rename to awx/main/south_migrations/0018_v14_changes.py diff --git a/awx/main/migrations/0019_v14_changes.py b/awx/main/south_migrations/0019_v14_changes.py similarity index 99% rename from awx/main/migrations/0019_v14_changes.py rename to awx/main/south_migrations/0019_v14_changes.py index a541e998d0..20932fbf8f 100644 --- a/awx/main/migrations/0019_v14_changes.py +++ b/awx/main/south_migrations/0019_v14_changes.py @@ -497,4 +497,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0020_v14_changes.py b/awx/main/south_migrations/0020_v14_changes.py similarity index 99% rename from awx/main/migrations/0020_v14_changes.py rename to awx/main/south_migrations/0020_v14_changes.py index d561dc8d1a..829870b256 100644 --- a/awx/main/migrations/0020_v14_changes.py +++ b/awx/main/south_migrations/0020_v14_changes.py @@ -451,4 +451,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0021_v14_changes.py b/awx/main/south_migrations/0021_v14_changes.py similarity index 99% rename from awx/main/migrations/0021_v14_changes.py rename to awx/main/south_migrations/0021_v14_changes.py index e8678f652a..1d2b4c02e4 100644 --- a/awx/main/migrations/0021_v14_changes.py +++ b/awx/main/south_migrations/0021_v14_changes.py @@ -501,4 +501,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0022_v14_changes.py b/awx/main/south_migrations/0022_v14_changes.py similarity index 100% rename from awx/main/migrations/0022_v14_changes.py rename to awx/main/south_migrations/0022_v14_changes.py diff --git a/awx/main/migrations/0023_v14_changes.py b/awx/main/south_migrations/0023_v14_changes.py similarity index 99% rename from awx/main/migrations/0023_v14_changes.py rename to awx/main/south_migrations/0023_v14_changes.py index 0173c0f9c6..cf0425adff 100644 --- a/awx/main/migrations/0023_v14_changes.py +++ b/awx/main/south_migrations/0023_v14_changes.py @@ -464,4 +464,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0024_v14_changes.py b/awx/main/south_migrations/0024_v14_changes.py similarity index 99% rename from awx/main/migrations/0024_v14_changes.py rename to awx/main/south_migrations/0024_v14_changes.py index 25d5a58fb1..596dbb5f52 100644 --- a/awx/main/migrations/0024_v14_changes.py +++ b/awx/main/south_migrations/0024_v14_changes.py @@ -395,4 +395,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0025_v14_changes.py b/awx/main/south_migrations/0025_v14_changes.py similarity index 100% rename from awx/main/migrations/0025_v14_changes.py rename to awx/main/south_migrations/0025_v14_changes.py diff --git a/awx/main/migrations/0026_v14_changes.py b/awx/main/south_migrations/0026_v14_changes.py similarity index 99% rename from awx/main/migrations/0026_v14_changes.py rename to awx/main/south_migrations/0026_v14_changes.py index 54fdad9e30..cbf6351ec0 100644 --- a/awx/main/migrations/0026_v14_changes.py +++ b/awx/main/south_migrations/0026_v14_changes.py @@ -417,4 +417,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0027_v14_changes.py b/awx/main/south_migrations/0027_v14_changes.py similarity index 100% rename from awx/main/migrations/0027_v14_changes.py rename to awx/main/south_migrations/0027_v14_changes.py diff --git a/awx/main/migrations/0028_v14_changes.py b/awx/main/south_migrations/0028_v14_changes.py similarity index 100% rename from awx/main/migrations/0028_v14_changes.py rename to awx/main/south_migrations/0028_v14_changes.py diff --git a/awx/main/migrations/0029_v14_changes.py b/awx/main/south_migrations/0029_v14_changes.py similarity index 100% rename from awx/main/migrations/0029_v14_changes.py rename to awx/main/south_migrations/0029_v14_changes.py diff --git a/awx/main/migrations/0030_v145_changes.py b/awx/main/south_migrations/0030_v145_changes.py similarity index 100% rename from awx/main/migrations/0030_v145_changes.py rename to awx/main/south_migrations/0030_v145_changes.py diff --git a/awx/main/migrations/0031_v145_changes.py b/awx/main/south_migrations/0031_v145_changes.py similarity index 100% rename from awx/main/migrations/0031_v145_changes.py rename to awx/main/south_migrations/0031_v145_changes.py diff --git a/awx/main/migrations/0032_v145_changes.py b/awx/main/south_migrations/0032_v145_changes.py similarity index 100% rename from awx/main/migrations/0032_v145_changes.py rename to awx/main/south_migrations/0032_v145_changes.py diff --git a/awx/main/migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py b/awx/main/south_migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py similarity index 99% rename from awx/main/migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py rename to awx/main/south_migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py index ba67bd835f..a963531fd0 100644 --- a/awx/main/migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py +++ b/awx/main/south_migrations/0033_auto__chg_field_jobevent_created__chg_field_jobevent_modified.py @@ -427,4 +427,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0034_v148_changes.py b/awx/main/south_migrations/0034_v148_changes.py similarity index 99% rename from awx/main/migrations/0034_v148_changes.py rename to awx/main/south_migrations/0034_v148_changes.py index be0d8f88ed..8a6e982c4d 100644 --- a/awx/main/migrations/0034_v148_changes.py +++ b/awx/main/south_migrations/0034_v148_changes.py @@ -442,4 +442,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0035_v148_changes.py b/awx/main/south_migrations/0035_v148_changes.py similarity index 99% rename from awx/main/migrations/0035_v148_changes.py rename to awx/main/south_migrations/0035_v148_changes.py index 354b7b166f..0b0fd4bb04 100644 --- a/awx/main/migrations/0035_v148_changes.py +++ b/awx/main/south_migrations/0035_v148_changes.py @@ -1408,4 +1408,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0036_v148_changes.py b/awx/main/south_migrations/0036_v148_changes.py similarity index 100% rename from awx/main/migrations/0036_v148_changes.py rename to awx/main/south_migrations/0036_v148_changes.py diff --git a/awx/main/migrations/0037_v148_changes.py b/awx/main/south_migrations/0037_v148_changes.py similarity index 99% rename from awx/main/migrations/0037_v148_changes.py rename to awx/main/south_migrations/0037_v148_changes.py index 587f471430..36fff3cb02 100644 --- a/awx/main/migrations/0037_v148_changes.py +++ b/awx/main/south_migrations/0037_v148_changes.py @@ -792,4 +792,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0038_v148_changes.py b/awx/main/south_migrations/0038_v148_changes.py similarity index 99% rename from awx/main/migrations/0038_v148_changes.py rename to awx/main/south_migrations/0038_v148_changes.py index 4c1d877d7e..d172989417 100644 --- a/awx/main/migrations/0038_v148_changes.py +++ b/awx/main/south_migrations/0038_v148_changes.py @@ -497,4 +497,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0039_v148_changes.py b/awx/main/south_migrations/0039_v148_changes.py similarity index 99% rename from awx/main/migrations/0039_v148_changes.py rename to awx/main/south_migrations/0039_v148_changes.py index 2fdaf3800a..977f69df69 100644 --- a/awx/main/migrations/0039_v148_changes.py +++ b/awx/main/south_migrations/0039_v148_changes.py @@ -449,4 +449,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0040_v200_changes.py b/awx/main/south_migrations/0040_v200_changes.py similarity index 100% rename from awx/main/migrations/0040_v200_changes.py rename to awx/main/south_migrations/0040_v200_changes.py diff --git a/awx/main/migrations/0041_v200_changes.py b/awx/main/south_migrations/0041_v200_changes.py similarity index 100% rename from awx/main/migrations/0041_v200_changes.py rename to awx/main/south_migrations/0041_v200_changes.py diff --git a/awx/main/migrations/0042_v200_changes.py b/awx/main/south_migrations/0042_v200_changes.py similarity index 100% rename from awx/main/migrations/0042_v200_changes.py rename to awx/main/south_migrations/0042_v200_changes.py diff --git a/awx/main/migrations/0043_v1411_changes.py b/awx/main/south_migrations/0043_v1411_changes.py similarity index 99% rename from awx/main/migrations/0043_v1411_changes.py rename to awx/main/south_migrations/0043_v1411_changes.py index 8abe29675a..1233cb28b2 100644 --- a/awx/main/migrations/0043_v1411_changes.py +++ b/awx/main/south_migrations/0043_v1411_changes.py @@ -436,4 +436,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0044_v1411_changes.py b/awx/main/south_migrations/0044_v1411_changes.py similarity index 100% rename from awx/main/migrations/0044_v1411_changes.py rename to awx/main/south_migrations/0044_v1411_changes.py diff --git a/awx/main/migrations/0045_v1411_changes.py b/awx/main/south_migrations/0045_v1411_changes.py similarity index 100% rename from awx/main/migrations/0045_v1411_changes.py rename to awx/main/south_migrations/0045_v1411_changes.py diff --git a/awx/main/migrations/0046_v200_changes.py b/awx/main/south_migrations/0046_v200_changes.py similarity index 99% rename from awx/main/migrations/0046_v200_changes.py rename to awx/main/south_migrations/0046_v200_changes.py index 17b38fed54..71272ae571 100644 --- a/awx/main/migrations/0046_v200_changes.py +++ b/awx/main/south_migrations/0046_v200_changes.py @@ -437,4 +437,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0047_v200_changes.py b/awx/main/south_migrations/0047_v200_changes.py similarity index 100% rename from awx/main/migrations/0047_v200_changes.py rename to awx/main/south_migrations/0047_v200_changes.py diff --git a/awx/main/migrations/0048_v200_changes.py b/awx/main/south_migrations/0048_v200_changes.py similarity index 100% rename from awx/main/migrations/0048_v200_changes.py rename to awx/main/south_migrations/0048_v200_changes.py diff --git a/awx/main/migrations/0049_v200_changes.py b/awx/main/south_migrations/0049_v200_changes.py similarity index 100% rename from awx/main/migrations/0049_v200_changes.py rename to awx/main/south_migrations/0049_v200_changes.py diff --git a/awx/main/migrations/0050_v200_changes.py b/awx/main/south_migrations/0050_v200_changes.py similarity index 100% rename from awx/main/migrations/0050_v200_changes.py rename to awx/main/south_migrations/0050_v200_changes.py diff --git a/awx/main/migrations/0051_v200_changes.py b/awx/main/south_migrations/0051_v200_changes.py similarity index 99% rename from awx/main/migrations/0051_v200_changes.py rename to awx/main/south_migrations/0051_v200_changes.py index 268e075769..5d948183fe 100644 --- a/awx/main/migrations/0051_v200_changes.py +++ b/awx/main/south_migrations/0051_v200_changes.py @@ -440,4 +440,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0052_v210_changes.py b/awx/main/south_migrations/0052_v210_changes.py similarity index 100% rename from awx/main/migrations/0052_v210_changes.py rename to awx/main/south_migrations/0052_v210_changes.py diff --git a/awx/main/migrations/0053_v210_changes.py b/awx/main/south_migrations/0053_v210_changes.py similarity index 99% rename from awx/main/migrations/0053_v210_changes.py rename to awx/main/south_migrations/0053_v210_changes.py index 43b6c52de9..6bcdc9e609 100644 --- a/awx/main/migrations/0053_v210_changes.py +++ b/awx/main/south_migrations/0053_v210_changes.py @@ -450,4 +450,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0054_v210_changes.py b/awx/main/south_migrations/0054_v210_changes.py similarity index 99% rename from awx/main/migrations/0054_v210_changes.py rename to awx/main/south_migrations/0054_v210_changes.py index 762515e3c5..84a63c8222 100644 --- a/awx/main/migrations/0054_v210_changes.py +++ b/awx/main/south_migrations/0054_v210_changes.py @@ -493,4 +493,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0055_v210_changes.py b/awx/main/south_migrations/0055_v210_changes.py similarity index 100% rename from awx/main/migrations/0055_v210_changes.py rename to awx/main/south_migrations/0055_v210_changes.py diff --git a/awx/main/migrations/0056_v210_changes.py b/awx/main/south_migrations/0056_v210_changes.py similarity index 100% rename from awx/main/migrations/0056_v210_changes.py rename to awx/main/south_migrations/0056_v210_changes.py diff --git a/awx/main/migrations/0057_v210_changes.py b/awx/main/south_migrations/0057_v210_changes.py similarity index 100% rename from awx/main/migrations/0057_v210_changes.py rename to awx/main/south_migrations/0057_v210_changes.py diff --git a/awx/main/migrations/0058_v210_changes.py b/awx/main/south_migrations/0058_v210_changes.py similarity index 100% rename from awx/main/migrations/0058_v210_changes.py rename to awx/main/south_migrations/0058_v210_changes.py diff --git a/awx/main/migrations/0059_v210_changes.py b/awx/main/south_migrations/0059_v210_changes.py similarity index 100% rename from awx/main/migrations/0059_v210_changes.py rename to awx/main/south_migrations/0059_v210_changes.py diff --git a/awx/main/migrations/0060_v210_changes.py b/awx/main/south_migrations/0060_v210_changes.py similarity index 100% rename from awx/main/migrations/0060_v210_changes.py rename to awx/main/south_migrations/0060_v210_changes.py diff --git a/awx/main/migrations/0061_v210_changes.py b/awx/main/south_migrations/0061_v210_changes.py similarity index 99% rename from awx/main/migrations/0061_v210_changes.py rename to awx/main/south_migrations/0061_v210_changes.py index 26573c9e05..2553a29906 100644 --- a/awx/main/migrations/0061_v210_changes.py +++ b/awx/main/south_migrations/0061_v210_changes.py @@ -510,4 +510,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0062_v210_changes.py b/awx/main/south_migrations/0062_v210_changes.py similarity index 100% rename from awx/main/migrations/0062_v210_changes.py rename to awx/main/south_migrations/0062_v210_changes.py diff --git a/awx/main/migrations/0063_v210_changes.py b/awx/main/south_migrations/0063_v210_changes.py similarity index 100% rename from awx/main/migrations/0063_v210_changes.py rename to awx/main/south_migrations/0063_v210_changes.py diff --git a/awx/main/migrations/0064_v220_changes.py b/awx/main/south_migrations/0064_v220_changes.py similarity index 99% rename from awx/main/migrations/0064_v220_changes.py rename to awx/main/south_migrations/0064_v220_changes.py index a58c74ac6b..a94f867266 100644 --- a/awx/main/migrations/0064_v220_changes.py +++ b/awx/main/south_migrations/0064_v220_changes.py @@ -572,4 +572,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0065_v220_changes.py b/awx/main/south_migrations/0065_v220_changes.py similarity index 100% rename from awx/main/migrations/0065_v220_changes.py rename to awx/main/south_migrations/0065_v220_changes.py diff --git a/awx/main/migrations/0066_v220_changes.py b/awx/main/south_migrations/0066_v220_changes.py similarity index 100% rename from awx/main/migrations/0066_v220_changes.py rename to awx/main/south_migrations/0066_v220_changes.py diff --git a/awx/main/migrations/0067_v220_changes.py b/awx/main/south_migrations/0067_v220_changes.py similarity index 100% rename from awx/main/migrations/0067_v220_changes.py rename to awx/main/south_migrations/0067_v220_changes.py diff --git a/awx/main/migrations/0068_v220_changes.py b/awx/main/south_migrations/0068_v220_changes.py similarity index 100% rename from awx/main/migrations/0068_v220_changes.py rename to awx/main/south_migrations/0068_v220_changes.py diff --git a/awx/main/migrations/0069_v220_changes.py b/awx/main/south_migrations/0069_v220_changes.py similarity index 100% rename from awx/main/migrations/0069_v220_changes.py rename to awx/main/south_migrations/0069_v220_changes.py diff --git a/awx/main/migrations/0070_v221_changes.py b/awx/main/south_migrations/0070_v221_changes.py similarity index 100% rename from awx/main/migrations/0070_v221_changes.py rename to awx/main/south_migrations/0070_v221_changes.py diff --git a/awx/main/migrations/0071_v240_changes.py b/awx/main/south_migrations/0071_v240_changes.py similarity index 99% rename from awx/main/migrations/0071_v240_changes.py rename to awx/main/south_migrations/0071_v240_changes.py index b36060b725..cae03ef27a 100644 --- a/awx/main/migrations/0071_v240_changes.py +++ b/awx/main/south_migrations/0071_v240_changes.py @@ -22,7 +22,7 @@ class Migration(DataMigration): elif stj.name == "Cleanup Activity Stream": sched = orm.Schedule(name="Cleanup Activity Schedule", rrule="DTSTART:%s RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU" % nowtime, description="Automatically Generated Schedule", enabled=True, extra_data={"days": "355"}) - elif stj.name == "Cleanup Fact Details" and feature_enabled('system_tracking'): + elif stj.name == "Cleanup Fact Details" and feature_enabled('system_tracking', bypass_database=True): sched = orm.Schedule(name="Cleanup Fact Schedule", rrule="DTSTART:%s RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1" % nowtime, description="Automatically Generated Schedule", enabled=True, extra_data={'older_than': '120d', 'granularity': '1w'}) else: diff --git a/awx/main/migrations/0072_v240_changes.py b/awx/main/south_migrations/0072_v240_changes.py similarity index 99% rename from awx/main/migrations/0072_v240_changes.py rename to awx/main/south_migrations/0072_v240_changes.py index d6d30695d5..721b453087 100644 --- a/awx/main/migrations/0072_v240_changes.py +++ b/awx/main/south_migrations/0072_v240_changes.py @@ -519,4 +519,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0073_v240_changes.py b/awx/main/south_migrations/0073_v240_changes.py similarity index 99% rename from awx/main/migrations/0073_v240_changes.py rename to awx/main/south_migrations/0073_v240_changes.py index 3c844bc09b..743aaee279 100644 --- a/awx/main/migrations/0073_v240_changes.py +++ b/awx/main/south_migrations/0073_v240_changes.py @@ -520,4 +520,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] diff --git a/awx/main/migrations/0074_v240_changes.py b/awx/main/south_migrations/0074_v240_changes.py similarity index 100% rename from awx/main/migrations/0074_v240_changes.py rename to awx/main/south_migrations/0074_v240_changes.py diff --git a/awx/main/south_migrations/0075_v300_changes.py b/awx/main/south_migrations/0075_v300_changes.py new file mode 100644 index 0000000000..1347ec58ef --- /dev/null +++ b/awx/main/south_migrations/0075_v300_changes.py @@ -0,0 +1,542 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'TowerSettings' + db.create_table(u'main_towersettings', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('key', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('description', self.gf('django.db.models.fields.TextField')()), + ('category', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('value', self.gf('django.db.models.fields.TextField')()), + ('value_type', self.gf('django.db.models.fields.CharField')(max_length=12)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='settings', null=True, to=orm['auth.User'])), + )) + db.send_create_signal('main', ['TowerSettings']) + + def backwards(self, orm): + # Deleting model 'TowerSettings' + db.delete_table(u'main_towersettings') + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.activitystream': { + 'Meta': {'object_name': 'ActivityStream'}, + 'actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_stream'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'ad_hoc_command': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.AdHocCommand']", 'symmetrical': 'False', 'blank': 'True'}), + 'changes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'credential': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Credential']", 'symmetrical': 'False', 'blank': 'True'}), + 'custom_inventory_script': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.CustomInventoryScript']", 'symmetrical': 'False', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'host': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Host']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Inventory']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySource']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Job']", 'symmetrical': 'False', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplate']", 'symmetrical': 'False', 'blank': 'True'}), + 'object1': ('django.db.models.fields.TextField', [], {}), + 'object2': ('django.db.models.fields.TextField', [], {}), + 'object_relationship_type': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'operation': ('django.db.models.fields.CharField', [], {'max_length': '13'}), + 'organization': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Organization']", 'symmetrical': 'False', 'blank': 'True'}), + 'permission': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Project']", 'symmetrical': 'False', 'blank': 'True'}), + 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Schedule']", 'symmetrical': 'False', 'blank': 'True'}), + 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), + 'unified_job_template': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job_template+'", 'blank': 'True', 'to': "orm['main.UnifiedJobTemplate']"}), + 'user': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.User']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'main.adhoccommand': { + 'Meta': {'object_name': 'AdHocCommand', '_ormbases': ['main.UnifiedJob']}, + 'become_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'ad_hoc_commands'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Credential']"}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'ad_hoc_commands'", 'symmetrical': 'False', 'through': "orm['main.AdHocCommandEvent']", 'to': "orm['main.Host']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ad_hoc_commands'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_type': ('django.db.models.fields.CharField', [], {'default': "'run'", 'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'module_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'module_name': ('django.db.models.fields.CharField', [], {'default': "'command'", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.adhoccommandevent': { + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('ad_hoc_command', 'host_name')]", 'object_name': 'AdHocCommandEvent'}, + 'ad_hoc_command': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ad_hoc_command_events'", 'to': "orm['main.AdHocCommand']"}), + 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'counter': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'ad_hoc_command_events'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'host_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}) + }, + 'main.authtoken': { + 'Meta': {'object_name': 'AuthToken'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'expires': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'reason': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'request_hash': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_tokens'", 'to': u"orm['auth.User']"}) + }, + 'main.credential': { + 'Meta': {'ordering': "('kind', 'name')", 'unique_together': "[('user', 'team', 'kind', 'name')]", 'object_name': 'Credential'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'become_method': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'become_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'become_username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'cloud': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kind': ('django.db.models.fields.CharField', [], {'default': "'ssh'", 'max_length': '32'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'project': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'security_token': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'ssh_key_data': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'ssh_key_unlock': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'team': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Team']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'vault_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + }, + 'main.custominventoryscript': { + 'Meta': {'ordering': "('name',)", 'unique_together': "[('name', 'organization')]", 'object_name': 'CustomInventoryScript'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'custominventoryscript\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'custominventoryscript\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'custom_inventory_scripts'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), + 'script': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.group': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.Host']"}), + 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), + 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.host': { + 'Meta': {'ordering': "('inventory', 'name')", 'unique_together': "(('name', 'inventory'),)", 'object_name': 'Host'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'instance_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Job']"}), + 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.instance': { + 'Meta': {'object_name': 'Instance'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'hostname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'primary': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}) + }, + 'main.inventory': { + 'Meta': {'ordering': "('name',)", 'unique_together': "[('name', 'organization')]", 'object_name': 'Inventory'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory_sources_with_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventories'", 'to': "orm['main.Organization']"}), + 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_inventory_sources': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.inventorysource': { + 'Meta': {'object_name': 'InventorySource', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysources'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), + 'group_by': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'instance_filters': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_script': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.CustomInventoryScript']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), + 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.inventoryupdate': { + 'Meta': {'object_name': 'InventoryUpdate', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group_by': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'instance_filters': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySource']"}), + 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_script': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.CustomInventoryScript']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.job': { + 'Meta': {'ordering': "('id',)", 'object_name': 'Job', '_ormbases': ['main.UnifiedJob']}, + 'become_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'force_handlers': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobs'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplate']", 'blank': 'True', 'null': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'default': "'run'", 'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Project']", 'blank': 'True', 'null': 'True'}), + 'skip_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'start_at_task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.jobevent': { + 'Meta': {'ordering': "('pk',)", 'object_name': 'JobEvent'}, + 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'counter': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events_as_primary_host'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'host_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'job_events'", 'symmetrical': 'False', 'to': "orm['main.Host']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events'", 'to': "orm['main.Job']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobEvent']"}), + 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}) + }, + 'main.jobhostsummary': { + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host_name')]", 'object_name': 'JobHostSummary'}, + 'changed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'dark': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_host_summaries'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'host_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Job']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'processed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'skipped': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'main.joborigin': { + 'Meta': {'object_name': 'JobOrigin'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'instance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['main.Instance']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'unified_job': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'job_origin'", 'unique': 'True', 'to': "orm['main.UnifiedJob']"}) + }, + 'main.jobtemplate': { + 'Meta': {'ordering': "('name',)", 'object_name': 'JobTemplate', '_ormbases': ['main.UnifiedJobTemplate']}, + 'ask_variables_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'become_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'force_handlers': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'default': "'run'", 'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Project']", 'blank': 'True', 'null': 'True'}), + 'skip_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'start_at_task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'survey_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'survey_spec': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.organization': { + 'Meta': {'ordering': "('name',)", 'object_name': 'Organization'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_of_organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.Project']"}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.permission': { + 'Meta': {'object_name': 'Permission'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'permission_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + 'run_ad_hoc_commands': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'team': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Team']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}) + }, + 'main.profile': { + 'Meta': {'object_name': 'Profile'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ldap_dn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.project': { + 'Meta': {'ordering': "('id',)", 'object_name': 'Project', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_next_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'scm_update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.projectupdate': { + 'Meta': {'object_name': 'ProjectUpdate', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.Project']"}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.schedule': { + 'Meta': {'ordering': "['-next_run']", 'object_name': 'Schedule'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'dtstart': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'extra_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'next_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}) + }, + 'main.systemjob': { + 'Meta': {'ordering': "('id',)", 'object_name': 'SystemJob', '_ormbases': ['main.UnifiedJob']}, + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'system_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.SystemJobTemplate']", 'blank': 'True', 'null': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.systemjobtemplate': { + 'Meta': {'object_name': 'SystemJobTemplate', '_ormbases': ['main.UnifiedJobTemplate']}, + 'job_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.team': { + 'Meta': {'ordering': "('organization__name', 'name')", 'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'teams'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.Project']"}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.towersettings': { + 'Meta': {'object_name': 'TowerSettings'}, + 'category': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'description': ('django.db.models.fields.TextField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'settings'", 'null': 'True', 'to': u"orm['auth.User']"}), + 'value': ('django.db.models.fields.TextField', [], {}), + 'value_type': ('django.db.models.fields.CharField', [], {'max_length': '12'}) + }, + 'main.unifiedjob': { + 'Meta': {'object_name': 'UnifiedJob'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'dependent_jobs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'dependent_jobs_rel_+'", 'to': "orm['main.UnifiedJob']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'finished': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'job_explanation': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), + 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), + 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJobTemplate']"}) + }, + 'main.unifiedjobtemplate': { + 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), + 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'next_schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_next_schedule+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Schedule']"}), + 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), + 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) + } + } + + complete_apps = ['main'] diff --git a/awx/fact/management/commands/__init__.py b/awx/main/south_migrations/__init__.py similarity index 60% rename from awx/fact/management/commands/__init__.py rename to awx/main/south_migrations/__init__.py index 3a75c16036..e484e62be1 100644 --- a/awx/fact/management/commands/__init__.py +++ b/awx/main/south_migrations/__init__.py @@ -1,2 +1,2 @@ # Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved +# All Rights Reserved. diff --git a/awx/main/tasks.py b/awx/main/tasks.py index f1e1e56e56..2325702da6 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -3,6 +3,7 @@ # Python import codecs +from collections import OrderedDict import ConfigParser import cStringIO import json @@ -13,7 +14,6 @@ import pipes import re import shutil import stat -import subprocess import tempfile import thread import time @@ -33,24 +33,31 @@ import pexpect # Celery from celery import Task, task +from celery.signals import celeryd_init # Django from django.conf import settings from django.db import transaction, DatabaseError -from django.utils.datastructures import SortedDict from django.utils.timezone import now +from django.utils.encoding import smart_str +from django.core.mail import send_mail +from django.contrib.auth.models import User # AWX from awx.main.constants import CLOUD_PROVIDERS from awx.main.models import * # noqa +from awx.main.models import UnifiedJob +from awx.main.models.label import Label from awx.main.queue import FifoQueue +from awx.main.conf import tower_settings +from awx.main.task_engine import TaskSerializer, TASK_TIMEOUT_INTERVAL from awx.main.utils import (get_ansible_version, get_ssh_version, decrypt_field, update_scm_url, - ignore_inventory_computed_fields, emit_websocket_notification, + emit_websocket_notification, check_proot_installed, build_proot_temp_dir, wrap_args_with_proot) -from awx.fact.utils.connection import test_mongo_connection __all__ = ['RunJob', 'RunSystemJob', 'RunProjectUpdate', 'RunInventoryUpdate', - 'RunAdHocCommand', 'handle_work_error', 'update_inventory_computed_fields'] + 'RunAdHocCommand', 'handle_work_error', 'handle_work_success', + 'update_inventory_computed_fields', 'send_notifications', 'run_administrative_checks'] HIDDEN_PASSWORD = '**********' @@ -62,16 +69,70 @@ Try upgrading OpenSSH or providing your private key in an different format. \ logger = logging.getLogger('awx.main.tasks') +@celeryd_init.connect +def celery_startup(conf=None, **kwargs): + # Re-init all schedules + # NOTE: Rework this during the Rampart work + logger.info("Syncing Tower Schedules") + for sch in Schedule.objects.all(): + try: + sch.update_computed_fields() + sch.save() + except Exception as e: + logger.error("Failed to rebuild schedule {}: {}".format(sch, e)) + @task() -def bulk_inventory_element_delete(inventory, hosts=[], groups=[]): - from awx.main.signals import disable_activity_stream - with ignore_inventory_computed_fields(): - with disable_activity_stream(): - for group in groups: - Group.objects.get(id=group).mark_inactive(skip_active_check=True) - for host in hosts: - Host.objects.get(id=host).mark_inactive(skip_active_check=True) - update_inventory_computed_fields(inventory) +def send_notifications(notification_list, job_id=None): + if not isinstance(notification_list, list): + raise TypeError("notification_list should be of type list") + if job_id is not None: + job_actual = UnifiedJob.objects.get(id=job_id) + for notification_id in notification_list: + notification = Notification.objects.get(id=notification_id) + try: + sent = notification.notification_template.send(notification.subject, notification.body) + notification.status = "successful" + notification.notifications_sent = sent + except Exception as e: + logger.error("Send Notification Failed {}".format(e)) + notification.status = "failed" + notification.error = smart_str(e) + finally: + notification.save() + if job_id is not None: + job_actual.notifications.add(notification) + +@task(bind=True) +def run_administrative_checks(self): + if not tower_settings.TOWER_ADMIN_ALERTS: + return + reader = TaskSerializer() + validation_info = reader.from_database() + if validation_info.get('instance_count', 0) < 1: + return + used_percentage = float(validation_info.get('current_instances', 0)) / float(validation_info.get('instance_count', 100)) + tower_admin_emails = User.objects.filter(is_superuser=True).values_list('email', flat=True) + if (used_percentage * 100) > 90: + send_mail("Ansible Tower host usage over 90%", + "Ansible Tower host usage over 90%", + tower_admin_emails, + fail_silently=True) + if validation_info.get('time_remaining', 0) < TASK_TIMEOUT_INTERVAL: + send_mail("Ansible Tower license will expire soon", + "Ansible Tower license will expire soon", + tower_admin_emails, + fail_silently=True) + +@task(bind=True) +def run_label_cleanup(self): + qs = Label.get_orphaned_labels() + labels_count = qs.count() + qs.delete() + return labels_count + +@task(bind=True) +def cleanup_authtokens(self): + AuthToken.objects.filter(expires__lt=now()).delete() @task(bind=True) def tower_periodic_scheduler(self): @@ -82,8 +143,8 @@ def tower_periodic_scheduler(self): try: last_run = dateutil.parser.parse(fd.read()) return last_run - except Exception: - #TODO: LOG + except Exception as exc: + logger.error("get_last_run failed: {}".format(exc)) return None def write_last_run(last_run): @@ -132,30 +193,44 @@ def notify_task_runner(metadata_dict): queue = FifoQueue('tower_task_manager') queue.push(metadata_dict) - -@task() -def mongodb_control(cmd): - # Sanity check: Do not send arbitrary commands. - if cmd not in ('start', 'stop'): - raise ValueError('Only "start" and "stop" are allowed.') - - # Either start or stop mongo, as requested. - p = subprocess.Popen('sudo service mongod %s' % cmd, shell=True, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out, err = p.communicate() - p.wait() - - # Check to make sure the stop actually succeeded - p = subprocess.Popen('pidof mongod', shell=True) - shutdown_failed = p.wait() == 0 - - # If there was an error, log it. - if err: - logger.error(err) - - if cmd == 'stop' and shutdown_failed: - p = subprocess.Popen('sudo mongod --shutdown -f /etc/mongod.conf', shell=True) - p.wait() +@task(bind=True) +def handle_work_success(self, result, task_actual): + if task_actual['type'] == 'project_update': + instance = ProjectUpdate.objects.get(id=task_actual['id']) + instance_name = instance.name + notification_templates = instance.project.notification_templates + friendly_name = "Project Update" + elif task_actual['type'] == 'inventory_update': + instance = InventoryUpdate.objects.get(id=task_actual['id']) + instance_name = instance.name + notification_templates = instance.inventory_source.notification_templates + friendly_name = "Inventory Update" + elif task_actual['type'] == 'job': + instance = Job.objects.get(id=task_actual['id']) + instance_name = instance.job_template.name + notification_templates = instance.job_template.notification_templates + friendly_name = "Job" + elif task_actual['type'] == 'ad_hoc_command': + instance = AdHocCommand.objects.get(id=task_actual['id']) + instance_name = instance.module_name + notification_templates = instance.notification_templates + friendly_name = "AdHoc Command" + elif task_actual['type'] == 'system_job': + instance = SystemJob.objects.get(id=task_actual['id']) + instance_name = instance.system_job_template.name + notification_templates = instance.system_job_template.notification_templates + friendly_name = "System Job" + else: + return + notification_body = instance.notification_data() + notification_subject = "{} #{} '{}' succeeded on Ansible Tower: {}".format(friendly_name, + task_actual['id'], + smart_str(instance_name), + notification_body['url']) + notification_body['friendly_name'] = friendly_name + send_notifications.delay([n.generate_notification(notification_subject, notification_body).id + for n in set(notification_templates.get('success', []) + notification_templates.get('any', []))], + job_id=task_actual['id']) @task(bind=True) def handle_work_error(self, task_id, subtasks=None): @@ -171,23 +246,38 @@ def handle_work_error(self, task_id, subtasks=None): if each_task['type'] == 'project_update': instance = ProjectUpdate.objects.get(id=each_task['id']) instance_name = instance.name + notification_templates = instance.project.notification_templates + friendly_name = "Project Update" elif each_task['type'] == 'inventory_update': instance = InventoryUpdate.objects.get(id=each_task['id']) instance_name = instance.name + notification_templates = instance.inventory_source.notification_templates + friendly_name = "Inventory Update" elif each_task['type'] == 'job': instance = Job.objects.get(id=each_task['id']) instance_name = instance.job_template.name + notification_templates = instance.job_template.notification_templates + friendly_name = "Job" elif each_task['type'] == 'ad_hoc_command': instance = AdHocCommand.objects.get(id=each_task['id']) instance_name = instance.module_name + notification_templates = instance.notification_templates + friendly_name = "AdHoc Command" + elif each_task['type'] == 'system_job': + instance = SystemJob.objects.get(id=each_task['id']) + instance_name = instance.system_job_template.name + notification_templates = instance.system_job_template.notification_templates + friendly_name = "System Job" else: # Unknown task type - break + logger.warn("Unknown task type: {}".format(each_task['type'])) + continue if first_task is None: first_task = instance first_task_id = instance.id first_task_type = each_task['type'] first_task_name = instance_name + first_task_friendly_name = friendly_name if instance.celery_task_id != task_id: instance.status = 'failed' instance.failed = True @@ -195,6 +285,16 @@ def handle_work_error(self, task_id, subtasks=None): (first_task_type, first_task_name, first_task_id) instance.save() instance.socketio_emit_status("failed") + notification_body = first_task.notification_data() + notification_subject = "{} #{} '{}' failed on Ansible Tower: {}".format(first_task_friendly_name, + first_task_id, + smart_str(first_task_name), + notification_body['url']) + notification_body['friendly_name'] = first_task_friendly_name + send_notifications.delay([n.generate_notification(notification_subject, notification_body).id + for n in set(notification_templates.get('error', []) + notification_templates.get('any', []))], + job_id=first_task_id) + @task() def update_inventory_computed_fields(inventory_id, should_update_hosts=True): @@ -288,7 +388,7 @@ class BaseTask(Task): ''' Create a temporary files containing the private data. Returns a dictionary with keys from build_private_data - (i.e. 'credential', 'cloud_credential') and values the file path. + (i.e. 'credential', 'cloud_credential', 'network_credential') and values the file path. ''' private_data = self.build_private_data(instance, **kwargs) private_data_files = {} @@ -302,12 +402,15 @@ class BaseTask(Task): if 'OPENSSH PRIVATE KEY' in data and not openssh_keys_supported: raise RuntimeError(OPENSSH_KEY_ERROR) for name, data in private_data.iteritems(): + # OpenSSH formatted keys must have a trailing newline to be + # accepted by ssh-add. + if 'OPENSSH PRIVATE KEY' in data and not data.endswith('\n'): + data += '\n' # For credentials used with ssh-add, write to a named pipe which # will be read then closed, instead of leaving the SSH key on disk. - if name in ('credential', 'scm_credential', 'ad_hoc_credential') and not ssh_too_old: + if name in ('credential', 'network_credential', 'scm_credential', 'ad_hoc_credential') and not ssh_too_old: path = os.path.join(kwargs.get('private_data_dir', tempfile.gettempdir()), name) - os.mkfifo(path, 0600) - thread.start_new_thread(lambda p, d: open(p, 'w').write(d), (path, data)) + self.open_fifo_write(path, data) else: handle, path = tempfile.mkstemp(dir=kwargs.get('private_data_dir', None)) f = os.fdopen(handle, 'w') @@ -317,6 +420,14 @@ class BaseTask(Task): private_data_files[name] = path return private_data_files + def open_fifo_write(self, path, data): + '''open_fifo_write opens the fifo named pipe in a new thread. + This blocks until the the calls to ssh-agent/ssh-add have read the + credential information from the pipe. + ''' + os.mkfifo(path, 0600) + thread.start_new_thread(lambda p, d: open(p, 'w').write(d), (path, data)) + def build_passwords(self, instance, **kwargs): ''' Build a dictionary of passwords for responding to prompts. @@ -327,6 +438,24 @@ class BaseTask(Task): '': '', } + def add_ansible_venv(self, env): + if settings.ANSIBLE_USE_VENV: + env['VIRTUAL_ENV'] = settings.ANSIBLE_VENV_PATH + env['PATH'] = os.path.join(settings.ANSIBLE_VENV_PATH, "bin") + ":" + env['PATH'] + venv_libdir = os.path.join(settings.ANSIBLE_VENV_PATH, "lib") + env.pop('PYTHONPATH', None) # default to none if no python_ver matches + for python_ver in ["python2.7", "python2.6"]: + if os.path.isdir(os.path.join(venv_libdir, python_ver)): + env['PYTHONPATH'] = os.path.join(venv_libdir, python_ver, "site-packages") + ":" + break + return env + + def add_tower_venv(self, env): + if settings.TOWER_USE_VENV: + env['VIRTUAL_ENV'] = settings.TOWER_VENV_PATH + env['PATH'] = os.path.join(settings.TOWER_VENV_PATH, "bin") + ":" + env['PATH'] + return env + def build_env(self, instance, **kwargs): ''' Build environment dictionary for ansible-playbook. @@ -342,13 +471,10 @@ class BaseTask(Task): # Set environment variables needed for inventory and job event # callbacks to work. # Update PYTHONPATH to use local site-packages. - python_paths = env.get('PYTHONPATH', '').split(os.pathsep) - local_site_packages = self.get_path_to('..', 'lib', 'site-packages') - if local_site_packages not in python_paths: - python_paths.insert(0, local_site_packages) - env['PYTHONPATH'] = os.pathsep.join(python_paths) - if self.should_use_proot: - env['PROOT_TMP_DIR'] = settings.AWX_PROOT_BASE_PATH + # NOTE: + # Derived class should call add_ansible_venv() or add_tower_venv() + if self.should_use_proot(instance, **kwargs): + env['PROOT_TMP_DIR'] = tower_settings.AWX_PROOT_BASE_PATH return env def build_safe_env(self, instance, **kwargs): @@ -417,7 +543,7 @@ class BaseTask(Task): prompts, and values are password lookup keys (keys that are returned from build_passwords). ''' - return SortedDict() + return OrderedDict() def run_pexpect(self, instance, args, cwd, env, passwords, stdout_handle, output_replacements=None): @@ -461,7 +587,7 @@ class BaseTask(Task): instance = self.update_model(instance.pk) if instance.cancel_flag: try: - if settings.AWX_PROOT_ENABLED: + if tower_settings.AWX_PROOT_ENABLED and self.should_use_proot(instance): # NOTE: Refactor this once we get a newer psutil across the board if not psutil: os.kill(child.pid, signal.SIGKILL) @@ -473,7 +599,8 @@ class BaseTask(Task): else: child_procs = main_proc.get_children(recursive=True) for child_proc in child_procs: - os.kill(child_proc.pid, signal.SIGTERM) + os.kill(child_proc.pid, signal.SIGKILL) + os.kill(main_proc.pid, signal.SIGKILL) except TypeError: os.kill(child.pid, signal.SIGKILL) else: @@ -602,12 +729,12 @@ class RunJob(BaseTask): Returns a dict of the form dict['credential'] = dict['cloud_credential'] = + dict['network_credential'] = ''' - job_credentials = ['credential', 'cloud_credential'] + job_credentials = ['credential', 'cloud_credential', 'network_credential'] private_data = {} # If we were sent SSH credentials, decrypt them and send them # back (they will be written to a temporary file). - for cred_name in job_credentials: credential = getattr(job, cred_name, None) if credential: @@ -620,6 +747,8 @@ class RunJob(BaseTask): username=credential.username, password=decrypt_field(credential, "password"), project_name=credential.project) + if credential.domain not in (None, ''): + openstack_auth['domain_name'] = credential.domain openstack_data = { 'clouds': { 'devstack': { @@ -654,11 +783,12 @@ class RunJob(BaseTask): ''' plugin_dir = self.get_path_to('..', 'plugins', 'callback') plugin_dirs = [plugin_dir] - if hasattr(settings, 'AWX_ANSIBLE_CALLBACK_PLUGINS') and \ - settings.AWX_ANSIBLE_CALLBACK_PLUGINS: - plugin_dirs.append(settings.AWX_ANSIBLE_CALLBACK_PLUGINS) + if hasattr(tower_settings, 'AWX_ANSIBLE_CALLBACK_PLUGINS') and \ + tower_settings.AWX_ANSIBLE_CALLBACK_PLUGINS: + plugin_dirs.append(tower_settings.AWX_ANSIBLE_CALLBACK_PLUGINS) plugin_path = ':'.join(plugin_dirs) env = super(RunJob, self).build_env(job, **kwargs) + env = self.add_ansible_venv(env) # Set environment variables needed for inventory and job event # callbacks to work. env['JOB_ID'] = str(job.pk) @@ -693,6 +823,7 @@ class RunJob(BaseTask): elif cloud_cred and cloud_cred.kind == 'rax': env['RAX_USERNAME'] = cloud_cred.username env['RAX_API_KEY'] = decrypt_field(cloud_cred, 'password') + env['CLOUD_VERIFY_SSL'] = str(False) elif cloud_cred and cloud_cred.kind == 'gce': env['GCE_EMAIL'] = cloud_cred.username env['GCE_PROJECT'] = cloud_cred.project @@ -700,6 +831,16 @@ class RunJob(BaseTask): elif cloud_cred and cloud_cred.kind == 'azure': env['AZURE_SUBSCRIPTION_ID'] = cloud_cred.username env['AZURE_CERT_PATH'] = kwargs.get('private_data_files', {}).get('cloud_credential', '') + elif cloud_cred and cloud_cred.kind == 'azure_rm': + if len(cloud_cred.client) and len(cloud_cred.tenant): + env['AZURE_CLIENT_ID'] = cloud_cred.client + env['AZURE_SECRET'] = decrypt_field(cloud_cred, 'secret') + env['AZURE_TENANT'] = cloud_cred.tenant + env['AZURE_SUBSCRIPTION_ID'] = cloud_cred.subscription + else: + env['AZURE_SUBSCRIPTION_ID'] = cloud_cred.subscription + env['AZURE_AD_USER'] = cloud_cred.username + env['AZURE_PASSWORD'] = decrypt_field(cloud_cred, 'password') elif cloud_cred and cloud_cred.kind == 'vmware': env['VMWARE_USER'] = cloud_cred.username env['VMWARE_PASSWORD'] = decrypt_field(cloud_cred, 'password') @@ -707,6 +848,16 @@ class RunJob(BaseTask): elif cloud_cred and cloud_cred.kind == 'openstack': env['OS_CLIENT_CONFIG_FILE'] = kwargs.get('private_data_files', {}).get('cloud_credential', '') + network_cred = job.network_credential + if network_cred: + env['ANSIBLE_NET_USERNAME'] = network_cred.username + env['ANSIBLE_NET_PASSWORD'] = decrypt_field(network_cred, 'password') + + authorize = network_cred.authorize + env['ANSIBLE_NET_AUTHORIZE'] = unicode(int(authorize)) + if authorize: + env['ANSIBLE_NET_AUTHORIZE_PASSWORD'] = decrypt_field(network_cred, 'authorize_password') + # Set environment variables related to scan jobs if job.job_type == PERM_INVENTORY_SCAN: env['ANSIBLE_LIBRARY'] = self.get_path_to('..', 'plugins', 'library') @@ -787,18 +938,21 @@ class RunJob(BaseTask): 'tower_job_id': job.pk, 'tower_job_launch_type': job.launch_type, } - if job.job_template and job.job_template.active: + if job.job_template: extra_vars.update({ 'tower_job_template_id': job.job_template.pk, 'tower_job_template_name': job.job_template.name, }) - if job.created_by and job.created_by.is_active: + if job.created_by: extra_vars.update({ 'tower_user_id': job.created_by.pk, 'tower_user_name': job.created_by.username, }) if job.extra_vars_dict: - extra_vars.update(job.extra_vars_dict) + if kwargs.get('display', False) and job.job_template and job.job_template.survey_enabled: + extra_vars.update(json.loads(job.display_extra_vars())) + else: + extra_vars.update(job.extra_vars_dict) args.extend(['-e', json.dumps(extra_vars)]) # Add path to playbook (relative to project.local_path). @@ -808,6 +962,9 @@ class RunJob(BaseTask): args.append(job.playbook) return args + def build_safe_args(self, job, **kwargs): + return self.build_args(job, display=True, **kwargs) + def build_cwd(self, job, **kwargs): if job.project is None and job.job_type == PERM_INVENTORY_SCAN: return self.get_path_to('..', 'playbooks') @@ -834,7 +991,7 @@ class RunJob(BaseTask): d[re.compile(r'^PFEXEC password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^pfexec password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^RUNAS password.*:\s*?$', re.M)] = 'become_password' - d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' + d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^SSH password:\s*?$', re.M)] = 'ssh_password' d[re.compile(r'^Password:\s*?$', re.M)] = 'ssh_password' d[re.compile(r'^Vault password:\s*?$', re.M)] = 'vault_password' @@ -844,18 +1001,18 @@ class RunJob(BaseTask): ''' If using an SSH key, return the path for use by ssh-agent. ''' - return kwargs.get('private_data_files', {}).get('credential', '') + private_data_files = kwargs.get('private_data_files', {}) + if 'credential' in private_data_files: + return private_data_files.get('credential') + elif 'network_credential' in private_data_files: + return private_data_files.get('network_credential') + return '' def should_use_proot(self, instance, **kwargs): ''' Return whether this task should use proot. ''' - return getattr(settings, 'AWX_PROOT_ENABLED', False) - - def pre_run_hook(self, job, **kwargs): - if job.job_type == PERM_INVENTORY_SCAN: - if not test_mongo_connection(): - raise RuntimeError("Fact Scan Database is offline") + return getattr(tower_settings, 'AWX_PROOT_ENABLED', False) def post_run_hook(self, job, **kwargs): ''' @@ -880,7 +1037,6 @@ class RunProjectUpdate(BaseTask): name = 'awx.main.tasks.run_project_update' model = ProjectUpdate - def build_private_data(self, project_update, **kwargs): ''' Return SSH private key data needed for this project update. @@ -910,6 +1066,7 @@ class RunProjectUpdate(BaseTask): Build environment dictionary for ansible-playbook. ''' env = super(RunProjectUpdate, self).build_env(project_update, **kwargs) + env = self.add_ansible_venv(env) env['ANSIBLE_ASK_PASS'] = str(False) env['ANSIBLE_ASK_SUDO_PASS'] = str(False) env['DISPLAY'] = '' # Prevent stupid password popup when running tests. @@ -1063,6 +1220,8 @@ class RunInventoryUpdate(BaseTask): username=credential.username, password=decrypt_field(credential, "password"), project_name=credential.project) + if credential.domain not in (None, ''): + openstack_auth['domain_name'] = credential.domain private_state = str(inventory_update.source_vars_dict.get('private', 'true')) # Retrieve cache path from inventory update vars if available, # otherwise create a temporary cache path only for this update. @@ -1132,6 +1291,46 @@ class RunInventoryUpdate(BaseTask): for k,v in vmware_opts.items(): cp.set(section, k, unicode(v)) + elif inventory_update.source == 'satellite6': + section = 'foreman' + cp.add_section(section) + + foreman_opts = dict(inventory_update.source_vars_dict.items()) + foreman_opts.setdefault('ssl_verify', 'False') + for k, v in foreman_opts.items(): + cp.set(section, k, unicode(v)) + + credential = inventory_update.credential + if credential: + cp.set(section, 'url', credential.host) + cp.set(section, 'user', credential.username) + cp.set(section, 'password', decrypt_field(credential, 'password')) + + section = 'ansible' + cp.set(section, 'group_patterns', '["{app}-{tier}-{color}", "{app}-{color}", "{app}", "{tier}"]') + + section = 'cache' + cp.set(section, 'path', '/tmp') + cp.set(section, 'max_age', '0') + + elif inventory_update.source == 'cloudforms': + section = 'cloudforms' + cp.add_section(section) + + credential = inventory_update.credential + if credential: + cp.set(section, 'hostname', credential.host) + cp.set(section, 'username', credential.username) + cp.set(section, 'password', decrypt_field(credential, 'password')) + + elif inventory_update.source == 'azure_rm': + section = 'azure' + cp.add_section(section) + cp.set(section, 'include_powerstate', 'yes') + cp.set(section, 'group_by_resource_group', 'yes') + cp.set(section, 'group_by_location', 'yes') + cp.set(section, 'group_by_tag', 'yes') + # Return INI content. if cp.sections(): f = cStringIO.StringIO() @@ -1152,9 +1351,9 @@ class RunInventoryUpdate(BaseTask): # passwords dictionary. credential = inventory_update.credential if credential: - for subkey in ('username', 'host', 'project'): + for subkey in ('username', 'host', 'project', 'client', 'tenant', 'subscription'): passwords['source_%s' % subkey] = getattr(credential, subkey) - for passkey in ('password', 'ssh_key_data', 'security_token'): + for passkey in ('password', 'ssh_key_data', 'security_token', 'secret'): k = 'source_%s' % passkey passwords[k] = decrypt_field(credential, passkey) return passwords @@ -1168,7 +1367,7 @@ class RunInventoryUpdate(BaseTask): """ env = super(RunInventoryUpdate, self).build_env(inventory_update, **kwargs) - + env = self.add_tower_venv(env) # Pass inventory source ID to inventory script. env['INVENTORY_SOURCE_ID'] = str(inventory_update.inventory_source_id) env['INVENTORY_UPDATE_ID'] = str(inventory_update.pk) @@ -1194,6 +1393,7 @@ class RunInventoryUpdate(BaseTask): env['RAX_CREDS_FILE'] = cloud_credential env['RAX_REGION'] = inventory_update.source_regions or 'all' env['RAX_CACHE_MAX_AGE'] = "0" + env['CLOUD_VERIFY_SSL'] = str(False) # Set this environment variable so the vendored package won't # complain about not being able to determine its version number. env['PBR_VERSION'] = '0.5.21' @@ -1205,12 +1405,28 @@ class RunInventoryUpdate(BaseTask): elif inventory_update.source == 'azure': env['AZURE_SUBSCRIPTION_ID'] = passwords.get('source_username', '') env['AZURE_CERT_PATH'] = cloud_credential + elif inventory_update.source == 'azure_rm': + if len(passwords.get('source_client', '')) and \ + len(passwords.get('source_tenant', '')): + env['AZURE_CLIENT_ID'] = passwords.get('source_client', '') + env['AZURE_SECRET'] = passwords.get('source_secret', '') + env['AZURE_TENANT'] = passwords.get('source_tenant', '') + env['AZURE_SUBSCRIPTION_ID'] = passwords.get('source_subscription', '') + else: + env['AZURE_SUBSCRIPTION_ID'] = passwords.get('source_subscription', '') + env['AZURE_AD_USER'] = passwords.get('source_username', '') + env['AZURE_PASSWORD'] = passwords.get('source_password', '') elif inventory_update.source == 'gce': env['GCE_EMAIL'] = passwords.get('source_username', '') env['GCE_PROJECT'] = passwords.get('source_project', '') env['GCE_PEM_FILE_PATH'] = cloud_credential + env['GCE_ZONE'] = inventory_update.source_regions elif inventory_update.source == 'openstack': env['OS_CLIENT_CONFIG_FILE'] = cloud_credential + elif inventory_update.source == 'satellite6': + env['FOREMAN_INI_PATH'] = cloud_credential + elif inventory_update.source == 'cloudforms': + env['CLOUDFORMS_INI_PATH'] = cloud_credential elif inventory_update.source == 'file': # FIXME: Parse source_env to dict, update env. pass @@ -1288,7 +1504,7 @@ class RunInventoryUpdate(BaseTask): runpath = tempfile.mkdtemp(prefix='ansible_tower_launch_') handle, path = tempfile.mkstemp(dir=runpath) f = os.fdopen(handle, 'w') - if inventory_update.source_script is None or not inventory_update.source_script.active: + if inventory_update.source_script is None: raise RuntimeError('Inventory Script does not exist') f.write(inventory_update.source_script.script.encode('utf-8')) f.close() @@ -1355,6 +1571,7 @@ class RunAdHocCommand(BaseTask): ''' plugin_dir = self.get_path_to('..', 'plugins', 'callback') env = super(RunAdHocCommand, self).build_env(ad_hoc_command, **kwargs) + env = self.add_ansible_venv(env) # Set environment variables needed for inventory and ad hoc event # callbacks to work. env['AD_HOC_COMMAND_ID'] = str(ad_hoc_command.pk) @@ -1365,6 +1582,7 @@ class RunAdHocCommand(BaseTask): env['REST_API_URL'] = settings.INTERNAL_API_URL env['REST_API_TOKEN'] = ad_hoc_command.task_auth_token or '' env['CALLBACK_CONSUMER_PORT'] = str(settings.CALLBACK_CONSUMER_PORT) + env['ANSIBLE_SFTP_BATCH_MODE'] = 'False' if getattr(settings, 'JOB_CALLBACK_DEBUG', False): env['JOB_CALLBACK_DEBUG'] = '2' elif settings.DEBUG: @@ -1432,6 +1650,9 @@ class RunAdHocCommand(BaseTask): if ad_hoc_command.verbosity: args.append('-%s' % ('v' * min(5, ad_hoc_command.verbosity))) + if ad_hoc_command.extra_vars_dict: + args.extend(['-e', json.dumps(ad_hoc_command.extra_vars_dict)]) + args.extend(['-m', ad_hoc_command.module_name]) args.extend(['-a', ad_hoc_command.module_args]) @@ -1461,7 +1682,7 @@ class RunAdHocCommand(BaseTask): d[re.compile(r'^PFEXEC password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^pfexec password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^RUNAS password.*:\s*?$', re.M)] = 'become_password' - d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' + d[re.compile(r'^runas password.*:\s*?$', re.M)] = 'become_password' d[re.compile(r'^SSH password:\s*?$', re.M)] = 'ssh_password' d[re.compile(r'^Password:\s*?$', re.M)] = 'ssh_password' return d @@ -1476,7 +1697,7 @@ class RunAdHocCommand(BaseTask): ''' Return whether this task should use proot. ''' - return getattr(settings, 'AWX_PROOT_ENABLED', False) + return getattr(tower_settings, 'AWX_PROOT_ENABLED', False) def post_run_hook(self, ad_hoc_command, **kwargs): ''' @@ -1503,16 +1724,15 @@ class RunSystemJob(BaseTask): args.extend(['--older_than', str(json_vars['older_than'])]) if 'granularity' in json_vars: args.extend(['--granularity', str(json_vars['granularity'])]) - # Keeping this around in case we want to break this out - # if 'jobs' in json_vars and json_vars['jobs']: - # args.extend(['--jobs']) - # if 'project_updates' in json_vars and json_vars['project_updates']: - # args.extend(['--project-updates']) - # if 'inventory_updates' in json_vars and json_vars['inventory_updates']: - # args.extend(['--inventory-updates']) - except Exception, e: + except Exception as e: logger.error("Failed to parse system job: " + str(e)) return args + def build_env(self, instance, **kwargs): + env = super(RunSystemJob, self).build_env(instance, + **kwargs) + env = self.add_tower_venv(env) + return env + def build_cwd(self, instance, **kwargs): return settings.BASE_DIR diff --git a/awx/main/tests/URI.py b/awx/main/tests/URI.py new file mode 100644 index 0000000000..d04da03436 --- /dev/null +++ b/awx/main/tests/URI.py @@ -0,0 +1,43 @@ +# Helps with test cases. +# Save all components of a uri (i.e. scheme, username, password, etc.) so that +# when we construct a uri string and decompose it, we can verify the decomposition +class URI(object): + DEFAULTS = { + 'scheme' : 'http', + 'username' : 'MYUSERNAME', + 'password' : 'MYPASSWORD', + 'host' : 'host.com', + } + + def __init__(self, description='N/A', scheme=DEFAULTS['scheme'], username=DEFAULTS['username'], password=DEFAULTS['password'], host=DEFAULTS['host']): + self.description = description + self.scheme = scheme + self.username = username + self.password = password + self.host = host + + def get_uri(self): + uri = "%s://" % self.scheme + if self.username: + uri += "%s" % self.username + if self.password: + uri += ":%s" % self.password + if (self.username or self.password) and self.host is not None: + uri += "@%s" % self.host + elif self.host is not None: + uri += "%s" % self.host + return uri + + def get_secret_count(self): + secret_count = 0 + if self.username: + secret_count += 1 + if self.password: + secret_count += 1 + return secret_count + + def __string__(self): + return self.get_uri() + + def __repr__(self): + return self.get_uri() diff --git a/awx/main/tests/__init__.py b/awx/main/tests/__init__.py index c3d0fd60a0..e484e62be1 100644 --- a/awx/main/tests/__init__.py +++ b/awx/main/tests/__init__.py @@ -1,21 +1,2 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. - -from awx.main.tests.organizations import * # noqa -from awx.main.tests.users import * # noqa -from awx.main.tests.inventory import * # noqa -from awx.main.tests.projects import ProjectsTest, ProjectUpdatesTest # noqa -from awx.main.tests.commands import * # noqa -from awx.main.tests.scripts import * # noqa -from awx.main.tests.tasks import RunJobTest # noqa -from awx.main.tests.ad_hoc import * # noqa -from awx.main.tests.licenses import LicenseTests # noqa -from awx.main.tests.jobs import * # noqa -from awx.main.tests.activity_stream import * # noqa -from awx.main.tests.schedules import * # noqa -from awx.main.tests.redact import * # noqa -from awx.main.tests.views import * # noqa -from awx.main.tests.commands import * # noqa -from awx.main.tests.fact import * # noqa -from awx.main.tests.unified_jobs import * # noqa -from awx.main.tests.ha import * # noqa diff --git a/awx/main/tests/activity_stream.py b/awx/main/tests/activity_stream.py deleted file mode 100644 index 9798695954..0000000000 --- a/awx/main/tests/activity_stream.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -# Python -from django.core.urlresolvers import reverse - -# AWX -from awx.main.models import * # noqa -from awx.main.tests.base import BaseTest - -class ActivityStreamTest(BaseTest): - - def collection(self): - return reverse('api:activity_stream_list') - - def item(self, item_id): - return reverse('api:activity_stream_detail', args=(item_id,)) - - def setUp(self): - super(ActivityStreamTest, self).setUp() - self.setup_instances() - self.create_test_license_file() - # TODO: Test non-enterprise license - self.setup_users() - self.org_created = self.post(reverse('api:organization_list'), dict(name='test org', description='test descr'), expect=201, auth=self.get_super_credentials()) - - def test_get_activity_stream_list(self): - url = self.collection() - - with self.current_user(self.super_django_user): - self.options(url, expect=200) - self.head(url, expect=200) - response = self.get(url, expect=200) - self.check_pagination_and_size(response, 1, previous=None, next=None) - - def test_basic_fields(self): - item_id = ActivityStream.objects.order_by('pk')[0].pk - org_item = self.item(item_id) - - with self.current_user(self.super_django_user): - response = self.get(org_item, expect=200) - - self.assertTrue("related" in response) - self.assertTrue("organization" in response['related']) - self.assertTrue("summary_fields" in response) - self.assertTrue("organization" in response['summary_fields']) - self.assertTrue(response['summary_fields']['organization'][0]['name'] == self.org_created['name']) - - def test_changeby_user(self): - item_id = ActivityStream.objects.order_by('pk')[0].pk - org_item = self.item(item_id) - - with self.current_user(self.super_django_user): - response = self.get(org_item, expect=200) - self.assertEqual(response['summary_fields']['actor']['username'], self.super_django_user.username) diff --git a/awx/main/tests/base.py b/awx/main/tests/base.py index bdea0523a8..cd3754b23f 100644 --- a/awx/main/tests/base.py +++ b/awx/main/tests/base.py @@ -11,6 +11,7 @@ import shutil import sys import tempfile import time +import urllib from multiprocessing import Process from subprocess import Popen import re @@ -25,6 +26,7 @@ from django.conf import settings, UserSettingsHolder from django.contrib.auth.models import User from django.test.client import Client from django.test.utils import override_settings +from django.utils.encoding import force_text # AWX from awx.main.models import * # noqa @@ -33,6 +35,7 @@ from awx.main.management.commands.run_task_system import run_taskmanager from awx.main.utils import get_ansible_version from awx.main.task_engine import TaskEngager as LicenseWriter from awx.sso.backends import LDAPSettings +from awx.main.tests.URI import URI # noqa TEST_PLAYBOOK = '''- hosts: mygroup gather_facts: false @@ -67,10 +70,10 @@ class QueueTestMixin(object): if getattr(self, 'redis_process', None): self.redis_process.kill() self.redis_process = None - + # The observed effect of not calling terminate_queue() if you call start_queue() are -# an hang on test cleanup database delete. Thus, to ensure terminate_queue() is called +# an hang on test cleanup database delete. Thus, to ensure terminate_queue() is called # whenever start_queue() is called just inherit from this class when you want to use the queue. class QueueStartStopTestMixin(QueueTestMixin): def setUp(self): @@ -127,11 +130,12 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): settings.CELERY_UNIT_TEST = True settings.SYSTEM_UUID='00000000-0000-0000-0000-000000000000' settings.BROKER_URL='redis://localhost:16379/' - + # Create unique random consumer and queue ports for zeromq callback. if settings.CALLBACK_CONSUMER_PORT: callback_port = random.randint(55700, 55799) settings.CALLBACK_CONSUMER_PORT = 'tcp://127.0.0.1:%d' % callback_port + os.environ['CALLBACK_CONSUMER_PORT'] = settings.CALLBACK_CONSUMER_PORT callback_queue_path = '/tmp/callback_receiver_test_%d.ipc' % callback_port self._temp_paths.append(callback_queue_path) settings.CALLBACK_QUEUE_PORT = 'ipc://%s' % callback_queue_path @@ -178,7 +182,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): return __name__ + '-generated-' + string + rnd_str def create_test_license_file(self, instance_count=10000, license_date=int(time.time() + 3600), features=None): - writer = LicenseWriter( + writer = LicenseWriter( company_name='AWX', contact_name='AWX Admin', contact_email='awx@example.com', @@ -193,7 +197,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): os.environ['AWX_LICENSE_FILE'] = license_path def create_basic_license_file(self, instance_count=100, license_date=int(time.time() + 3600)): - writer = LicenseWriter( + writer = LicenseWriter( company_name='AWX', contact_name='AWX Admin', contact_email='awx@example.com', @@ -205,7 +209,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): writer.write_file(license_path) self._temp_paths.append(license_path) os.environ['AWX_LICENSE_FILE'] = license_path - + def create_expired_license_file(self, instance_count=1000, grace_period=False): license_date = time.time() - 1 if not grace_period: @@ -349,6 +353,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): 'host_config_key': settings.SYSTEM_UUID, 'created_by': created_by, 'playbook': playbook, + 'ask_credential_on_launch': True, } opts.update(kwargs) return JobTemplate.objects.create(**opts) @@ -380,7 +385,11 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): 'vault_password': '', } opts.update(kwargs) - return Credential.objects.create(**opts) + user = opts['user'] + del opts['user'] + cred = Credential.objects.create(**opts) + cred.admin_role.members.add(user) + return cred def setup_instances(self): instance = Instance(uuid=settings.SYSTEM_UUID, primary=True, hostname='127.0.0.1') @@ -419,14 +428,12 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): def get_invalid_credentials(self): return ('random', 'combination') - + def _generic_rest(self, url, data=None, expect=204, auth=None, method=None, data_type=None, accept=None, remote_addr=None, return_response_object=False, client_kwargs=None): assert method is not None method_name = method.lower() - #if method_name not in ('options', 'head', 'get', 'delete'): - # assert data is not None client_kwargs = client_kwargs or {} if accept: client_kwargs['HTTP_ACCEPT'] = accept @@ -457,21 +464,23 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): client = Client(**client_kwargs) method = getattr(client, method_name) response = None - if data is not None: + if method_name not in ('options', 'head', 'get', 'delete'): data_type = data_type or 'json' if data_type == 'json': response = method(url, json.dumps(data), 'application/json') elif data_type == 'yaml': response = method(url, yaml.safe_dump(data), 'application/yaml') + elif data_type == 'form': + response = method(url, urllib.urlencode(data), 'application/x-www-form-urlencoded') else: self.fail('Unsupported data_type %s' % data_type) else: response = method(url) self.assertFalse(response.status_code == 500 and expect != 500, - 'Failed (500): %s' % response.content) + 'Failed (500): %s' % force_text(response.content)) if expect is not None: - assert response.status_code == expect, "expected status %s, got %s for url=%s as auth=%s: %s" % (expect, response.status_code, url, auth, response.content) + assert response.status_code == expect, u"expected status %s, got %s for url=%s as auth=%s: %s" % (expect, response.status_code, url, auth, force_text(response.content)) if method_name == 'head': self.assertFalse(response.content) if return_response_object: @@ -479,16 +488,16 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): if response.status_code not in [204, 405] and method_name != 'head' and response.content: # no JSON responses in these at least for now, 409 should probably return some (FIXME) if response['Content-Type'].startswith('application/json'): - obj = json.loads(response.content) + obj = json.loads(force_text(response.content)) elif response['Content-Type'].startswith('application/yaml'): - obj = yaml.safe_load(response.content) + obj = yaml.safe_load(force_text(response.content)) elif response['Content-Type'].startswith('text/plain'): obj = { - 'content': response.content + 'content': force_text(response.content) } elif response['Content-Type'].startswith('text/html'): obj = { - 'content': response.content + 'content': force_text(response.content) } else: self.fail('Unsupport response content type %s' % response['Content-Type']) @@ -514,7 +523,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): return self._generic_rest(url, data=None, expect=expect, auth=auth, method='head', accept=accept, remote_addr=remote_addr) - + def get(self, url, expect=200, auth=None, accept=None, remote_addr=None, client_kwargs={}): return self._generic_rest(url, data=None, expect=expect, auth=auth, method='get', accept=accept, @@ -655,7 +664,7 @@ class BaseTestMixin(QueueTestMixin, MockCommonlySlowTestMixin): else: msg += 'Found %d occurances of "%s" instead of %d in: "%s"' % (count_actual, substr, count, string) self.assertEqual(count_actual, count, msg) - + def check_job_result(self, job, expected='successful', expect_stdout=True, expect_traceback=False): msg = u'job status is %s, expected %s' % (job.status, expected) @@ -724,48 +733,3 @@ class BaseJobExecutionTest(QueueStartStopTestMixin, BaseLiveServerTest): ''' Base class for celery task tests. ''' - -# Helps with test cases. -# Save all components of a uri (i.e. scheme, username, password, etc.) so that -# when we construct a uri string and decompose it, we can verify the decomposition -class URI(object): - DEFAULTS = { - 'scheme' : 'http', - 'username' : 'MYUSERNAME', - 'password' : 'MYPASSWORD', - 'host' : 'host.com', - } - - def __init__(self, description='N/A', scheme=DEFAULTS['scheme'], username=DEFAULTS['username'], password=DEFAULTS['password'], host=DEFAULTS['host']): - self.description = description - self.scheme = scheme - self.username = username - self.password = password - self.host = host - - def get_uri(self): - uri = "%s://" % self.scheme - if self.username: - uri += "%s" % self.username - if self.password: - uri += ":%s" % self.password - if (self.username or self.password) and self.host is not None: - uri += "@%s" % self.host - elif self.host is not None: - uri += "%s" % self.host - return uri - - def get_secret_count(self): - secret_count = 0 - if self.username: - secret_count += 1 - if self.password: - secret_count += 1 - return secret_count - - def __string__(self): - return self.get_uri() - - def __repr__(self): - return self.get_uri() - diff --git a/awx/main/tests/commands/__init__.py b/awx/main/tests/commands/__init__.py deleted file mode 100644 index dc89a6f8b6..0000000000 --- a/awx/main/tests/commands/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .run_fact_cache_receiver import * # noqa -from .commands_monolithic import * # noqa -from .cleanup_facts import * # noqa -from .age_deleted import * # noqa -from .remove_instance import * # noqa -from .run_socketio_service import * # noqa - diff --git a/awx/main/tests/commands/age_deleted.py b/awx/main/tests/commands/age_deleted.py deleted file mode 100644 index 02738c2c1f..0000000000 --- a/awx/main/tests/commands/age_deleted.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# AWX -from awx.main.tests.base import BaseTest -from awx.main.tests.commands.base import BaseCommandMixin - -__all__ = ['AgeDeletedCommandFunctionalTest'] - -class AgeDeletedCommandFunctionalTest(BaseCommandMixin, BaseTest): - def setUp(self): - super(AgeDeletedCommandFunctionalTest, self).setUp() - self.create_test_license_file() - self.setup_instances() - self.setup_users() - self.organization = self.make_organization(self.super_django_user) - self.credential = self.make_credential() - self.credential2 = self.make_credential() - self.credential.mark_inactive(True) - self.credential2.mark_inactive(True) - self.credential_active = self.make_credential() - self.super_django_user.mark_inactive(True) - - def test_default(self): - result, stdout, stderr = self.run_command('age_deleted') - self.assertEqual(stdout, 'Aged %d items\n' % 3) - - def test_type(self): - result, stdout, stderr = self.run_command('age_deleted', type='Credential') - self.assertEqual(stdout, 'Aged %d items\n' % 2) - - def test_id_type(self): - result, stdout, stderr = self.run_command('age_deleted', type='Credential', id=self.credential.pk) - self.assertEqual(stdout, 'Aged %d items\n' % 1) diff --git a/awx/main/tests/commands/cleanup_facts.py b/awx/main/tests/commands/cleanup_facts.py deleted file mode 100644 index d6f0bd0b97..0000000000 --- a/awx/main/tests/commands/cleanup_facts.py +++ /dev/null @@ -1,238 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -from datetime import datetime -from dateutil.relativedelta import relativedelta -import mock - -#Django -from django.core.management.base import CommandError - -# AWX -from awx.main.tests.base import BaseTest -from awx.fact.tests.base import MongoDBRequired, FactScanBuilder, TEST_FACT_PACKAGES, TEST_FACT_ANSIBLE, TEST_FACT_SERVICES -from awx.main.tests.commands.base import BaseCommandMixin -from awx.main.management.commands.cleanup_facts import Command, CleanupFacts -from awx.fact.models.fact import * # noqa - -__all__ = ['CommandTest','CleanupFactsUnitTest', 'CleanupFactsCommandFunctionalTest'] - -class CleanupFactsCommandFunctionalTest(BaseCommandMixin, BaseTest, MongoDBRequired): - def setUp(self): - super(CleanupFactsCommandFunctionalTest, self).setUp() - self.create_test_license_file() - self.builder = FactScanBuilder() - self.builder.add_fact('ansible', TEST_FACT_ANSIBLE) - - def test_invoke_zero_ok(self): - self.builder.set_epoch(datetime(year=2015, day=2, month=1, microsecond=0)) - self.builder.build(scan_count=20, host_count=10) - - result, stdout, stderr = self.run_command('cleanup_facts', granularity='2y', older_than='1d') - self.assertEqual(stdout, 'Deleted %s facts.\n' % ((200 / 2))) - - def test_invoke_zero_deleted(self): - result, stdout, stderr = self.run_command('cleanup_facts', granularity='1w',older_than='5d') - self.assertEqual(stdout, 'Deleted 0 facts.\n') - - def test_invoke_all_deleted(self): - self.builder.build(scan_count=20, host_count=10) - - result, stdout, stderr = self.run_command('cleanup_facts', granularity='0d', older_than='0d') - self.assertEqual(stdout, 'Deleted 200 facts.\n') - - def test_invoke_params_required(self): - result, stdout, stderr = self.run_command('cleanup_facts') - self.assertIsInstance(result, CommandError) - self.assertEqual(str(result), 'Both --granularity and --older_than are required.') - - def test_module(self): - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.add_fact('services', TEST_FACT_SERVICES) - self.builder.build(scan_count=5, host_count=5) - - result, stdout, stderr = self.run_command('cleanup_facts', granularity='0d', older_than='0d', module='packages') - self.assertEqual(stdout, 'Deleted 25 facts.\n') - -class CommandTest(BaseTest): - def setUp(self): - super(CommandTest, self).setUp() - self.create_test_license_file() - - @mock.patch('awx.main.management.commands.cleanup_facts.CleanupFacts.run') - def test_parameters_ok(self, run): - - kv = { - 'older_than': '1d', - 'granularity': '1d', - 'module': None, - } - cmd = Command() - cmd.handle(None, **kv) - run.assert_called_once_with(relativedelta(days=1), relativedelta(days=1), module=None) - - def test_string_time_to_timestamp_ok(self): - kvs = [ - { - 'time': '2w', - 'timestamp': relativedelta(weeks=2), - 'msg': '2 weeks', - }, - { - 'time': '23d', - 'timestamp': relativedelta(days=23), - 'msg': '23 days', - }, - { - 'time': '11m', - 'timestamp': relativedelta(months=11), - 'msg': '11 months', - }, - { - 'time': '14y', - 'timestamp': relativedelta(years=14), - 'msg': '14 years', - }, - ] - for kv in kvs: - cmd = Command() - res = cmd.string_time_to_timestamp(kv['time']) - self.assertEqual(kv['timestamp'], res, "%s should convert to %s" % (kv['time'], kv['msg'])) - - def test_string_time_to_timestamp_invalid(self): - kvs = [ - { - 'time': '2weeks', - 'msg': 'weeks instead of w', - }, - { - 'time': '2days', - 'msg': 'days instead of d', - }, - { - 'time': '23', - 'msg': 'no unit specified', - }, - { - 'time': None, - 'msg': 'no value specified', - }, - { - 'time': 'zigzag', - 'msg': 'random string specified', - }, - ] - for kv in kvs: - cmd = Command() - res = cmd.string_time_to_timestamp(kv['time']) - self.assertIsNone(res, kv['msg']) - - # Mock run() just in case, but it should never get called because an error should be thrown - @mock.patch('awx.main.management.commands.cleanup_facts.CleanupFacts.run') - def test_parameters_fail(self, run): - kvs = [ - { - 'older_than': '1week', - 'granularity': '1d', - 'msg': 'Invalid older_than param value', - }, - { - 'older_than': '1d', - 'granularity': '1year', - 'msg': 'Invalid granularity param value', - } - ] - for kv in kvs: - cmd = Command() - with self.assertRaises(CommandError): - cmd.handle(None, older_than=kv['older_than'], granularity=kv['granularity']) - -class CleanupFactsUnitTest(BaseCommandMixin, BaseTest, MongoDBRequired): - def setUp(self): - super(CleanupFactsUnitTest, self).setUp() - - self.builder = FactScanBuilder() - self.builder.add_fact('ansible', TEST_FACT_ANSIBLE) - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.build(scan_count=20, host_count=10) - - ''' - Create 10 hosts with 40 facts each. After cleanup, there should be 20 facts for each host. - Then ensure the correct facts are deleted. - ''' - def test_cleanup_logic(self): - cleanup_facts = CleanupFacts() - fact_oldest = FactVersion.objects.all().order_by('timestamp').first() - granularity = relativedelta(years=2) - - deleted_count = cleanup_facts.cleanup(self.builder.get_timestamp(0), granularity) - self.assertEqual(deleted_count, 2 * (self.builder.get_scan_count() * self.builder.get_host_count()) / 2) - - # Check the number of facts per host - for host in self.builder.get_hosts(): - count = FactVersion.objects.filter(host=host).count() - scan_count = (2 * self.builder.get_scan_count()) / 2 - self.assertEqual(count, scan_count) - - count = Fact.objects.filter(host=host).count() - self.assertEqual(count, scan_count) - - # Ensure that only 2 facts (ansible and packages) exists per granularity time - date_pivot = self.builder.get_timestamp(0) - for host in self.builder.get_hosts(): - while date_pivot > fact_oldest.timestamp: - date_pivot_next = date_pivot - granularity - kv = { - 'timestamp__lte': date_pivot, - 'timestamp__gt': date_pivot_next, - 'host': host, - } - count = FactVersion.objects.filter(**kv).count() - self.assertEqual(count, 2, "should only be 2 FactVersion per the 2 year granularity") - count = Fact.objects.filter(**kv).count() - self.assertEqual(count, 2, "should only be 2 Fact per the 2 year granularity") - date_pivot = date_pivot_next - - ''' - Create 10 hosts with 40 facts each. After cleanup, there should be 30 facts for each host. - Then ensure the correct facts are deleted. - ''' - def test_cleanup_module(self): - cleanup_facts = CleanupFacts() - fact_oldest = FactVersion.objects.all().order_by('timestamp').first() - granularity = relativedelta(years=2) - - deleted_count = cleanup_facts.cleanup(self.builder.get_timestamp(0), granularity, module='ansible') - self.assertEqual(deleted_count, (self.builder.get_scan_count() * self.builder.get_host_count()) / 2) - - # Check the number of facts per host - for host in self.builder.get_hosts(): - count = FactVersion.objects.filter(host=host).count() - self.assertEqual(count, 30) - - count = Fact.objects.filter(host=host).count() - self.assertEqual(count, 30) - - # Ensure that only 1 ansible fact exists per granularity time - date_pivot = self.builder.get_timestamp(0) - for host in self.builder.get_hosts(): - while date_pivot > fact_oldest.timestamp: - date_pivot_next = date_pivot - granularity - kv = { - 'timestamp__lte': date_pivot, - 'timestamp__gt': date_pivot_next, - 'host': host, - 'module': 'ansible', - } - count = FactVersion.objects.filter(**kv).count() - self.assertEqual(count, 1) - count = Fact.objects.filter(**kv).count() - self.assertEqual(count, 1) - date_pivot = date_pivot_next - - - - - - diff --git a/awx/main/tests/commands/remove_instance.py b/awx/main/tests/commands/remove_instance.py deleted file mode 100644 index d93285ea7e..0000000000 --- a/awx/main/tests/commands/remove_instance.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -import uuid - -# AWX -from awx.main.tests.base import BaseTest -from awx.main.tests.commands.base import BaseCommandMixin -from awx.main.models import * # noqa - -__all__ = ['RemoveInstanceCommandFunctionalTest'] - -class RemoveInstanceCommandFunctionalTest(BaseCommandMixin, BaseTest): - uuids = [] - instances = [] - - def setup_instances(self): - self.uuids = [uuid.uuid4().hex for x in range(0, 3)] - self.instances.append(Instance(uuid=settings.SYSTEM_UUID, primary=True, hostname='127.0.0.1')) - self.instances.append(Instance(uuid=self.uuids[0], primary=False, hostname='127.0.0.2')) - self.instances.append(Instance(uuid=self.uuids[1], primary=False, hostname='127.0.0.3')) - self.instances.append(Instance(uuid=self.uuids[2], primary=False, hostname='127.0.0.4')) - for x in self.instances: - x.save() - - def setUp(self): - super(RemoveInstanceCommandFunctionalTest, self).setUp() - self.create_test_license_file() - self.setup_instances() - self.setup_users() - - def test_default(self): - self.assertEqual(Instance.objects.filter(hostname="127.0.0.2").count(), 1) - result, stdout, stderr = self.run_command('remove_instance', hostname='127.0.0.2') - self.assertIsNone(result) - self.assertEqual(stdout, 'Successfully removed instance (uuid="%s",hostname="127.0.0.2",role="secondary").\n' % (self.uuids[0])) - self.assertEqual(Instance.objects.filter(hostname="127.0.0.2").count(), 0) - diff --git a/awx/main/tests/commands/run_fact_cache_receiver.py b/awx/main/tests/commands/run_fact_cache_receiver.py deleted file mode 100644 index 0dac618758..0000000000 --- a/awx/main/tests/commands/run_fact_cache_receiver.py +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -import time -from datetime import datetime -import mock -import unittest2 as unittest -from copy import deepcopy -from mock import MagicMock - -# AWX -from awx.main.tests.base import BaseTest -from awx.fact.tests.base import MongoDBRequired -from awx.main.tests.commands.base import BaseCommandMixin -from awx.main.management.commands.run_fact_cache_receiver import FactCacheReceiver -from awx.fact.models.fact import * # noqa - -__all__ = ['RunFactCacheReceiverUnitTest', 'RunFactCacheReceiverFunctionalTest'] - -TEST_MSG_BASE = { - 'host': 'hostname1', - 'date_key': time.mktime(datetime.utcnow().timetuple()), - 'facts' : { }, - 'inventory_id': 1 -} - -TEST_MSG_MODULES = { - 'packages': { - "accountsservice": [ - { - "architecture": "amd64", - "name": "accountsservice", - "source": "apt", - "version": "0.6.35-0ubuntu7.1" - } - ], - "acpid": [ - { - "architecture": "amd64", - "name": "acpid", - "source": "apt", - "version": "1:2.0.21-1ubuntu2" - } - ], - "adduser": [ - { - "architecture": "all", - "name": "adduser", - "source": "apt", - "version": "3.113+nmu3ubuntu3" - } - ], - }, - 'services': [ - { - "name": "acpid", - "source": "sysv", - "state": "running" - }, - { - "name": "apparmor", - "source": "sysv", - "state": "stopped" - }, - { - "name": "atd", - "source": "sysv", - "state": "running" - }, - { - "name": "cron", - "source": "sysv", - "state": "running" - } - ], - 'ansible': { - 'ansible_fact_simple': 'hello world', - 'ansible_fact_complex': { - 'foo': 'bar', - 'hello': [ - 'scooby', - 'dooby', - 'doo' - ] - }, - } -} -# Derived from TEST_MSG_BASE -TEST_MSG = dict(TEST_MSG_BASE) - -TEST_MSG_LARGE = {u'ansible_product_version': u'To Be Filled By O.E.M.', u'ansible_memory_mb': {u'real': {u'total': 32062, u'used': 8079, u'free': 23983}, u'swap': {u'cached': 0, u'total': 0, u'used': 0, u'free': 0}, u'nocache': {u'used': 4339, u'free': 27723}}, u'ansible_user_dir': u'/root', u'ansible_userspace_bits': u'64', u'ansible_distribution_version': u'14.04', u'ansible_virtualization_role': u'guest', u'ansible_env': {u'ANSIBLE_PARAMIKO_RECORD_HOST_KEYS': u'False', u'LC_CTYPE': u'en_US.UTF-8', u'JOB_CALLBACK_DEBUG': u'1', u'_MP_FORK_LOGFILE_': u'', u'HOME': u'/', u'REST_API_TOKEN': u'122-5deb0d6fcec85f3bf44fec6ce170600c', u'LANG': u'en_US.UTF-8', u'SHELL': u'/bin/bash', u'_MP_FORK_LOGFORMAT_': u'[%(asctime)s: %(levelname)s/%(processName)s] %(message)s', u'_': u'/usr/bin/make', u'DJANGO_PROJECT_DIR': u'/tower_devel', u'MFLAGS': u'-w', u'JOB_ID': u'122', u'PYTHONPATH': u'/tower_devel/awx/lib/site-packages:', u'_MP_FORK_LOGLEVEL_': u'10', u'ANSIBLE_CACHE_PLUGIN_CONNECTION': u'tcp://127.0.0.1:6564', u'ANSIBLE_LIBRARY': u'/tower_devel/awx/plugins/library', u'CELERY_LOG_LEVEL': u'10', u'HOSTNAME': u'2842b3619fa8', u'MAKELEVEL': u'2', u'TMUX_PANE': u'%1', u'DJANGO_LIVE_TEST_SERVER_ADDRESS': u'localhost:9013-9199', u'CELERY_LOG_REDIRECT': u'1', u'PATH': u'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', u'CALLBACK_CONSUMER_PORT': u'tcp://127.0.0.1:5557', u'MAKEFLAGS': u'w', u'ANSIBLE_CALLBACK_PLUGINS': u'/tower_devel/awx/plugins/callback', u'TERM': u'screen', u'TZ': u'America/New_York', u'LANGUAGE': u'en_US:en', u'ANSIBLE_SSH_CONTROL_PATH': u'/tmp/ansible_tower_y3xGdA/cp/ansible-ssh-%%h-%%p-%%r', u'SHLVL': u'1', u'CELERY_LOG_FILE': u'', u'ANSIBLE_HOST_KEY_CHECKING': u'False', u'TMUX': u'/tmp/tmux-0/default,3719,0', u'CELERY_LOADER': u'djcelery.loaders.DjangoLoader', u'LC_ALL': u'en_US.UTF-8', u'ANSIBLE_FORCE_COLOR': u'True', u'REST_API_URL': u'http://127.0.0.1:8013', u'CELERY_LOG_REDIRECT_LEVEL': u'WARNING', u'INVENTORY_HOSTVARS': u'True', u'ANSIBLE_CACHE_PLUGIN': u'tower', u'INVENTORY_ID': u'1', u'PWD': u'/tower_devel/awx/playbooks', u'DJANGO_SETTINGS_MODULE': u'awx.settings.development', u'ANSIBLE_CACHE_PLUGINS': u'/tower_devel/awx/plugins/fact_caching'}, u'ansible_lo': {u'mtu': 65536, u'device': u'lo', u'promisc': False, u'ipv4': {u'netmask': u'255.0.0.0', u'network': u'127.0.0.0', u'address': u'127.0.0.1'}, u'ipv6': [{u'scope': u'host', u'prefix': u'128', u'address': u'::1'}], u'active': True, u'type': u'loopback'}, u'ansible_memtotal_mb': 32062, u'ansible_architecture': u'x86_64', u'ansible_default_ipv4': {u'alias': u'eth0', u'netmask': u'255.255.0.0', u'macaddress': u'02:42:ac:11:00:01', u'network': u'172.17.0.0', u'address': u'172.17.0.1', u'interface': u'eth0', u'type': u'ether', u'gateway': u'172.17.42.1', u'mtu': 1500}, u'ansible_swapfree_mb': 0, u'ansible_default_ipv6': {}, u'ansible_cmdline': {u'nomodeset': True, u'rw': True, u'initrd': u'EFIarchinitramfs-arch.img', u'rootfstype': u'ext4', u'root': u'/dev/sda4', u'systemd.unit': u'graphical.target'}, u'ansible_selinux': False, u'ansible_userspace_architecture': u'x86_64', u'ansible_product_uuid': u'00020003-0004-0005-0006-000700080009', u'ansible_pkg_mgr': u'apt', u'ansible_memfree_mb': 23983, u'ansible_distribution': u'Ubuntu', u'ansible_processor_count': 1, u'ansible_hostname': u'2842b3619fa8', u'ansible_all_ipv6_addresses': [u'fe80::42:acff:fe11:1'], u'ansible_interfaces': [u'lo', u'eth0'], u'ansible_kernel': u'4.0.1-1-ARCH', u'ansible_fqdn': u'2842b3619fa8', u'ansible_mounts': [{u'uuid': u'NA', u'size_total': 10434699264, u'mount': u'/', u'size_available': 4918865920, u'fstype': u'ext4', u'device': u'/dev/mapper/docker-8:4-18219321-2842b3619fa885d19e47302009754a4bfd54c1b32c7f21e98f38c7fe7412d3d0', u'options': u'rw,relatime,discard,stripe=16,data=ordered'}, {u'uuid': u'NA', u'size_total': 570629263360, u'mount': u'/tower_devel', u'size_available': 240166572032, u'fstype': u'ext4', u'device': u'/dev/sda4', u'options': u'rw,relatime,data=ordered'}, {u'uuid': u'NA', u'size_total': 570629263360, u'mount': u'/etc/resolv.conf', u'size_available': 240166572032, u'fstype': u'ext4', u'device': u'/dev/sda4', u'options': u'rw,relatime,data=ordered'}, {u'uuid': u'NA', u'size_total': 570629263360, u'mount': u'/etc/hostname', u'size_available': 240166572032, u'fstype': u'ext4', u'device': u'/dev/sda4', u'options': u'rw,relatime,data=ordered'}, {u'uuid': u'NA', u'size_total': 570629263360, u'mount': u'/etc/hosts', u'size_available': 240166572032, u'fstype': u'ext4', u'device': u'/dev/sda4', u'options': u'rw,relatime,data=ordered'}], u'ansible_user_shell': u'/bin/bash', u'ansible_nodename': u'2842b3619fa8', u'ansible_product_serial': u'To Be Filled By O.E.M.', u'ansible_form_factor': u'Desktop', u'ansible_fips': False, u'ansible_user_id': u'root', u'ansible_domain': u'', u'ansible_date_time': {u'month': u'05', u'second': u'47', u'iso8601_micro': u'2015-05-01T19:46:47.868456Z', u'year': u'2015', u'date': u'2015-05-01', u'iso8601': u'2015-05-01T19:46:47Z', u'day': u'01', u'minute': u'46', u'tz': u'EDT', u'hour': u'15', u'tz_offset': u'-0400', u'epoch': u'1430509607', u'weekday': u'Friday', u'time': u'15:46:47'}, u'ansible_processor_cores': 4, u'ansible_processor_vcpus': 4, u'ansible_bios_version': u'P1.80', u'ansible_processor': [u'GenuineIntel', u'Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz', u'GenuineIntel', u'Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz', u'GenuineIntel', u'Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz', u'GenuineIntel', u'Intel(R) Core(TM) i5-2310 CPU @ 2.90GHz'], u'ansible_virtualization_type': u'docker', u'ansible_distribution_release': u'trusty', u'ansible_system_vendor': u'To Be Filled By O.E.M.', u'ansible_os_family': u'Debian', u'ansible_user_gid': 0, u'ansible_swaptotal_mb': 0, u'ansible_system': u'Linux', u'ansible_devices': {u'sda': {u'sectorsize': u'4096', u'vendor': u'ATA', u'host': u'', u'support_discard': u'0', u'model': u'ST1000DM003-9YN1', u'size': u'7.28 TB', u'scheduler_mode': u'cfq', u'rotational': u'1', u'sectors': u'1953525168', u'removable': u'0', u'holders': [], u'partitions': {u'sda4': {u'start': u'820979712', u'sectorsize': 512, u'sectors': u'1132545423', u'size': u'540.04 GB'}, u'sda2': {u'start': u'206848', u'sectorsize': 512, u'sectors': u'262144', u'size': u'128.00 MB'}, u'sda3': {u'start': u'468992', u'sectorsize': 512, u'sectors': u'820510720', u'size': u'391.25 GB'}, u'sda1': {u'start': u'2048', u'sectorsize': 512, u'sectors': u'204800', u'size': u'100.00 MB'}}}}, u'ansible_user_uid': 0, u'ansible_distribution_major_version': u'14', u'ansible_lsb': {u'major_release': u'14', u'release': u'14.04', u'codename': u'trusty', u'description': u'Ubuntu 14.04.1 LTS', u'id': u'Ubuntu'}, u'ansible_bios_date': u'12/05/2012', u'ansible_machine': u'x86_64', u'ansible_user_gecos': u'root', u'ansible_processor_threads_per_core': 1, u'ansible_eth0': {u'device': u'eth0', u'promisc': False, u'macaddress': u'02:42:ac:11:00:01', u'ipv4': {u'netmask': u'255.255.0.0', u'network': u'172.17.0.0', u'address': u'172.17.0.1'}, u'ipv6': [{u'scope': u'link', u'prefix': u'64', u'address': u'fe80::42:acff:fe11:1'}], u'active': True, u'type': u'ether', u'mtu': 1500}, u'ansible_product_name': u'To Be Filled By O.E.M.', u'ansible_all_ipv4_addresses': [u'172.17.0.1'], u'ansible_python_version': u'2.7.6'} # noqa - -def copy_only_module(data, module): - data = deepcopy(data) - data['facts'] = {} - if module == 'ansible': - data['facts'] = deepcopy(TEST_MSG_MODULES[module]) - else: - data['facts'][module] = deepcopy(TEST_MSG_MODULES[module]) - return data - - -class RunFactCacheReceiverFunctionalTest(BaseCommandMixin, BaseTest, MongoDBRequired): - @unittest.skip('''\ -TODO: run_fact_cache_receiver enters a while True loop that never exists. \ -This differs from most other commands that we test for. More logic and work \ -would be required to invoke this case from the command line with little return \ -in terms of increase coverage and confidence.''') - def test_invoke(self): - result, stdout, stderr = self.run_command('run_fact_cache_receiver') - self.assertEqual(result, None) - -class RunFactCacheReceiverUnitTest(BaseTest, MongoDBRequired): - - # TODO: Check that timestamp and other attributes are as expected - def check_process_fact_message_module(self, data, module): - fact_found = None - facts = Fact.objects.all() - self.assertEqual(len(facts), 1) - for fact in facts: - if fact.module == module: - fact_found = fact - break - self.assertIsNotNone(fact_found) - #self.assertEqual(data['facts'][module], fact_found[module]) - - fact_found = None - fact_versions = FactVersion.objects.all() - self.assertEqual(len(fact_versions), 1) - for fact in fact_versions: - if fact.module == module: - fact_found = fact - break - self.assertIsNotNone(fact_found) - - - # Ensure that the message flows from the socket through to process_fact_message() - @mock.patch('awx.main.socket.Socket.listen') - def test_run_receiver(self, listen_mock): - listen_mock.return_value = [TEST_MSG] - - receiver = FactCacheReceiver() - receiver.process_fact_message = MagicMock(name='process_fact_message') - receiver.run_receiver(use_processing_threads=False) - - receiver.process_fact_message.assert_called_once_with(TEST_MSG) - - def test_process_fact_message_ansible(self): - data = copy_only_module(TEST_MSG, 'ansible') - - receiver = FactCacheReceiver() - receiver.process_fact_message(data) - - self.check_process_fact_message_module(data, 'ansible') - - def test_process_fact_message_packages(self): - data = copy_only_module(TEST_MSG, 'packages') - - receiver = FactCacheReceiver() - receiver.process_fact_message(data) - - self.check_process_fact_message_module(data, 'packages') - - def test_process_fact_message_services(self): - data = copy_only_module(TEST_MSG, 'services') - - receiver = FactCacheReceiver() - receiver.process_fact_message(data) - - self.check_process_fact_message_module(data, 'services') - - - # Ensure that only a single host gets created for multiple invocations with the same hostname - def test_process_fact_message_single_host_created(self): - receiver = FactCacheReceiver() - - data = deepcopy(TEST_MSG) - receiver.process_fact_message(data) - data = deepcopy(TEST_MSG) - data['date_key'] = time.mktime(datetime.utcnow().timetuple()) - receiver.process_fact_message(data) - - fact_hosts = FactHost.objects.all() - self.assertEqual(len(fact_hosts), 1) - - def test_process_facts_message_ansible_overwrite(self): - data = copy_only_module(TEST_MSG, 'ansible') - key = 'ansible.overwrite' - value = 'hello world' - - receiver = FactCacheReceiver() - receiver.process_fact_message(data) - - fact = Fact.objects.all()[0] - - data = copy_only_module(TEST_MSG, 'ansible') - data['facts'][key] = value - receiver.process_fact_message(data) - - fact = Fact.objects.get(id=fact.id) - self.assertIn(key, fact.fact) - self.assertEqual(fact.fact[key], value) - self.assertEqual(fact.fact, data['facts']) - - def test_large_overwrite(self): - data = deepcopy(TEST_MSG_BASE) - data['facts'] = { - 'ansible': {} - } - - receiver = FactCacheReceiver() - receiver.process_fact_message(data) - - fact = Fact.objects.all()[0] - - data['facts']['ansible'] = TEST_MSG_LARGE - receiver.process_fact_message(data) - - fact = Fact.objects.get(id=fact.id) - self.assertEqual(fact.fact, data['facts']['ansible']) diff --git a/awx/main/tests/conftest.py b/awx/main/tests/conftest.py new file mode 100644 index 0000000000..470f43e661 --- /dev/null +++ b/awx/main/tests/conftest.py @@ -0,0 +1,41 @@ + +# Python +import pytest + +from awx.main.tests.factories import ( + create_organization, + create_job_template, + create_notification_template, + create_survey_spec, +) + +@pytest.fixture +def job_template_factory(): + return create_job_template + +@pytest.fixture +def organization_factory(): + return create_organization + +@pytest.fixture +def notification_template_factory(): + return create_notification_template + +@pytest.fixture +def survey_spec_factory(): + return create_survey_spec + +@pytest.fixture +def job_with_secret_key_factory(job_template_factory): + def rf(persisted): + "Returns job with linked JT survey with password survey questions" + objects = job_template_factory('jt', organization='org1', survey=[ + {'variable': 'submitter_email', 'type': 'text', 'default': 'foobar@redhat.com'}, + {'variable': 'secret_key', 'default': '6kQngg3h8lgiSTvIEb21', 'type': 'password'}, + {'variable': 'SSN', 'type': 'password'}], jobs=[1], persisted=persisted) + return objects.jobs[1] + return rf + +@pytest.fixture +def job_with_secret_key_unit(job_with_secret_key_factory): + return job_with_secret_key_factory(persisted=False) diff --git a/awx/main/tests/data/__init__.py b/awx/main/tests/data/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/awx/main/tests/data/splunk_inventory.py b/awx/main/tests/data/splunk_inventory.py deleted file mode 100755 index 6b4527d027..0000000000 --- a/awx/main/tests/data/splunk_inventory.py +++ /dev/null @@ -1,22166 +0,0 @@ -#!/usr/bin/env python - -# Python -import json -import optparse -import sys - -inventory_dict = { - "AWS Prod": { - "children": [ - "security_group_tower", - "tag_Role_cluster-master", - "type_c3_2xlarge", - "tag_Role_license-master", - "tag_whisper_version_SEC-1639-20140414T1539-WR_17_HF3", - "tag_Name_trial640_-_idx3", - "tag_FQDN_sh1_trial614_splunkcloud_com", - "security_group_finra_lm", - "key_infra_trial605", - "key_infra_trial607", - "key_infra_trial606", - "tag_FQDN_idx2_trial647_splunkcloud_com", - "key_infra_trial609", - "tag_Name_trial635_-_sh1", - "tag_Name_poc4_-_idx1", - "tag_Name_poc4_-_idx3", - "tag_Name_poc4_-_idx2", - "tag_Stack_mregan", - "tag_stack_version_SR_8_HF1", - "tag_FQDN_c0m1_mregan_splunkcloud_com", - "key_infra_mregan", - "tag_Name_mregan_-_c0m1", - "tag_customer_type_dev", - "tag_Ticket_CO-546", - "tag_whisper_version_99", - "tag_Role_search-head", - "tag_customer_type_Dev", - "key_infra_CO-920", - "tag_Name_CO-920_-_lm1", - "tag_FQDN_lm1_CO-920_splunkcloud_com", - "tag_Stack_CO-920", - "tag_Name_skynet_-_idx5", - "tag_FQDN_idx5_skynet_splunkcloud_com", - "tag_Name_skynet_-_idx6", - "tag_FQDN_idx6_skynet_splunkcloud_com", - "tag_customer_type_POC", - "us-east-1c", - "tag_Name_skynet_-_idx4", - "tag_FQDN_idx4_skynet_splunkcloud_com", - "tag_BuildUser_Mike_Regan", - "tag_Name_skynet_-_idx3", - "tag_FQDN_idx3_skynet_splunkcloud_com", - "tag_Name_skynet_-_idx1", - "tag_FQDN_idx1_skynet_splunkcloud_com", - "tag_Name_skynet_-_idx2", - "tag_FQDN_idx2_skynet_splunkcloud_com", - "security_group_skynet", - "tag_Stack_skynet", - "key_infra_skynet", - "tag_customer_type_Customer", - "type_m2_4xlarge", - "us-east-1b", - "security_group_default", - "us-east-1", - "tag_whisper_version_SEC-1518-20140319T1154-WR_17_HF2", - "ec2", - "tag_Role_indexer", - "us-east-1a", - "tag_stackmakr_version_SEC-1553-20140326T1633-SR_8_HF1", - "tag_Name_CO-920_-_c0m1", - "tag_FQDN_c0m1_CO-920_splunkcloud_com", - "tag_Name_splunk-sfdc_-_lm1", - "tag_FQDN_lm1_splunk-sfdc_splunkcloud_com", - "key_infra_splunk-sfdc", - "tag_Name_splunk-sfdc_-_c0m1", - "tag_FQDN_idx3_splunk-sfdc_splunkcloud_com", - "tag_FQDN_idx1_splunk-sfdc_splunkcloud_com", - "tag_FQDN_idx2_splunk-sfdc_splunkcloud_com", - "tag_BuildUser_bwong", - "tag_FQDN_idx2_CO-920_splunkcloud_com", - "tag_Name_CO-920_-_idx2", - "tag_Name_CO-920_-_idx3", - "security_group_splunk-sfdc", - "tag_Stack_splunk-sfdc", - "tag_Name_splunk-sfdc_-_idx1", - "tag_Ticket_CO-915", - "tag_Name_splunk-sfdc_-_idx2", - "tag_Name_splunk-sfdc_-_idx3", - "tag_FQDN_c0m1_splunk-sfdc_splunkcloud_com", - "tag_Name_CO-920_-_sh1", - "tag_Name_CO-920_-_idx1", - "tag_FQDN_idx1_CO-920_splunkcloud_com", - "tag_FQDN_sh1_splunk-sfdc_splunkcloud_com", - "tag_Name_splunk-sfdc_-_sh1", - "tag_FQDN_idx1_prod-monitor-red_splunkcloud_com", - "tag_Stack_prod-monitor-red", - "tag_Name_prod-monitor-red_-_sh1", - "tag_Name_prod-monitor-red_-_c0m1", - "tag_FQDN_idx3_CO-920_splunkcloud_com", - "tag_FQDN_sh1_CO-920_splunkcloud_com", - "type_m1_xlarge", - "tag_Ticket_CO-920", - "tag_stackmakr_version_9109", - "key_infra_prod-monitor-red", - "tag_Name_prod-monitor-red_-_idx3", - "tag_FQDN_idx2_prod-monitor-red_splunkcloud_com", - "tag_Name_trial629_-_lm1", - "security_group_mckesson_sh", - "tag_FQDN_c0m1_trial617_splunkcloud_com", - "tag_Name_trial623_-_c0m1", - "tag_Name_poc2_-_lm1", - "tag_FQDN_lm1_trial619_splunkcloud_com", - "tag_FQDN_lm1_trial628_splunkcloud_com", - "tag_FQDN_c0m1_trial618_splunkcloud_com", - "tag_FQDN_ops-red-exec01_stackmakr-ops-red_splunkcloud_com", - "tag_Name_trial633_-_lm1", - "tag_Name_trial636_-_lm1", - "tag_Name_trial641_-_c0m1", - "tag_Name_intermedia_-_c0m1", - "tag_Name_trial611_-_c0m1", - "tag_Name_lyft_-_c0m1", - "tag_Name_idexx_-_lm1", - "tag_FQDN_lm1_trial640_splunkcloud_com", - "tag_FQDN_c0m1_funtomic-prod_splunkcloud_com", - "tag_FQDN_lm1_gilt_splunkcloud_com", - "tag_FQDN_c0m1_lyft_splunkcloud_com", - "tag_FQDN_lm1_trial647_splunkcloud_com", - "tag_Name_trial636_-_c0m1", - "tag_FQDN_lm1_trial642_splunkcloud_com", - "tag_Name_poc3_-_c0m1", - "tag_FQDN_lm1_trial625_splunkcloud_com", - "tag_Name_mckesson_-_c0m1", - "tag_FQDN_c0m1_trial612_splunkcloud_com", - "tag_Name_trial629_-_c0m1", - "tag_Name_sonos_-_lm1", - "tag_FQDN_c0m1_k14_splunkcloud_com", - "tag_Name_mregan_-_lm1", - "tag_FQDN_c0m1_trial614_splunkcloud_com", - "tag_Name_motionsoft_-_lm1", - "tag_FQDN_lm1_intermedia_splunkcloud_com", - "tag_Name_trial630_-_lm1", - "tag_Name_mregan_-_idx1", - "tag_Name_trial617_-_c0m1", - "tag_Name_mregan_-_idx3", - "tag_Name_mregan_-_idx2", - "tag_FQDN_c0m1_trial640_splunkcloud_com", - "tag_FQDN_lm1_funtomic-prod_splunkcloud_com", - "tag_Name_trial635_-_lm1", - "tag_FQDN_c0m1_trial625_splunkcloud_com", - "tag_customer_type_Test", - "tag_Name_prod-monitor-red_-_idx2", - "tag_Name_prod-monitor-red_-_idx1", - "tag_Name_defensenet_-_lm1", - "tag_Name_trial640_-_lm1", - "tag_Name_backupify_-_lm1", - "tag_Name_mindtouch_-_lm1", - "tag_FQDN_sh2_skynet_splunkcloud_com", - "tag_FQDN_c0m1_trial630_splunkcloud_com", - "tag_FQDN_c0m1_mindtouch_splunkcloud_com", - "tag_FQDN_lm1_trial623_splunkcloud_com", - "tag_FQDN_lm1_defensenet_splunkcloud_com", - "tag_Name_trial619_-_c0m1", - "tag_FQDN_lm1_trial637_splunkcloud_com", - "tag_Name_trial643_-_lm1", - "tag_FQDN_lm1_trial613_splunkcloud_com", - "tag_FQDN_lm1_trial620_splunkcloud_com", - "tag_Name_trial628_-_c0m1", - "tag_FQDN_lm1_trial607_splunkcloud_com", - "tag_FQDN_lm1_trial609_splunkcloud_com", - "tag_FQDN_lm1_trial629_splunkcloud_com", - "tag_FQDN_lm1_trial635_splunkcloud_com", - "tag_FQDN_lm1_mregan_splunkcloud_com", - "tag_Name_climate_-_c0m1", - "tag_FQDN_c0m1_poc4_splunkcloud_com", - "tag_FQDN_c0m1_trial631_splunkcloud_com", - "tag_FQDN_lm1_spm1_splunkcloud_com", - "tag_FQDN_c0m1_trial643_splunkcloud_com", - "tag_Name_skynet_-_sh1", - "tag_FQDN_lm1_trial641_splunkcloud_com", - "tag_Name_trial640_-_c0m1", - "tag_Name_spm1_-_lm1", - "tag_FQDN_idx3_prod-monitor-red_splunkcloud_com", - "tag_FQDN_idx2_mregan_splunkcloud_com", - "tag_FQDN_c0m1_trial615_splunkcloud_com", - "tag_Name_sonos_-_c0m1", - "tag_FQDN_ops-red-exec02_stackmakr-ops-red_splunkcloud_com", - "tag_FQDN_c0m1_trial644_splunkcloud_com", - "tag_Name_trial622_-_lm1", - "tag_FQDN_c0m1_trial620_splunkcloud_com", - "tag_Name_trial613_-_lm1", - "tag_FQDN_lm1_trial644_splunkcloud_com", - "tag_Name_trial639_-_c0m1", - "tag_FQDN_c0m1_poc3_splunkcloud_com", - "tag_Name_climate_-_lm1", - "tag_FQDN_lm1_white-ops_splunkcloud_com", - "tag_FQDN_lm1_trial630_splunkcloud_com", - "tag_FQDN_c0m1_idexx_splunkcloud_com", - "tag_FQDN_c0m1_intermedia_splunkcloud_com", - "tag_Name_trial616_-_c0m1", - "tag_FQDN_lm1_idexx_splunkcloud_com", - "tag_FQDN_c0m1_motionsoft_splunkcloud_com", - "tag_FQDN_lm1_trial611_splunkcloud_com", - "tag_Name_intermedia_-_lm1", - "tag_Name_backupify_-_c0m1", - "tag_Name_trial607_-_lm1", - "tag_FQDN_c0m1_trial629_splunkcloud_com", - "tag_FQDN_lm1_trial616_splunkcloud_com", - "tag_FQDN_c0m1_poc2_splunkcloud_com", - "tag_Name_skynet_-_sh2", - "tag_Name_skynet_-_sh3", - "tag_Name_trial634_-_lm1", - "tag_Name_take2_-_c0m1", - "tag_FQDN_c0m1_trial613_splunkcloud_com", - "tag_Name_trial637_-_c0m1", - "tag_FQDN_c0m1_trial623_splunkcloud_com", - "tag_Name_trial612_-_lm1", - "tag_FQDN_c0m1_trial637_splunkcloud_com", - "tag_FQDN_c0m1_trial639_splunkcloud_com", - "tag_FQDN_c0m1_trial605_splunkcloud_com", - "tag_Name_trial633_-_c0m1", - "tag_Name_trial607_-_c0m1", - "tag_FQDN_lm1_backupify_splunkcloud_com", - "tag_FQDN_c0m1_climate_splunkcloud_com", - "tag_FQDN_lm1_poc3_splunkcloud_com", - "tag_Name_trial606_-_c0m1", - "tag_FQDN_lm1_poc1_splunkcloud_com", - "tag_FQDN_lm1_trial614_splunkcloud_com", - "tag_Name_gilt_-_c0m1", - "tag_FQDN_lm1_trial626_splunkcloud_com", - "tag_Name_stackmakr-ops-red_-_jenkins01", - "tag_FQDN_c0m1_trial619_splunkcloud_com", - "tag_Name_mindtouch_-_c0m1", - "tag_Name_trial644_-_c0m1", - "tag_FQDN_c0m1_white-ops_splunkcloud_com", - "tag_FQDN_c0m1_trial609_splunkcloud_com", - "tag_Name_trial634_-_c0m1", - "tag_FQDN_c0m1_trial647_splunkcloud_com", - "tag_Name_trial626_-_lm1", - "tag_FQDN_c0m1_backupify_splunkcloud_com", - "tag_Name_stackmakr-ops-red_-_ops-red-exec01", - "tag_Name_trial625_-_c0m1", - "tag_FQDN_lm1_trial643_splunkcloud_com", - "tag_FQDN_lm1_trial627_splunkcloud_com", - "tag_Name_trial643_-_c0m1", - "tag_FQDN_c0m1_sonos_splunkcloud_com", - "tag_FQDN_lm1_poc2_splunkcloud_com", - "tag_FQDN_lm1_skynet_splunkcloud_com", - "tag_FQDN_lm1_sonos_splunkcloud_com", - "tag_FQDN_c0m1_trial642_splunkcloud_com", - "tag_FQDN_c0m1_trial645_splunkcloud_com", - "tag_FQDN_lm1_trial646_splunkcloud_com", - "tag_FQDN_c0m1_trial627_splunkcloud_com", - "tag_Name_trial647_-_lm1", - "tag_Name_k14_-_lm1", - "tag_Name_trial625_-_lm1", - "tag_Name_trial627_-_lm1", - "tag_Name_white-ops_-_c0m1", - "tag_Ticket_CO-895", - "tag_FQDN_lm1_trial612_splunkcloud_com", - "tag_FQDN_lm1_anaplan_splunkcloud_com", - "tag_FQDN_c0m1_trial641_splunkcloud_com", - "tag_Name_trial606_-_lm1", - "tag_Name_finra_-_sh2", - "tag_Name_trial616_-_lm1", - "tag_Name_trial641_-_lm1", - "tag_FQDN_c0m1_trial626_splunkcloud_com", - "tag_FQDN_sh3_skynet_splunkcloud_com", - "tag_FQDN_idx3_mregan_splunkcloud_com", - "tag_Name_trial620_-_c0m1", - "tag_Name_trial635_-_c0m1", - "tag_FQDN_lm1_trial633_splunkcloud_com", - "tag_Name_trial638_-_lm1", - "tag_FQDN_c0m1_trial616_splunkcloud_com", - "tag_Name_trial631_-_lm1", - "tag_Name_trial614_-_lm1", - "type_t1_micro", - "tag_Name_trial615_-_lm1", - "tag_Name_stackmakr-ops-red_-_ops-red-exec02", - "tag_FQDN_lm1_trial634_splunkcloud_com", - "tag_FQDN_lm1_trial639_splunkcloud_com", - "tag_Name_trial642_-_lm1", - "tag_Name_stackmakr-ops-red_-_ops-red-exec04", - "tag_FQDN_c0m1_trial634_splunkcloud_com", - "tag_FQDN_lm1_trial621_splunkcloud_com", - "tag_Name_gilt_-_lm1", - "tag_FQDN_lm1_motionsoft_splunkcloud_com", - "tag_FQDN_c0m1_spm1_splunkcloud_com", - "tag_Name_skynet_-_c0m1", - "tag_FQDN_c0m1_trial606_splunkcloud_com", - "tag_FQDN_c0m1_trial635_splunkcloud_com", - "tag_Name_trial645_-_c0m1", - "tag_Name_mindtouch_-_sh2", - "tag_Name_trial613_-_c0m1", - "tag_Name_take2_-_lm1", - "tag_FQDN_c0m1_trial628_splunkcloud_com", - "tag_FQDN_sh1_mregan_splunkcloud_com", - "tag_Name_trial605_-_c0m1", - "tag_Name_trial644_-_lm1", - "tag_Name_trial619_-_lm1", - "tag_Name_defensenet_-_c0m1", - "tag_FQDN_lm1_mckesson_splunkcloud_com", - "tag_Name_trial646_-_lm1", - "tag_Name_poc4_-_lm1", - "tag_Name_poc3_-_lm1", - "tag_FQDN_c0m1_trial622_splunkcloud_com", - "tag_Name_trial609_-_lm1", - "tag_FQDN_lm1_climate_splunkcloud_com", - "tag_FQDN_c0m1_defensenet_splunkcloud_com", - "tag_Name_trial647_-_c0m1", - "tag_FQDN_lm1_trial605_splunkcloud_com", - "tag_FQDN_lm1_trial645_splunkcloud_com", - "tag_Name_trial637_-_lm1", - "tag_FQDN_lm1_trial606_splunkcloud_com", - "tag_FQDN_c0m1_poc1_splunkcloud_com", - "tag_FQDN_c0m1_gilt_splunkcloud_com", - "tag_FQDN_idx1_mregan_splunkcloud_com", - "tag_Name_lyft_-_lm1", - "tag_FQDN_c0m1_skynet_splunkcloud_com", - "tag_FQDN_lm1_trial617_splunkcloud_com", - "tag_Name_anaplan_-_c0m1", - "tag_Name_trial631_-_c0m1", - "tag_Name_poc4_-_c0m1", - "tag_Name_motionsoft_-_c0m1", - "tag_FQDN_c0m1_trial633_splunkcloud_com", - "tag_Name_trial646_-_c0m1", - "tag_FQDN_lm1_take2_splunkcloud_com", - "tag_Name_idexx_-_c0m1", - "tag_FQDN_lm1_lyft_splunkcloud_com", - "tag_Name_trial626_-_c0m1", - "tag_FQDN_c0m1_trial611_splunkcloud_com", - "tag_Name_trial627_-_c0m1", - "tag_Name_mregan_-_sh1", - "tag_FQDN_c0m1_trial646_splunkcloud_com", - "tag_Name_trial632_-_lm1", - "tag_FQDN_c0m1_anaplan_splunkcloud_com", - "tag_Name_trial615_-_c0m1", - "tag_Name_poc1_-_c0m1", - "tag_Name_trial621_-_lm1", - "tag_FQDN_lm1_trial636_splunkcloud_com", - "tag_Name_skynet_-_lm1", - "tag_Stack_stackmakr-ops-red", - "tag_Name_trial630_-_c0m1", - "tag_Name_prod_infra_test", - "tag_FQDN_c0m1_trial636_splunkcloud_com", - "tag_Name_trial612_-_c0m1", - "tag_Name_trial618_-_c0m1", - "tag_Name_trial632_-_c0m1", - "tag_Name_trial645_-_lm1", - "tag_Name_trial617_-_lm1", - "tag_Name_k14_-_c0m1", - "tag_FQDN_lm1_trial622_splunkcloud_com", - "tag_Name_trial609_-_c0m1", - "tag_FQDN_jenkins01_stackmakr-ops-red_splunkcloud_com", - "tag_Name_funtomic-prod_-_lm1", - "tag_FQDN_sh2_mindtouch_splunkcloud_com", - "tag_Name_trial638_-_c0m1", - "tag_FQDN_lm1_trial631_splunkcloud_com", - "tag_Name_white-ops_-_lm1", - "tag_Name_trial620_-_lm1", - "tag_FQDN_sh1_skynet_splunkcloud_com", - "tag_FQDN_c0m1_mckesson_splunkcloud_com", - "tag_FQDN_c0m1_trial607_splunkcloud_com", - "tag_Name_poc1_-_lm1", - "tag_Name_anaplan_-_lm1", - "tag_FQDN_lm1_trial632_splunkcloud_com", - "tag_Name_spm1_-_c0m1", - "tag_Name_trial642_-_c0m1", - "tag_FQDN_c0m1_take2_splunkcloud_com", - "tag_Name_poc2_-_c0m1", - "tag_Name_trial614_-_c0m1", - "tag_Name_stackmakr-ops-red_-_ops-red-exec03", - "tag_FQDN_lm1_trial618_splunkcloud_com", - "tag_FQDN_lm1_mindtouch_splunkcloud_com", - "tag_FQDN_lm1_k14_splunkcloud_com", - "tag_Name_trial622_-_c0m1", - "security_group_stackmakr", - "tag_Name_trial639_-_lm1", - "tag_Name_trial621_-_c0m1", - "tag_Name_funtomic-prod_-_c0m1", - "tag_Name_trial605_-_lm1", - "tag_FQDN_lm1_trial615_splunkcloud_com", - "tag_Name_trial623_-_lm1", - "tag_Name_trial611_-_lm1", - "key_infra_sonos", - "tag_FQDN_c0m1_trial621_splunkcloud_com", - "tag_FQDN_lm1_poc4_splunkcloud_com", - "tag_Name_trial618_-_lm1", - "tag_FQDN_lm1_trial638_splunkcloud_com", - "tag_FQDN_sh2_finra_splunkcloud_com", - "tag_FQDN_c0m1_trial638_splunkcloud_com", - "tag_Name_mckesson_-_lm1", - "tag_FQDN_c0m1_trial632_splunkcloud_com", - "tag_Name_trial628_-_lm1", - "tag_Ticket_CO-749", - "tag_Name_trial631_-_idx3", - "tag_Name_trial612_-_idx1", - "tag_Ticket_CO-807", - "key_infra_trial617", - "key_infra_trial614", - "key_infra_trial615", - "key_infra_trial612", - "tag_FQDN_idx3_funtomic-prod_splunkcloud_com", - "key_infra_trial611", - "tag_FQDN_idx3_mckesson_splunkcloud_com", - "tag_Name_trial614_-_idx1", - "tag_FQDN_idx2_trial606_splunkcloud_com", - "tag_Name_trial614_-_idx3", - "key_infra_trial618", - "key_infra_trial619", - "tag_FQDN_idx2_trial613_splunkcloud_com", - "tag_FQDN_idx3_trial630_splunkcloud_com", - "key_infra_trial626", - "tag_FQDN_sh1_trial613_splunkcloud_com", - "tag_FQDN_idx3_trial643_splunkcloud_com", - "tag_Name_defensenet_-_sh1", - "tag_Stack_defensenet", - "tag_FQDN_idx1_trial628_splunkcloud_com", - "tag_FQDN_idx1_trial634_splunkcloud_com", - "tag_Stack_trial605", - "tag_Ticket_CO-279", - "tag_FQDN_sh1_trial620_splunkcloud_com", - "security_group_trials", - "tag_FQDN_idx1_trial636_splunkcloud_com", - "tag_FQDN_idx3_trial626_splunkcloud_com", - "tag_FQDN_sh1_trial644_splunkcloud_com", - "tag_FQDN_c0m1_poc5_splunkcloud_com", - "tag_Ticket_CO-478", - "tag_FQDN_sh1_trial636_splunkcloud_com", - "tag_Name_trial646_-_sh1", - "key_infra_spm1", - "tag_Name_trial636_-_sh1", - "tag_Name_trial611_-_idx2", - "tag_Name_trial611_-_idx1", - "tag_Name_trial609_-_idx2", - "tag_FQDN_idx1_trial619_splunkcloud_com", - "tag_Name_spm1_-_idx2", - "tag_Name_spm1_-_idx3", - "tag_FQDN_idx3_k14_splunkcloud_com", - "tag_Name_spm1_-_idx1", - "tag_Name_trial606_-_sh1", - "tag_Stack_trial629", - "key_infra_climate", - "tag_Ticket_CO-493", - "tag_FQDN_idx2_trial636_splunkcloud_com", - "tag_FQDN_idx3_trial614_splunkcloud_com", - "tag_FQDN_sh1_trial634_splunkcloud_com", - "tag_Name_idexx_-_idx3", - "tag_FQDN_idx3_trial645_splunkcloud_com", - "tag_Name_trial631_-_sh1", - "tag_FQDN_idx2_poc3_splunkcloud_com", - "tag_FQDN_idx3_lyft_splunkcloud_com", - "tag_FQDN_sh1_defensenet_splunkcloud_com", - "tag_Name_gilt_-_idx4", - "tag_FQDN_idx2_trial631_splunkcloud_com", - "tag_FQDN_idx3_trial615_splunkcloud_com", - "tag_Stack_trial617", - "tag_Name_trial642_-_sh1", - "tag_Stack_trial615", - "tag_Stack_trial614", - "tag_Stack_trial613", - "tag_Stack_trial611", - "tag_FQDN_idx2_trial634_splunkcloud_com", - "tag_Stack_trial619", - "tag_Stack_trial618", - "tag_Name_trial639_-_idx1", - "tag_FQDN_idx8_intermedia_splunkcloud_com", - "tag_Name_trial639_-_idx3", - "tag_Name_trial639_-_idx2", - "tag_FQDN_idx3_gilt_splunkcloud_com", - "tag_FQDN_idx6_intermedia_splunkcloud_com", - "tag_FQDN_idx3_trial607_splunkcloud_com", - "security_group_motionsoft", - "tag_Ticket_CO-653", - "tag_FQDN_idx2_trial612_splunkcloud_com", - "tag_Ticket_CO-651", - "tag_Ticket_CO-650", - "tag_Ticket_CO-655", - "tag_FQDN_sh1_trial612_splunkcloud_com", - "tag_FQDN_idx1_poc2_splunkcloud_com", - "tag_FQDN_idx4_intermedia_splunkcloud_com", - "tag_Stack_intermedia", - "tag_FQDN_idx2_poc4_splunkcloud_com", - "tag_FQDN_sh1_trial632_splunkcloud_com", - "security_group_trial611", - "tag_Name_poc3_-_sh1", - "security_group_NAT", - "tag_Name_spm1_-_sh1", - "tag_FQDN_idx2_motionsoft_splunkcloud_com", - "key_infra_backupify", - "tag_Name_poc5_-_idx2", - "tag_Name_poc5_-_idx3", - "tag_Name_poc5_-_idx1", - "security_group_sonos", - "tag_Name_white-ops_-_sh1", - "key_infra_trial628", - "tag_FQDN_sh1_trial617_splunkcloud_com", - "key_infra_trial641", - "key_infra_trial640", - "key_infra_trial642", - "key_infra_trial645", - "key_infra_trial644", - "key_infra_trial647", - "key_infra_trial646", - "tag_FQDN_idx2_idexx_splunkcloud_com", - "tag_FQDN_sh1_trial618_splunkcloud_com", - "tag_FQDN_lm1_marriott_splunkcloud_com", - "tag_Name_poc3_-_idx1", - "tag_Name_poc3_-_idx2", - "tag_Name_poc3_-_idx3", - "tag_Stack_poc2", - "security_group_mindtouch", - "tag_Stack_motionsoft", - "security_group_take2", - "key_infra_gilt", - "tag_FQDN_idx3_trial642_splunkcloud_com", - "tag_FQDN_idx1_trial611_splunkcloud_com", - "tag_FQDN_sh1_trial626_splunkcloud_com", - "security_group_chef", - "tag_Name_trial641_-_idx2", - "tag_Name_trial641_-_idx3", - "tag_Name_trial641_-_idx1", - "tag_Ticket_CO-874", - "tag_Name_poc2_-_sh1", - "tag_Name_trial617_-_sh1", - "tag_Name_trial609_-_sh1", - "tag_Name_sonos_-_idx6", - "tag_Name_sonos_-_idx4", - "tag_Name_sonos_-_idx5", - "key_infra_white-ops", - "tag_Name_sonos_-_idx3", - "tag_Name_sonos_-_idx1", - "tag_Name_sonos_-_idx2", - "tag_Name_trial628_-_sh1", - "tag_FQDN_idx3_trial646_splunkcloud_com", - "tag_Name_trial631_-_idx1", - "tag_FQDN_idx3_poc1_splunkcloud_com", - "tag_Name_trial612_-_idx3", - "tag_Name_trial619_-_idx3", - "tag_Name_trial616_-_sh1", - "tag_Name_trial613_-_idx1", - "tag_Name_trial613_-_idx3", - "tag_FQDN_idx2_trial629_splunkcloud_com", - "tag_FQDN_idx1_trial612_splunkcloud_com", - "tag_Name_trial631_-_idx2", - "tag_Ticket_CO-194", - "tag_Name_trial619_-_idx1", - "tag_FQDN_idx2_trial620_splunkcloud_com", - "tag_FQDN_sh1_trial647_splunkcloud_com", - "tag_Name_finra_-_lm1", - "tag_FQDN_idx1_trial630_splunkcloud_com", - "tag_FQDN_idx3_trial632_splunkcloud_com", - "tag_FQDN_idx1_trial641_splunkcloud_com", - "security_group_trial621", - "tag_FQDN_idx3_trial636_splunkcloud_com", - "tag_FQDN_sh1_sonos_splunkcloud_com", - "tag_FQDN_sh1_backupify_splunkcloud_com", - "tag_FQDN_idx1_trial633_splunkcloud_com", - "tag_Name_poc2_-_idx1", - "tag_FQDN_idx2_trial614_splunkcloud_com", - "tag_FQDN_idx3_trial639_splunkcloud_com", - "tag_Ticket_CO-562", - "tag_Name_marriott_-_c0m1", - "tag_Name_trial623_-_sh1", - "tag_FQDN_idx4_finra_splunkcloud_com", - "tag_Name_trial625_-_idx3", - "tag_FQDN_sh1_idexx_splunkcloud_com", - "security_group_defensenet", - "tag_FQDN_idx3_trial612_splunkcloud_com", - "tag_Name_trial647_-_sh1", - "key_infra_take2", - "tag_FQDN_sh1_climate_splunkcloud_com", - "tag_FQDN_sh1_spm1_splunkcloud_com", - "tag_FQDN_idx3_trial633_splunkcloud_com", - "tag_FQDN_idx2_take2_splunkcloud_com", - "key_infra_idexx", - "tag_FQDN_idx2_mckesson_splunkcloud_com", - "key_infra_trial616", - "tag_Name_trial646_-_idx3", - "tag_Name_trial646_-_idx2", - "tag_Name_trial646_-_idx1", - "tag_FQDN_idx2_trial605_splunkcloud_com", - "security_group_k14", - "tag_Stack_mckesson", - "tag_FQDN_sh1_poc5_splunkcloud_com", - "security_group_gilt", - "tag_Role_jenkins-executor", - "tag_FQDN_idx4_gilt_splunkcloud_com", - "tag_FQDN_sh1_trial625_splunkcloud_com", - "tag_FQDN_idx1_trial640_splunkcloud_com", - "key_infra_stackmakr-ops-blue", - "key_infra_trial613", - "tag_FQDN_idx1_trial607_splunkcloud_com", - "tag_FQDN_idx1_mindtouch_splunkcloud_com", - "tag_Ticket_CO-330", - "tag_FQDN_idx1_trial620_splunkcloud_com", - "tag_Name_trial607_-_sh1", - "tag_FQDN_idx2_trial637_splunkcloud_com", - "tag_Name_trial622_-_idx1", - "tag_Stack_trial628", - "tag_Name_trial622_-_idx2", - "tag_Stack_trial626", - "tag_Stack_trial627", - "tag_Stack_trial622", - "tag_Stack_trial623", - "tag_Name_trial628_-_idx1", - "tag_Stack_trial621", - "tag_Name_intermedia_-_idx7", - "tag_Name_intermedia_-_idx6", - "tag_Name_intermedia_-_idx5", - "tag_Name_intermedia_-_idx4", - "tag_FQDN_idx1_trial623_splunkcloud_com", - "tag_Name_intermedia_-_idx2", - "tag_Name_intermedia_-_idx1", - "tag_FQDN_idx1_trial621_splunkcloud_com", - "tag_Name_intermedia_-_idx8", - "tag_Name_trial634_-_sh1", - "tag_FQDN_idx2_trial642_splunkcloud_com", - "tag_Name_trial618_-_sh1", - "tag_Ticket_CO-549", - "tag_FQDN_sh1_trial622_splunkcloud_com", - "tag_Name_mckesson_-_idx1", - "tag_FQDN_idx1_white-ops_splunkcloud_com", - "tag_Name_mckesson_-_idx3", - "type_hs1_8xlarge", - "tag_Name_trial612_-_sh1", - "tag_FQDN_idx1_trial638_splunkcloud_com", - "tag_Name_lyft_-_idx2", - "tag_Name_trial629_-_idx1", - "tag_Name_trial629_-_idx2", - "key_infra_motionsoft", - "security_group_trial636", - "tag_FQDN_sh1_trial643_splunkcloud_com", - "tag_FQDN_idx3_finra_splunkcloud_com", - "tag_FQDN_idx2_white-ops_splunkcloud_com", - "tag_FQDN_idx1_anaplan_splunkcloud_com", - "tag_FQDN_idx1_poc4_splunkcloud_com", - "tag_Stack_zabbix", - "tag_FQDN_idx3_trial605_splunkcloud_com", - "tag_Name_trial614_-_sh1", - "tag_Name_mckesson_-_idx2", - "tag_Name_trial644_-_idx1", - "tag_Name_trial644_-_idx3", - "tag_Name_trial644_-_idx2", - "tag_Name_trial612_-_idx2", - "tag_Name_poc4_-_sh1", - "tag_Name_security-test_-_sh1", - "tag_FQDN_idx6_gilt_splunkcloud_com", - "tag_BuildUser_Joped", - "tag_FQDN_sh1_trial624_splunkcloud_com", - "tag_Name_fidoplus_-_chef-sandbox-dev", - "tag_FQDN_lm1_prod-monitor-red_splunkcloud_com", - "tag_Name_prod-monitor-red_-_lm1", - "key_infra_trial610", - "security_group_chef_server", - "tag_Name_trial624_-_idx2", - "tag_FQDN_idx2_trial610_splunkcloud_com", - "security_group_security-test_lm", - "tag_FQDN_idx3_trial606_splunkcloud_com", - "tag_Name_trial608_-_idx1", - "tag_FQDN_sh1_prod-monitor-red_splunkcloud_com", - "tag_FQDN_c0m1_prod-monitor-red_splunkcloud_com", - "type_c1_medium", - "tag_Stack_trial610", - "tag_Ticket_CO-494", - "tag_FQDN_idx1_sonos_splunkcloud_com", - "tag_Name_idexx_-_idx2", - "tag_Name_trial608_-_idx3", - "tag_FQDN_idx2_security-test_splunkcloud_com", - "tag_License_whisper-project-test", - "tag_FQDN_idx1_trial624_splunkcloud_com", - "tag_Name_chef_-_whisper", - "security_group_security-test_idx", - "key_infra_trial643", - "security_group_fidoplus", - "tag_Name_1sot", - "tag_Name_security-test_-_lm1", - "security_group_fido", - "tag_FQDN_idx1_trial610_splunkcloud_com", - "security_group_stackmakr-corp", - "tag_Stack_fidoplus", - "security_group_zabbix-client", - "tag_Name_backupify_-_idx1", - "tag_FQDN_idx1_backupify_splunkcloud_com", - "security_group_trial622", - "security_group_trial623", - "security_group_trial620", - "tag_Stack_trial624", - "security_group_splunk-support", - "tag_Stack_stackmakr-corp", - "key_infra_trial608", - "type_m1_large", - "security_group_trial610", - "tag_customer_type_Trial", - "tag_Name_trial624_-_idx3", - "security_group_jenkins-master", - "security_group_ssh", - "security_group_trial624", - "tag_Name_trial610_-_idx2", - "tag_Name_trial610_-_idx3", - "tag_FQDN_c0m1_security-test_splunkcloud_com", - "tag_Ticket_CO-640", - "tag_Name_trial608_-_sh1", - "security_group_stackmakr-ops-blue", - "tag_Stack_fido", - "tag_Name_stackmakr-corp_-_jenkins01", - "tag_FQDN_idx2_trial608_splunkcloud_com", - "tag_Name_trial610_-_idx1", - "security_group_1sot", - "tag_Role_chef_server", - "tag_FQDN_idx2_trial624_splunkcloud_com", - "tag_FQDN_idx3_trial624_splunkcloud_com", - "tag_Stack_backupify", - "tag_Name_fido_-_zabbix", - "tag_FQDN_jenkins01_stackmakr-ops-blue_splunkcloud_com", - "tag_Name_security-test_-_idx1", - "tag_Name_security-test_-_idx2", - "security_group_security-test", - "tag_Stack_stackmakr-ops-blue", - "tag_FQDN_chef-sandbox-dev_fidoplus_splunkwhisper_com", - "tag_Name_stackmakr-corp_-_exec03", - "security_group_stackmakr-service", - "tag_Name_trial634_-_idx2", - "tag_Name_trial634_-_idx3", - "tag_Name_trial634_-_idx1", - "security_group_security-test_sh", - "tag_Name_trial624_-_sh1", - "tag_Name_trial624_-_idx1", - "tag_FQDN_idx2_anaplan_splunkcloud_com", - "tag_FQDN_lm1_finra_splunkcloud_com", - "tag_FQDN_chef-corp-dev_fidoplus_splunkwhisper_com", - "tag_FQDN_sh1_trial608_splunkcloud_com", - "tag_Stack_security-test", - "security_group_stackmakr-corp_lm", - "tag_Name_trial608_-_idx2", - "key_infra_anaplan", - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec02", - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec01", - "security_group_jenkins-executor", - "tag_FQDN_idx1_trial608_splunkcloud_com", - "tag_FQDN_exec03_stackmakr-corp_splunkwhisper_com", - "tag_Name_stackmakr-ops-blue_-_jenkins01", - "tag_Name_marriott_-_sh1", - "tag_FQDN_idx2_mindtouch_splunkcloud_com", - "tag_Name_defensenet_-_idx2", - "security_group_nessus", - "tag_Ticket_CO-638", - "security_group_trial608", - "security_group_stackmakr-corp_cm", - "tag_FQDN_idx3_trial610_splunkcloud_com", - "tag_FQDN_ops-blue-exec01_stackmakr-ops-blue_splunkcloud_com", - "tag_Stack_trial608", - "tag_FQDN_sh1_trial610_splunkcloud_com", - "tag_FQDN_jenkins01_stackmakr-corp_splunkwhisper_com", - "tag_Name_fidoplus_-_chef-corp-dev", - "tag_Ticket_CO-654", - "tag_FQDN_idx2_trial639_splunkcloud_com", - "tag_FQDN_idx3_anaplan_splunkcloud_com", - "tag_FQDN_ops-blue-exec02_stackmakr-ops-blue_splunkcloud_com", - "tag_Name_security-test_-_c0m1", - "key_infra_trial624", - "tag_Ticket_CO-35", - "security_group_security-test_cm", - "tag_Name_nessus", - "tag_FQDN_idx3_trial647_splunkcloud_com", - "tag_FQDN_sh1_finra_splunkcloud_com", - "tag_FQDN_idx1_security-test_splunkcloud_com", - "tag_FQDN_sh1_security-test_splunkcloud_com", - "tag_FQDN_lm1_security-test_splunkcloud_com", - "tag_FQDN_idx3_trial608_splunkcloud_com", - "tag_Name_trial610_-_sh1", - "tag_Name_trial640_-_idx1", - "tag_Name_trial620_-_idx3", - "tag_Name_trial620_-_idx2", - "tag_Name_trial620_-_idx1", - "tag_FQDN_idx3_marriott_splunkcloud_com", - "tag_FQDN_idx2_trial644_splunkcloud_com", - "tag_FQDN_idx2_trial623_splunkcloud_com", - "security_group_search-head", - "security_group_idexx", - "tag_Name_trial613_-_sh1", - "tag_FQDN_idx1_climate_splunkcloud_com", - "tag_FQDN_sh1_trial645_splunkcloud_com", - "tag_Name_idexx_-_sh1", - "tag_Name_trial633_-_sh1", - "tag_FQDN_idx2_trial617_splunkcloud_com", - "tag_Ticket_CO-398", - "security_group_trial617", - "security_group_trial616", - "tag_FQDN_idx3_trial609_splunkcloud_com", - "tag_FQDN_sh1_trial607_splunkcloud_com", - "tag_FQDN_idx3_trial635_splunkcloud_com", - "tag_Name_zabbix_-_zabbix1", - "tag_FQDN_idx1_trial644_splunkcloud_com", - "tag_Name_backupify_-_idx3", - "tag_Name_climate_-_idx1", - "tag_Name_climate_-_idx3", - "tag_Name_climate_-_idx2", - "tag_FQDN_sh1_trial631_splunkcloud_com", - "tag_Name_trial630_-_idx2", - "tag_FQDN_idx2_finra_splunkcloud_com", - "tag_Ticket_CO-303", - "tag_Name_trial630_-_idx1", - "tag_FQDN_sh1_trial611_splunkcloud_com", - "tag_Stack_finra", - "key_infra_funtomic-prod", - "tag_Stack_sonos", - "tag_Name_poc5_-_sh1", - "tag_Stack_poc5", - "tag_Name_trial618_-_idx1", - "tag_Name_trial618_-_idx2", - "tag_Name_trial618_-_idx3", - "tag_FQDN_idx1_trial626_splunkcloud_com", - "key_infra_trial621", - "tag_FQDN_sh1_white-ops_splunkcloud_com", - "tag_FQDN_idx2_trial626_splunkcloud_com", - "tag_FQDN_idx3_white-ops_splunkcloud_com", - "tag_Name_gilt_-_idx2", - "security_group_jenkins-blue", - "tag_FQDN_idx3_trial616_splunkcloud_com", - "tag_FQDN_idx1_lyft_splunkcloud_com", - "tag_Name_finra_-_c0m1", - "tag_FQDN_idx3_trial634_splunkcloud_com", - "tag_FQDN_idx6_sonos_splunkcloud_com", - "key_infra_finra", - "tag_FQDN_idx3_spm1_splunkcloud_com", - "tag_FQDN_sh1_trial615_splunkcloud_com", - "key_infra_defensenet", - "tag_Name_trial627_-_idx2", - "tag_Name_trial627_-_idx3", - "tag_FQDN_idx5_gilt_splunkcloud_com", - "key_infra_lyft", - "tag_FQDN_idx3_trial627_splunkcloud_com", - "tag_Name_trial613_-_idx2", - "tag_Name_trial627_-_idx1", - "security_group__intermedia", - "tag_FQDN_idx2_poc5_splunkcloud_com", - "tag_Ticket_CO-635", - "key_infra_marriott", - "tag_Name_trial642_-_idx3", - "tag_FQDN_idx7_intermedia_splunkcloud_com", - "tag_Name_trial642_-_idx1", - "tag_Ticket_CO-644", - "tag_Ticket_CO-645", - "tag_Ticket_CO-646", - "tag_Ticket_CO-647", - "tag_Ticket_CO-641", - "tag_FQDN_idx3_poc5_splunkcloud_com", - "tag_FQDN_idx1_take2_splunkcloud_com", - "tag_FQDN_idx3_poc3_splunkcloud_com", - "tag_Ticket_CO-648", - "tag_Ticket_CO-649", - "tag_FQDN_idx1_finra_splunkcloud_com", - "tag_FQDN_idx1_marriott_splunkcloud_com", - "tag_FQDN_idx4_sonos_splunkcloud_com", - "tag_FQDN_sh1_trial635_splunkcloud_com", - "tag_Role_jenkins-master", - "tag_FQDN_idx1_trial617_splunkcloud_com", - "tag_FQDN_idx3_poc4_splunkcloud_com", - "tag_FQDN_idx3_trial619_splunkcloud_com", - "tag_FQDN_idx1_spm1_splunkcloud_com", - "tag_FQDN_idx3_trial622_splunkcloud_com", - "tag_FQDN_sh1_poc2_splunkcloud_com", - "tag_Name_sc-vpc-nat__subnet_3_", - "tag_FQDN_c0m1_marriott_splunkcloud_com", - "tag_FQDN_idx1_trial606_splunkcloud_com", - "tag_Name_trial647_-_idx1", - "tag_Name_trial647_-_idx2", - "tag_Name_trial647_-_idx3", - "tag_Name_trial615_-_idx3", - "tag_Stack_trial645", - "tag_FQDN_sh1_trial623_splunkcloud_com", - "key_infra_mindtouch", - "tag_Stack_idexx", - "tag_Name_trial645_-_idx2", - "tag_Name_trial645_-_idx3", - "tag_Name_trial645_-_idx1", - "key_infra_sc_nat", - "security_group_finra_cm", - "tag_Stack_mindtouch", - "tag_Name_gilt_-_sh1", - "tag_FQDN_idx1_trial622_splunkcloud_com", - "tag_FQDN_idx3_trial620_splunkcloud_com", - "tag_Ticket_CO-666", - "tag_Name_k14_-_idx2", - "tag_Name_k14_-_idx3", - "tag_Name_trial621_-_idx2", - "tag_Name_k14_-_idx1", - "tag_Stack_spm1", - "tag_FQDN_idx2_trial635_splunkcloud_com", - "key_infra_poc4", - "key_infra_poc1", - "key_infra_poc3", - "key_infra_poc2", - "tag_FQDN_idx2_funtomic-prod_splunkcloud_com", - "tag_FQDN_c0m1_finra_splunkcloud_com", - "tag_Name_intermedia_-_sh1", - "tag_FQDN_sh1_funtomic-prod_splunkcloud_com", - "tag_FQDN_idx2_intermedia_splunkcloud_com", - "tag_FQDN_sh1_trial642_splunkcloud_com", - "tag_Name_trial622_-_sh1", - "tag_FQDN_idx9_intermedia_splunkcloud_com", - "tag_FQDN_idx1_idexx_splunkcloud_com", - "security_group_spm1", - "tag_FQDN_sh1_trial640_splunkcloud_com", - "type_m1_medium", - "tag_Name_backupify_-_sh1", - "type_c3_4xlarge", - "tag_Ticket_CO-637", - "tag_FQDN_idx1_trial609_splunkcloud_com", - "tag_Ticket_CO-636", - "security_group_indexer", - "tag_BuildUser_mloven", - "tag_FQDN_idx2_backupify_splunkcloud_com", - "tag_FQDN_idx5_sonos_splunkcloud_com", - "tag_Name_trial643_-_idx1", - "tag_Name_trial643_-_idx2", - "tag_Name_trial643_-_idx3", - "tag_FQDN_sh1_trial605_splunkcloud_com", - "tag_Name_trial642_-_idx2", - "tag_Name_trial632_-_sh1", - "tag_Name_trial609_-_idx3", - "tag_Ticket_CO-358", - "tag_Name_trial609_-_idx1", - "tag_Ticket_CO-296", - "tag_FQDN_idx1_poc1_splunkcloud_com", - "tag_FQDN_sh1_trial638_splunkcloud_com", - "tag_FQDN_idx2_trial611_splunkcloud_com", - "tag_Ticket_CO-351", - "tag_Stack_white-ops", - "tag_Name_trial641_-_sh1", - "tag_Name_trial635_-_idx1", - "tag_Name_trial635_-_idx3", - "tag_Name_trial635_-_idx2", - "tag_FQDN_idx2_trial619_splunkcloud_com", - "tag_FQDN_idx2_k14_splunkcloud_com", - "tag_FQDN_idx2_trial641_splunkcloud_com", - "security_group_funtomic-prod", - "tag_Name_trial628_-_idx2", - "tag_FQDN_idx1_trial639_splunkcloud_com", - "tag_Name_trial627_-_sh1", - "tag_Name_trial645_-_sh1", - "security_group_zabbix-server", - "tag_Name_trial633_-_idx3", - "tag_Name_trial633_-_idx2", - "tag_Name_trial633_-_idx1", - "tag_Name_finra_-_sh1", - "tag_Name_trial630_-_idx3", - "tag_FQDN_idx2_trial638_splunkcloud_com", - "tag_FQDN_idx1_trial625_splunkcloud_com", - "tag_Stack_trial637", - "tag_FQDN_sh1_motionsoft_splunkcloud_com", - "tag_Ticket_CO-642", - "tag_FQDN_idx3_trial625_splunkcloud_com", - "tag_Ticket_CO-643", - "tag_Name_anaplan_-_idx3", - "tag_Name_anaplan_-_idx2", - "tag_Name_anaplan_-_idx1", - "tag_FQDN_idx2_trial625_splunkcloud_com", - "tag_Name_trial637_-_idx3", - "tag_Name_trial637_-_idx2", - "tag_Name_trial637_-_idx1", - "tag_FQDN_idx3_mindtouch_splunkcloud_com", - "security_group_backupify", - "tag_Name_trial616_-_idx2", - "tag_Name_trial616_-_idx3", - "tag_Name_trial616_-_idx1", - "tag_Name_white-ops_-_idx1", - "tag_Name_white-ops_-_idx2", - "tag_Name_white-ops_-_idx3", - "tag_FQDN_idx1_mckesson_splunkcloud_com", - "tag_Name_trial636_-_idx1", - "tag_Name_trial636_-_idx2", - "tag_Name_trial636_-_idx3", - "tag_FQDN_sh1_trial619_splunkcloud_com", - "tag_FQDN_sh1_mckesson_splunkcloud_com", - "tag_FQDN_idx3_trial621_splunkcloud_com", - "tag_FQDN_sh1_trial641_splunkcloud_com", - "tag_Name_k14_-_sh1", - "tag_FQDN_sh1_trial627_splunkcloud_com", - "tag_BuildUser_Ravi_Anandwala", - "tag_Name_trial607_-_idx1", - "tag_Name_trial607_-_idx2", - "tag_Name_trial607_-_idx3", - "tag_Ticket_CO-818", - "tag_Stack_trial639", - "tag_Stack_trial638", - "tag_Stack_trial635", - "tag_Stack_trial634", - "tag_Stack_trial636", - "tag_Stack_trial631", - "tag_Stack_trial630", - "tag_Stack_trial633", - "tag_Stack_trial632", - "key_infra_zabbix", - "tag_FQDN_idx1_trial613_splunkcloud_com", - "tag_FQDN_sh1_poc1_splunkcloud_com", - "tag_Ticket_CO-820", - "tag_Ticket_CO-821", - "tag_FQDN_idx2_trial628_splunkcloud_com", - "key_infra_trial638", - "key_infra_trial639", - "tag_FQDN_idx2_trial632_splunkcloud_com", - "key_infra_trial630", - "key_infra_trial631", - "key_infra_trial632", - "key_infra_trial633", - "key_infra_trial634", - "key_infra_trial635", - "key_infra_trial636", - "key_infra_trial637", - "tag_FQDN_idx3_motionsoft_splunkcloud_com", - "tag_Stack_poc4", - "tag_Ticket_CO-495", - "tag_Name_gilt_-_idx1", - "tag_FQDN_idx2_sonos_splunkcloud_com", - "tag_FQDN_sh1_marriott_splunkcloud_com", - "tag_Stack_poc1", - "tag_Name_gilt_-_idx5", - "tag_FQDN_idx2_trial616_splunkcloud_com", - "tag_FQDN_idx1_trial627_splunkcloud_com", - "tag_Ticket_CO-853", - "tag_Name_anaplan_-_sh1", - "tag_FQDN_idx1_defensenet_splunkcloud_com", - "security_group_trial609", - "security_group_trial605", - "security_group_trial606", - "tag_Name_trial611_-_sh1", - "tag_FQDN_idx2_trial615_splunkcloud_com", - "tag_Name_take2_-_idx3", - "tag_Name_take2_-_idx2", - "tag_FQDN_sh1_trial606_splunkcloud_com", - "tag_Name_sonos_-_sh1", - "tag_FQDN_idx3_trial623_splunkcloud_com", - "tag_Ticket_CO-251", - "tag_Name_idexx_-_idx1", - "tag_FQDN_idx1_trial646_splunkcloud_com", - "key_infra_poc5", - "tag_Ticket_CO-822", - "tag_FQDN_idx2_defensenet_splunkcloud_com", - "key_infra_k14", - "tag_FQDN_idx2_trial646_splunkcloud_com", - "tag_Stack_climate", - "tag_Name_motionsoft_-_sh1", - "tag_Name_mckesson_-_sh1", - "tag_FQDN_idx1_trial647_splunkcloud_com", - "tag_FQDN_idx2_trial618_splunkcloud_com", - "security_group_climate", - "tag_Name_finra_-_idx4", - "tag_Name_mindtouch_-_sh1", - "tag_Name_finra_-_idx2", - "tag_Name_finra_-_idx3", - "tag_FQDN_idx3_trial628_splunkcloud_com", - "tag_FQDN_idx1_poc3_splunkcloud_com", - "tag_FQDN_idx1_poc5_splunkcloud_com", - "tag_FQDN_idx2_trial645_splunkcloud_com", - "tag_Name_poc1_-_idx2", - "tag_Name_poc1_-_idx3", - "tag_Name_backupify_-_idx2", - "tag_Name_poc1_-_idx1", - "tag_Name_trial614_-_idx2", - "tag_FQDN_idx2_climate_splunkcloud_com", - "key_infra_intermedia", - "tag_FQDN_sh1_k14_splunkcloud_com", - "security_group_poc4", - "security_group_poc5", - "tag_FQDN_idx5_finra_splunkcloud_com", - "security_group_poc1", - "security_group_poc2", - "security_group_poc3", - "tag_Name_trial626_-_idx1", - "tag_Name_trial626_-_idx3", - "tag_Name_trial626_-_idx2", - "tag_FQDN_idx3_sonos_splunkcloud_com", - "tag_FQDN_idx2_trial643_splunkcloud_com", - "tag_Stack_gilt", - "tag_Name_trial623_-_idx2", - "tag_Name_trial623_-_idx3", - "tag_Name_trial623_-_idx1", - "tag_Name_funtomic-prod_-_sh1", - "key_infra_whisper", - "tag_FQDN_idx1_trial631_splunkcloud_com", - "tag_FQDN_idx3_trial638_splunkcloud_com", - "tag_Name_poc1_-_sh1", - "tag_FQDN_idx2_trial630_splunkcloud_com", - "tag_FQDN_idx1_funtomic-prod_splunkcloud_com", - "tag_Name_prod-chef", - "tag_FQDN_idx2_trial627_splunkcloud_com", - "tag_Name_trial605_-_idx2", - "tag_Name_trial605_-_idx3", - "tag_Name_lyft_-_idx3", - "tag_Name_trial605_-_idx1", - "tag_Name_trial632_-_idx1", - "tag_Name_trial632_-_idx2", - "tag_Name_trial632_-_idx3", - "tag_Name_trial619_-_sh1", - "tag_FQDN_idx1_trial642_splunkcloud_com", - "tag_Name_trial643_-_sh1", - "tag_FQDN_idx2_lyft_splunkcloud_com", - "tag_Name_trial639_-_sh1", - "tag_Name_gilt_-_idx3", - "tag_Name_marriott_-_lm1", - "tag_FQDN_idx3_backupify_splunkcloud_com", - "key_tower", - "tag_Name_defensenet_-_idx3", - "tag_Name_defensenet_-_idx1", - "tag_FQDN_sh1_poc4_splunkcloud_com", - "tag_Name_gilt_-_idx6", - "tag_Stack_trial644", - "tag_Name_trial615_-_idx2", - "tag_Stack_trial646", - "tag_Stack_trial647", - "tag_Stack_trial640", - "tag_Stack_trial641", - "tag_Stack_trial642", - "tag_Stack_trial643", - "tag_FQDN_sh1_take2_splunkcloud_com", - "tag_Name_lyft_-_idx1", - "tag_Stack_poc3", - "tag_Name_trial638_-_idx2", - "tag_Name_trial638_-_idx3", - "tag_Name_trial638_-_idx1", - "tag_Name_sc-vpc-nat", - "tag_Name_trial630_-_sh1", - "tag_FQDN_idx1_trial605_splunkcloud_com", - "tag_FQDN_sh1_trial646_splunkcloud_com", - "tag_Stack_trial616", - "tag_FQDN_idx2_poc2_splunkcloud_com", - "tag_FQDN_sh1_trial639_splunkcloud_com", - "tag_Ticket_CO-814", - "tag_Ticket_CO-817", - "tag_Ticket_CO-816", - "tag_Ticket_CO-810", - "tag_Ticket_CO-813", - "tag_Ticket_CO-819", - "tag_Stack_trial612", - "tag_Stack_funtomic-prod", - "tag_FQDN_idx3_poc2_splunkcloud_com", - "tag_Name_trial640_-_sh1", - "tag_FQDN_idx1_trial615_splunkcloud_com", - "tag_Name_trial606_-_idx3", - "tag_Name_trial606_-_idx2", - "tag_Name_trial606_-_idx1", - "tag_FQDN_sh1_poc3_splunkcloud_com", - "tag_customer_type_Ops", - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec03__vpc_2_", - "tag_FQDN_idx1_trial645_splunkcloud_com", - "tag_FQDN_idx1_intermedia_splunkcloud_com", - "tag_FQDN_sh1_trial628_splunkcloud_com", - "tag_Name_trial637_-_sh1", - "security_group_trail615", - "tag_Ticket_CO-854", - "tag_Ticket_CO-760", - "tag_Name_climate_-_sh1", - "tag_FQDN_idx3_trial618_splunkcloud_com", - "tag_Name_sc-vpc-nat__subnet_2_", - "tag_FQDN_idx3_take2_splunkcloud_com", - "key_infra_mckesson", - "tag_Name_lyft_-_sh1", - "tag_Name_trial615_-_idx1", - "tag_Name_funtomic-prod_-_idx3", - "tag_Name_funtomic-prod_-_idx2", - "tag_Name_funtomic-prod_-_idx1", - "tag_Name_trial638_-_sh1", - "tag_FQDN_idx1_motionsoft_splunkcloud_com", - "tag_FQDN_idx1_gilt_splunkcloud_com", - "tag_FQDN_idx2_poc1_splunkcloud_com", - "tag_FQDN_idx2_trial633_splunkcloud_com", - "tag_FQDN_idx1_trial637_splunkcloud_com", - "tag_FQDN_idx3_idexx_splunkcloud_com", - "tag_Name_trial615_-_sh1", - "tag_FQDN_idx3_trial613_splunkcloud_com", - "tag_Stack_marriott", - "tag_Stack_k14", - "tag_Ticket_CO-739", - "tag_Name_motionsoft_-_idx3", - "tag_FQDN_idx1_trial618_splunkcloud_com", - "tag_FQDN_idx3_trial629_splunkcloud_com", - "tag_FQDN_idx1_k14_splunkcloud_com", - "tag_FQDN_sh1_trial616_splunkcloud_com", - "tag_Name_tower", - "tag_FQDN_idx2_trial607_splunkcloud_com", - "tag_Name_trial622_-_idx3", - "tag_Stack_trial606", - "tag_Stack_trial607", - "tag_Stack_trial609", - "tag_Name_take2_-_idx1", - "tag_Name_trial621_-_idx1", - "tag_FQDN_idx3_trial631_splunkcloud_com", - "tag_FQDN_lm1_poc5_splunkcloud_com", - "tag_Stack_take2", - "tag_FQDN_zabbix1_zabbix_splunkcloud_com", - "tag_Name_trial621_-_idx3", - "tag_Name_finra_-_idx5", - "tag_FQDN_idx3_trial641_splunkcloud_com", - "tag_Stack_trial625", - "tag_FQDN_idx1_trial643_splunkcloud_com", - "tag_Name_trial628_-_idx3", - "tag_FQDN_idx3_trial637_splunkcloud_com", - "tag_whisper_version_SEC-1318-20130212T1441-WR_16_HF2", - "security_group_lyft", - "tag_Stack_trial620", - "tag_Name_trial629_-_idx3", - "tag_Name_poc2_-_idx3", - "tag_Name_poc2_-_idx2", - "type_c3_8xlarge", - "tag_Ticket_CO-865", - "tag_Name_trial625_-_idx1", - "tag_Name_trial625_-_idx2", - "tag_FQDN_idx3_trial640_splunkcloud_com", - "tag_FQDN_sh1_trial609_splunkcloud_com", - "tag_FQDN_idx3_trial644_splunkcloud_com", - "tag_FQDN_sh1_anaplan_splunkcloud_com", - "tag_Stack_lyft", - "tag_FQDN_idx1_trial632_splunkcloud_com", - "tag_Name_trial611_-_idx3", - "tag_Ticket_CO-815", - "tag_Name_intermedia_-_idx3", - "tag_FQDN_sh1_intermedia_splunkcloud_com", - "tag_FQDN_idx1_trial635_splunkcloud_com", - "tag_FQDN_idx3_defensenet_splunkcloud_com", - "security_group_cluster-master", - "tag_FQDN_sh1_trial629_splunkcloud_com", - "key_infra_trial629", - "tag_FQDN_idx2_trial621_splunkcloud_com", - "key_infra_trial627", - "key_infra_trial625", - "key_infra_trial623", - "key_infra_trial622", - "tag_FQDN_sh1_gilt_splunkcloud_com", - "key_infra_trial620", - "tag_FQDN_idx2_trial622_splunkcloud_com", - "tag_FQDN_idx2_trial609_splunkcloud_com", - "tag_Name_mindtouch_-_idx3", - "tag_FQDN_idx2_gilt_splunkcloud_com", - "tag_FQDN_idx1_trial616_splunkcloud_com", - "tag_FQDN_idx1_trial629_splunkcloud_com", - "tag_FQDN_sh1_trial633_splunkcloud_com", - "tag_FQDN_idx1_trial614_splunkcloud_com", - "security_group_license-master", - "tag_whisper_version____SEC-1639-20140414T1539-WR_17_HF3", - "tag_Name_intermedia_-_idx9", - "tag_Name_finra_-_idx1", - "tag_Name_trial625_-_sh1", - "tag_FQDN_idx3_trial611_splunkcloud_com", - "tag_FQDN_idx2_marriott_splunkcloud_com", - "tag_Role_zabbix-server", - "tag_Name_marriott_-_idx1", - "tag_FQDN_idx3_intermedia_splunkcloud_com", - "tag_Name_marriott_-_idx3", - "tag_Name_marriott_-_idx2", - "tag_Name_poc5_-_lm1", - "tag_Name_trial620_-_sh1", - "security_group_finra_sh", - "tag_FQDN_sh1_lyft_splunkcloud_com", - "tag_Name_trial617_-_idx1", - "tag_FQDN_idx2_trial640_splunkcloud_com", - "tag_Name_trial617_-_idx3", - "tag_Name_trial617_-_idx2", - "tag_Name_trial629_-_sh1", - "tag_FQDN_sh1_trial637_splunkcloud_com", - "tag_FQDN_sh1_mindtouch_splunkcloud_com", - "tag_Name_trial644_-_sh1", - "tag_Ticket_CO-652", - "tag_Stack_anaplan", - "type_m1_small", - "tag_Name_trial640_-_idx2", - "tag_Ticket_CO-436", - "tag_Name_take2_-_sh1", - "tag_FQDN_idx5_intermedia_splunkcloud_com", - "tag_Name_trial626_-_sh1", - "tag_Ticket_CO-182", - "security_group_splunk_wideopen", - "tag_FQDN_idx3_climate_splunkcloud_com", - "tag_Ticket_CO-682", - "tag_Name_motionsoft_-_idx2", - "security_group_mckesson", - "tag_Name_motionsoft_-_idx1", - "tag_Name_trial619_-_idx2", - "tag_Ticket_CO-758", - "tag_Ticket_CO-759", - "tag_Ticket_CO-756", - "tag_Ticket_CO-757", - "tag_Ticket_CO-754", - "tag_Ticket_CO-755", - "tag_Ticket_CO-752", - "tag_Ticket_CO-753", - "tag_Ticket_CO-750", - "tag_Ticket_CO-751", - "security_group_anaplan_", - "tag_Name_mindtouch_-_idx2", - "tag_Name_mindtouch_-_idx1", - "tag_FQDN_sh1_trial630_splunkcloud_com", - "tag_BuildUser_Chris_Boniak", - "tag_FQDN_idx2_spm1_splunkcloud_com", - "tag_Ticket_CO-639", - "tag_Name_poc5_-_c0m1", - "tag_FQDN_sh1_trial621_splunkcloud_com", - "tag_Name_trial605_-_sh1", - "tag_Name_trial621_-_sh1", - "tag_FQDN_idx3_trial617_splunkcloud_com" - ], - "hosts": [ - "54.86.87.25", - "54.86.99.25", - "54.84.251.0", - "54.86.98.158", - "54.209.76.22", - "54.84.180.204", - "54.86.40.17", - "54.84.191.190", - "54.84.23.79", - "54.86.102.132", - "54.84.222.25", - "54.84.207.241", - "54.85.157.183", - "54.86.112.106", - "54.86.65.171", - "54.86.90.177", - "54.86.110.115", - "54.84.114.2", - "54.85.71.54", - "54.86.78.51", - "54.86.39.175", - "54.85.249.26", - "54.86.56.174", - "54.86.98.67", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "54.86.10.255", - "54.86.101.162", - "54.86.87.183", - "54.85.146.9", - "54.86.81.213", - "54.84.74.125", - "54.85.193.109", - "54.85.48.70", - "54.208.141.20", - "54.84.156.145", - "54.85.223.164", - "54.84.164.99", - "54.84.125.108", - "54.86.106.244", - "54.86.82.149", - "54.84.103.231", - "54.85.173.90", - "54.86.96.151", - "54.84.65.195", - "54.86.80.199", - "54.209.162.114", - "54.85.75.4", - "54.84.190.144", - "54.86.111.203", - "54.86.94.75", - "54.86.94.149", - "54.86.23.145", - "54.86.74.37", - "54.85.27.197", - "54.85.28.140", - "54.86.112.135", - "54.85.181.37", - "54.85.33.186", - "54.85.91.87", - "54.84.222.7", - "54.85.21.183", - "54.86.98.77", - "54.85.47.154", - "54.86.125.136", - "54.86.14.157", - "54.86.99.249", - "54.208.59.237", - "54.86.81.225", - "54.86.117.162", - "54.86.103.5", - "54.209.127.172", - "54.86.117.161", - "54.209.74.106", - "54.86.108.101", - "54.84.75.99", - "54.85.193.223", - "54.84.116.38", - "54.85.248.82", - "54.85.161.87", - "54.86.116.105", - "54.85.160.181", - "54.86.77.91", - "54.86.64.168", - "54.85.54.254", - "54.85.199.140", - "54.86.90.152", - "54.84.81.3", - "54.209.177.56", - "54.84.99.227", - "54.85.126.177", - "54.84.37.150", - "54.85.42.39", - "54.85.48.128", - "54.84.155.209", - "54.84.103.10", - "54.86.75.36", - "54.85.77.167", - "54.84.164.51", - "54.86.112.102", - "54.209.120.55", - "54.84.0.249", - "54.85.90.7", - "54.86.109.129", - "54.86.141.187", - "54.84.167.146", - "54.85.69.157", - "54.86.109.121", - "54.86.111.175", - "54.86.117.163", - "54.85.166.231", - "54.84.47.238", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "54.85.72.146", - "54.86.93.172", - "54.208.12.112", - "54.208.210.176", - "54.84.15.178", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "54.86.76.239", - "54.86.108.117", - "54.85.102.208", - "54.209.108.176", - "54.86.98.21", - "54.86.97.227", - "54.85.76.42", - "54.208.124.14", - "54.86.108.119", - "54.209.183.210", - "54.85.167.62", - "54.86.54.174", - "54.84.174.209", - "54.85.119.67", - "54.85.10.98", - "54.85.80.156", - "54.85.14.238", - "54.209.108.61", - "54.85.53.103", - "54.208.45.55", - "54.85.32.12", - "54.208.89.118", - "54.84.199.223", - "54.84.166.253", - "54.85.53.185", - "54.85.34.98", - "54.86.57.201", - "54.86.117.237", - "54.85.68.39", - "54.208.96.71", - "54.85.149.164", - "54.86.53.153", - "54.86.84.127", - "54.84.152.213", - "54.86.90.15", - "54.85.208.32", - "54.85.255.219", - "54.86.84.64", - "54.84.148.213", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "54.84.80.225", - "54.84.240.188", - "54.86.108.102", - "54.86.107.51", - "54.85.148.231", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "54.209.139.239", - "54.86.53.77", - "54.85.71.17", - "54.86.141.183", - "54.86.97.99", - "54.86.141.184", - "54.86.92.153", - "54.209.14.115", - "54.86.100.62", - "54.84.189.79", - "54.86.3.216", - "54.86.119.45", - "54.86.71.155", - "54.86.90.142", - "54.85.80.174", - "54.208.228.127", - "54.84.41.152", - "54.84.252.121", - "54.84.87.73", - "54.85.175.102", - "54.85.37.235", - "54.84.92.185", - "54.85.127.222", - "54.86.97.181", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "54.86.103.185", - "54.84.54.49", - "54.85.44.185", - "54.208.10.193", - "54.86.116.199", - "54.86.106.241", - "54.86.106.243", - "54.86.106.242", - "ec2-23-20-41-80.compute-1.amazonaws.com", - "54.86.89.186", - "54.85.148.101", - "54.86.105.40", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "54.85.47.190", - "54.84.142.102", - "54.84.97.29", - "54.86.50.215", - "54.86.90.204", - "54.86.88.52", - "54.84.190.109", - "54.86.78.119", - "54.84.241.208", - "ec2-54-242-229-223.compute-1.amazonaws.com", - "54.86.79.232", - "54.86.104.169", - "54.86.67.89", - "54.84.137.179", - "54.85.42.61", - "54.86.81.21", - "54.86.104.18", - "54.84.199.152", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "54.85.66.59", - "54.84.122.210", - "54.86.80.36", - "54.85.135.14", - "54.85.98.144", - "54.209.106.125", - "54.86.76.41", - "54.84.31.76", - "54.86.80.182", - "54.86.88.208", - "54.84.217.136", - "54.86.94.238", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "54.86.38.49", - "54.84.242.116", - "54.85.13.176", - "54.85.11.117", - "54.86.48.214", - "54.85.200.49", - "54.85.65.51", - "54.86.81.117", - "54.85.52.64", - "54.86.111.80", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "54.85.69.123", - "54.84.206.192", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "54.86.8.229", - "54.85.75.200", - "54.84.84.233", - "54.86.75.79", - "54.209.203.222", - "54.85.85.59", - "54.86.97.174", - "54.86.80.208", - "54.84.193.141", - "54.84.169.33", - "54.84.42.12", - "54.86.97.73", - "54.84.156.195", - "54.86.91.120", - "54.85.170.154", - "54.85.45.216", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "54.84.228.141", - "54.84.149.162", - "54.85.207.233", - "54.86.85.22", - "54.85.61.212", - "54.86.61.31", - "54.86.101.141", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "54.86.80.163", - "54.208.187.98", - "54.84.84.30", - "54.84.46.105", - "54.86.52.195", - "54.84.189.117", - "54.86.94.44", - "54.86.128.114", - "54.84.21.94", - "54.86.90.71", - "54.209.204.12", - "54.86.111.172", - "54.86.55.72", - "54.84.192.78", - "54.86.110.180", - "54.84.149.25", - "54.85.95.0", - "54.86.45.250", - "54.84.189.190", - "54.86.60.192", - "54.85.87.129", - "54.84.245.162", - "54.86.97.144", - "54.84.170.133", - "54.86.97.67", - "54.86.99.19", - "54.86.51.77", - "54.208.87.90", - "54.85.84.167", - "54.84.185.247", - "54.84.245.20", - "54.85.196.193", - "54.86.89.139", - "54.86.60.175", - "54.85.251.175", - "54.86.85.33", - "54.84.18.13", - "54.86.112.246", - "54.85.52.37", - "54.86.112.96", - "54.85.16.252", - "54.86.117.236", - "54.84.163.82", - "10.219.92.64", - "10.219.53.81", - "10.219.102.143", - "10.219.79.196", - "10.219.36.226", - "10.219.53.83", - "10.219.27.228", - "10.219.55.210", - "10.219.142.223", - "10.219.81.15", - "10.219.174.165", - "10.219.62.184", - "10.219.62.182", - "10.219.105.247", - "10.219.165.247", - "10.219.63.67", - "10.219.166.184", - "10.219.53.235", - "10.219.70.210", - "10.219.1.1", - "10.219.114.130", - "10.219.89.30", - "10.219.84.189", - "10.219.177.177", - "10.219.131.132", - "10.219.103.26", - "10.219.131.134", - "10.219.165.236", - "10.219.9.24", - "10.219.173.45", - "10.219.185.101", - "10.219.100.237", - "10.219.169.135", - "10.219.112.253", - "10.219.13.250", - "10.219.132.135", - "10.219.183.41", - "10.219.161.181", - "10.219.175.162", - "10.219.144.224", - "10.219.135.107", - "10.219.18.251", - "10.219.25.26", - "10.219.68.240", - "10.219.60.118", - "10.219.49.54", - "10.219.78.180", - "10.219.62.128", - "10.219.77.162", - "10.219.185.140", - "10.219.10.200", - "10.219.12.148", - "10.219.59.159", - "10.219.12.146", - "10.219.41.127", - "10.219.158.35", - "10.219.43.48", - "10.219.5.238", - "10.219.154.94", - "10.219.130.229", - "10.219.161.92", - "10.219.43.249", - "10.219.107.166", - "10.219.163.151", - "10.219.121.158", - "10.219.1.219", - "10.219.164.210", - "10.219.57.225", - "10.219.28.211", - "10.219.1.9", - "10.219.64.58", - "10.219.81.29", - "10.219.152.17", - "10.219.138.185", - "10.219.78.69", - "10.219.137.49", - "10.219.18.12", - "10.219.136.66", - "10.219.48.23", - "10.219.41.230", - "10.219.41.239", - "10.219.98.192", - "10.219.56.91", - "10.219.143.130", - "10.219.180.178", - "10.219.12.138", - "10.219.115.77", - "10.219.40.153", - "10.219.177.41", - "10.219.168.41", - "10.219.75.209", - "10.219.140.250", - "10.219.36.162", - "10.219.92.102", - "10.219.167.0", - "10.219.169.68", - "10.219.110.47", - "10.219.91.14", - "10.219.88.75", - "10.219.71.223", - "10.219.175.97", - "10.219.14.143", - "10.219.54.28", - "10.219.122.228", - "10.219.49.11", - "10.219.131.26", - "10.219.113.16", - "10.219.146.30", - "10.219.41.51", - "10.219.154.211", - "10.219.19.226", - "10.219.153.9", - "10.219.57.108", - "10.219.11.33", - "10.219.169.253", - "10.219.142.152", - "10.219.3.22", - "10.219.189.153", - "10.219.24.179", - "10.219.25.150", - "10.219.152.253", - "10.219.187.219", - "10.219.36.235", - "10.219.117.252", - "10.219.51.0", - "10.219.62.192", - "10.219.39.9", - "10.219.191.53", - "10.219.101.155", - "10.219.93.172", - "10.219.183.156", - "10.219.26.152", - "10.219.169.240", - "10.219.64.217", - "10.219.38.61", - "10.219.160.142", - "10.219.183.205", - "10.219.134.206", - "10.219.155.123", - "10.219.86.47", - "10.219.37.213", - "10.219.107.232", - "10.219.82.113", - "10.219.142.242", - "10.219.17.208", - "10.219.40.115", - "10.219.30.68", - "10.219.145.78", - "10.219.64.87", - "10.219.64.89", - "10.219.137.205", - "10.219.126.78", - "10.219.47.1", - "10.219.118.63", - "10.219.45.70", - "10.219.92.107", - "10.219.85.31", - "10.219.85.37", - "10.219.9.203", - "10.219.181.82", - "10.219.125.7", - "10.219.101.208", - "10.219.28.78", - "10.219.75.150", - "10.219.26.28", - "10.219.72.12", - "10.219.123.229", - "10.219.20.163", - "10.219.114.210", - "10.219.26.182", - "10.219.10.83", - "10.219.43.2", - "10.219.119.27", - "10.219.173.21", - "10.219.103.178", - "10.219.11.70", - "10.219.117.146", - "10.219.137.105", - "10.219.156.153", - "10.219.8.78", - "10.219.68.254", - "10.219.81.130", - "10.219.67.120", - "10.219.83.87", - "10.219.4.55", - "10.219.96.145", - "10.219.72.93", - "10.219.61.3", - "10.219.147.74", - "10.219.118.126", - "10.219.25.43", - "10.219.69.7", - "10.219.31.47", - "10.219.163.166", - "10.219.136.200", - "10.219.56.242", - "10.219.0.222", - "10.219.150.186", - "10.219.129.226", - "10.219.91.109", - "10.219.65.35", - "10.219.63.147", - "10.219.155.112", - "10.219.128.183", - "10.219.49.157", - "10.219.97.207", - "10.219.90.205", - "10.219.5.111", - "10.219.109.144", - "10.219.180.244", - "10.219.177.150", - "10.219.22.111", - "10.219.50.231", - "10.219.90.31", - "10.219.190.234", - "10.219.184.95", - "10.219.87.56", - "10.219.56.44", - "10.219.39.139", - "10.219.151.162", - "10.219.154.115", - "10.219.36.26", - "10.219.85.43", - "10.219.152.142", - "10.219.94.27", - "10.219.155.180", - "10.219.107.101", - "10.219.42.72", - "10.219.16.100", - "10.219.186.145", - "10.219.167.28", - "10.219.16.66", - "10.219.179.164", - "10.219.188.5", - "10.219.41.191", - "10.219.136.115", - "10.219.41.67", - "10.219.130.190", - "10.219.154.203", - "10.219.119.78", - "10.219.164.166", - "10.219.177.243", - "10.219.168.89", - "10.219.177.248", - "10.219.119.218", - "10.219.15.194", - "10.219.137.67", - "10.219.154.12", - "10.219.145.106", - "10.219.157.181", - "10.219.128.227", - "10.219.159.21", - "10.219.35.86", - "10.219.3.208", - "10.219.26.121", - "10.219.16.214", - "10.219.100.34", - "10.219.64.207", - "10.219.103.216", - "10.219.50.248", - "10.219.133.48", - "10.219.43.57", - "10.219.97.127", - "10.219.97.123", - "10.219.18.88", - "10.219.18.78", - "10.219.143.239", - "10.219.120.23", - "10.219.165.216", - "10.219.140.138", - "10.219.118.52", - "10.219.11.190", - "10.219.4.113", - "10.219.74.178", - "10.219.9.213", - "10.219.2.93", - "10.219.79.157", - "10.219.14.89", - "10.219.31.244", - "10.219.5.147", - "10.219.136.17", - "10.219.59.221", - "10.219.136.13", - "10.219.4.181", - "10.219.86.78", - "10.219.63.105", - "10.219.153.220", - "10.219.114.207", - "10.219.146.42", - "10.219.2.72", - "10.219.173.37", - "10.219.16.89", - "10.219.173.38", - "10.219.49.237", - "10.219.48.166", - "10.219.112.202", - "10.219.27.75", - "10.219.175.103", - "10.219.179.119", - "10.219.142.23", - "10.219.68.180", - "10.219.109.92", - "10.219.77.13", - "10.219.154.235", - "10.219.85.120", - "10.219.147.63", - "10.219.11.12", - "10.219.130.240", - "10.219.47.118", - "10.219.47.252", - "10.219.166.38", - "10.219.18.43", - "10.219.97.164", - "10.219.121.80", - "10.219.130.129", - "10.219.124.145", - "10.219.68.99", - "10.219.72.134", - "10.219.93.219", - "10.219.123.163", - "10.219.111.113", - "10.219.165.155", - "10.219.78.42", - "10.219.155.57", - "10.219.63.95", - "10.219.6.136", - "10.219.133.98", - "10.219.184.234", - "10.219.81.201", - "10.219.142.198", - "10.219.98.174", - "10.219.98.173", - "10.219.61.154", - "10.219.89.22", - "10.219.185.71", - "10.219.185.186", - "10.219.60.213", - "10.219.127.143", - "10.219.128.18", - "10.219.95.221", - "10.219.156.2", - "10.219.171.92", - "10.219.91.234", - "10.219.108.141", - "10.219.33.86", - "10.219.71.164", - "10.219.182.240", - "10.219.48.124", - "10.219.90.109", - "10.219.29.108", - "10.219.186.171", - "10.219.84.105", - "10.219.115.245", - "10.219.43.120", - "10.219.39.194", - "10.219.63.214", - "10.219.132.7", - "10.219.147.27", - "10.219.132.1", - "10.219.147.25", - "10.219.67.44", - "10.219.158.176", - "10.219.52.205", - "10.219.59.57", - "10.219.130.1", - "10.219.168.254", - "10.219.109.28", - "10.219.20.248", - "10.219.142.79", - "10.219.187.178", - "10.219.127.168", - "10.219.127.169", - "10.219.16.141", - "10.219.2.224", - "10.219.30.9", - "10.219.129.154", - "10.219.137.198", - "10.219.118.148", - "10.219.179.156", - "10.219.189.219", - "10.219.138.5", - "10.219.149.40", - "10.219.119.127", - "10.219.6.165", - "10.219.68.40", - "10.219.68.47", - "10.217.79.144", - "10.219.138.98", - "10.219.9.54", - "10.219.143.228", - "10.219.150.33", - "10.219.89.90", - "10.219.132.76", - "10.219.75.107", - "10.219.49.160", - "10.219.94.77", - "10.219.134.176", - "10.219.12.85", - "10.219.115.61", - "10.219.134.179", - "10.219.92.4", - "10.219.37.47", - "10.219.56.83", - "10.219.147.195", - "10.219.5.136", - "10.219.36.177", - "10.219.103.150", - "10.219.100.175", - "10.219.66.5", - "10.219.182.219", - "10.219.78.250", - "10.219.184.152", - "10.219.66.9", - "10.219.92.169", - "10.219.125.232", - "10.219.67.205", - "10.219.32.233", - "10.219.32.235", - "10.219.111.126", - "10.219.36.102", - "10.219.39.144", - "10.219.32.78", - "10.219.56.12", - "10.219.162.164", - "10.219.4.79", - "10.219.178.84", - "10.219.178.85", - "10.219.150.111", - "10.219.51.115", - "10.219.47.66", - "10.219.32.15", - "10.219.23.181", - "10.219.154.60", - "10.219.173.93", - "10.219.154.184", - "10.219.60.102", - "10.219.73.211", - "10.219.85.245", - "10.219.52.143", - "10.219.17.109", - "10.219.141.55", - "10.219.127.193", - "10.219.24.227", - "10.219.152.52", - "10.219.161.118", - "10.219.134.89", - "10.219.87.108", - "10.219.114.174", - "10.219.10.116", - "10.219.62.215", - "10.219.4.252", - "10.219.29.254", - "10.219.45.160", - "10.219.147.76", - "10.219.80.212", - "10.219.161.188", - "10.219.25.147", - "10.219.164.5", - "10.219.148.67", - "10.219.188.151", - "10.219.91.91", - "10.219.111.100", - "10.219.2.175", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.120.83", - "10.219.111.13", - "10.219.58.233", - "10.219.114.9", - "10.219.174.231", - "10.219.167.181", - "10.219.166.102" - ], - "vars": { - "vpc_destination_variable": "private_ip_address" - } - }, - "_meta": { - "hostvars": {} # pruned to reduce the size of the dataset - }, - "ec2": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.41.152", - "54.84.65.195", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.37.150", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.86.101.162", - "54.208.124.14", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "54.208.96.71", - "54.84.92.185", - "54.84.42.12", - "54.84.148.213", - "54.84.149.25", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.217.79.144", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.123.163", - "10.219.92.102", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.118.126", - "10.219.97.164", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.164.166", - "10.219.134.206", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.160.142", - "10.219.179.119", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.136.115", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.164.210", - "10.219.161.181", - "10.219.144.224", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.129.226", - "10.219.142.198", - "10.219.152.142", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.23.181", - "10.219.14.89", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.43.120", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.50.248", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.26.121", - "10.219.59.57", - "10.219.41.51", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.91.91", - "10.219.147.76", - "10.219.164.5", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "key_infra_CO-920": { - "children": [], - "hosts": [ - "10.219.62.215", - "10.219.45.160", - "10.219.10.116", - "10.219.164.5", - "10.219.147.76", - "10.219.87.108" - ], - "vars": {} - }, - "key_infra_anaplan": { - "children": [], - "hosts": [ - "10.219.1.219", - "10.219.49.160", - "10.219.184.95", - "10.219.92.107", - "10.219.117.146", - "10.219.70.210", - "54.86.107.51", - "54.86.125.136", - "54.86.94.44", - "54.86.128.114" - ], - "vars": {} - }, - "key_infra_backupify": { - "children": [], - "hosts": [ - "10.219.5.111", - "10.219.63.105", - "10.219.137.105", - "10.219.168.41", - "10.219.131.132", - "10.219.91.234", - "54.85.54.254", - "54.85.181.37", - "54.85.76.42", - "54.85.68.39" - ], - "vars": {} - }, - "key_infra_climate": { - "children": [], - "hosts": [ - "10.219.1.9", - "10.219.4.181", - "10.219.147.195", - "10.219.132.7", - "10.219.171.92", - "10.219.68.99", - "54.84.99.227", - "54.84.164.51", - "54.84.155.209", - "54.84.142.102" - ], - "vars": {} - }, - "key_infra_defensenet": { - "children": [], - "hosts": [ - "10.219.18.251", - "10.219.183.156", - "10.219.174.165", - "10.219.154.184", - "10.219.84.105", - "10.219.107.166", - "54.84.217.136", - "54.84.116.38", - "54.84.97.29", - "54.85.42.39" - ], - "vars": {} - }, - "key_infra_finra": { - "children": [], - "hosts": [ - "10.219.4.79", - "10.219.36.226", - "10.219.52.143", - "10.219.62.184", - "10.219.173.93", - "10.219.145.78", - "10.219.98.174", - "10.219.127.143", - "10.219.68.240", - "54.84.152.213", - "54.84.103.231", - "54.84.156.145", - "54.84.180.204", - "54.84.122.210", - "54.84.189.190", - "54.84.80.225", - "54.84.189.117" - ], - "vars": {} - }, - "key_infra_funtomic-prod": { - "children": [], - "hosts": [ - "10.219.28.78", - "10.219.190.234", - "10.219.186.145", - "10.219.168.89", - "10.219.127.193", - "10.219.113.16", - "54.85.13.176", - "54.84.137.179", - "54.84.242.116", - "54.84.222.25" - ], - "vars": {} - }, - "key_infra_gilt": { - "children": [], - "hosts": [ - "10.219.8.78", - "10.219.59.221", - "10.219.38.61", - "10.219.62.128", - "10.219.167.28", - "10.219.165.216", - "10.219.156.153", - "10.219.67.44", - "10.219.82.113", - "54.209.162.114", - "54.209.183.210", - "54.85.80.156", - "54.84.31.76", - "54.85.52.37", - "54.85.47.190", - "54.209.177.56" - ], - "vars": {} - }, - "key_infra_idexx": { - "children": [], - "hosts": [ - "10.219.60.213", - "10.219.153.220", - "10.219.154.94", - "10.219.130.229", - "10.219.72.134", - "10.219.94.77", - "54.84.46.105", - "54.85.91.87", - "54.84.190.109", - "54.85.148.101" - ], - "vars": {} - }, - "key_infra_intermedia": { - "children": [], - "hosts": [ - "10.219.17.109", - "10.219.51.115", - "10.219.55.210", - "10.219.41.127", - "10.219.4.113", - "10.219.189.219", - "10.219.152.17", - "10.219.169.240", - "10.219.112.253", - "10.219.64.207", - "10.219.97.164", - "10.219.118.126", - "54.86.85.22", - "54.84.193.141", - "54.84.18.13", - "54.85.193.109", - "54.86.84.64", - "54.85.167.62", - "54.85.126.177", - "54.86.75.79", - "54.86.14.157", - "54.84.0.249" - ], - "vars": {} - }, - "key_infra_k14": { - "children": [], - "hosts": [ - "10.219.35.86", - "10.219.9.213", - "10.219.141.55", - "10.219.134.179", - "10.219.155.57", - "10.219.83.87", - "54.84.156.195", - "54.86.54.174", - "54.85.37.235", - "54.85.175.102" - ], - "vars": {} - }, - "key_infra_lyft": { - "children": [], - "hosts": [ - "10.219.29.108", - "10.219.3.208", - "10.219.56.12", - "10.219.184.152", - "10.219.93.172", - "10.219.103.216", - "54.85.42.61", - "54.208.87.90", - "54.85.102.208", - "54.209.139.239" - ], - "vars": {} - }, - "key_infra_marriott": { - "children": [], - "hosts": [ - "10.219.11.12", - "10.219.136.66", - "10.219.136.17", - "10.219.179.164", - "10.219.98.192", - "10.219.105.247", - "54.84.125.108", - "54.84.199.223", - "54.84.164.99", - "54.84.222.7", - "54.84.206.192", - "54.84.185.247" - ], - "vars": {} - }, - "key_infra_mckesson": { - "children": [], - "hosts": [ - "10.219.43.48", - "10.219.132.76", - "10.219.147.27", - "10.219.95.221", - "10.219.64.89", - "10.219.85.120", - "54.86.141.183", - "54.86.141.184", - "54.86.141.187", - "54.86.103.185" - ], - "vars": {} - }, - "key_infra_mindtouch": { - "children": [], - "hosts": [ - "10.219.51.0", - "10.219.152.142", - "10.219.165.236", - "10.219.136.115", - "10.219.72.12", - "10.219.69.7", - "10.219.101.208", - "54.86.119.45", - "54.86.109.129", - "54.86.109.121", - "54.86.112.246" - ], - "vars": {} - }, - "key_infra_motionsoft": { - "children": [], - "hosts": [ - "10.219.40.115", - "10.219.49.237", - "10.219.188.5", - "10.219.112.202", - "10.219.103.26", - "10.219.81.130", - "54.85.10.98", - "54.85.16.252", - "54.84.228.141", - "54.85.65.51" - ], - "vars": {} - }, - "key_infra_mregan": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "key_infra_poc1": { - "children": [], - "hosts": [ - "10.219.16.141", - "10.219.25.43", - "10.219.189.153", - "10.219.182.240", - "10.219.181.82", - "10.219.81.15", - "54.85.33.186", - "54.85.66.59", - "54.85.52.64", - "54.85.21.183" - ], - "vars": {} - }, - "key_infra_poc2": { - "children": [], - "hosts": [ - "10.219.32.233", - "10.219.131.134", - "10.219.146.30", - "10.219.118.63", - "10.219.85.37", - "10.219.100.34", - "54.85.53.103", - "54.85.32.12", - "54.85.28.140", - "54.84.252.121" - ], - "vars": {} - }, - "key_infra_poc3": { - "children": [], - "hosts": [ - "10.219.48.166", - "10.219.49.54", - "10.219.166.184", - "10.219.85.245", - "10.219.107.232", - "10.219.126.78", - "54.84.84.30", - "54.85.71.17", - "54.84.166.253", - "54.85.71.54" - ], - "vars": {} - }, - "key_infra_poc4": { - "children": [], - "hosts": [ - "10.219.43.57", - "10.219.12.85", - "10.219.137.198", - "10.219.150.111", - "10.219.177.243", - "10.219.72.93", - "54.85.69.157", - "54.85.69.123", - "54.85.45.216", - "54.84.170.133" - ], - "vars": {} - }, - "key_infra_poc5": { - "children": [], - "hosts": [ - "10.219.47.1", - "10.219.63.147", - "10.219.130.240", - "10.219.169.253", - "10.219.130.190", - "10.219.125.232", - "54.84.23.79", - "54.85.80.174", - "54.86.39.175", - "54.85.72.146", - "54.84.47.238", - "54.84.74.125" - ], - "vars": {} - }, - "key_infra_prod-monitor-red": { - "children": [], - "hosts": [ - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.120.23", - "10.219.118.52", - "10.219.177.150", - "10.219.144.224", - "10.219.142.198", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.16.214", - "10.219.80.212", - "10.219.91.91", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "key_infra_sc_nat": { - "children": [], - "hosts": [ - "10.219.23.181", - "10.219.164.166", - "10.219.123.163", - "54.208.124.14", - "54.84.37.150", - "54.84.41.152" - ], - "vars": {} - }, - "key_infra_skynet": { - "children": [], - "hosts": [ - "10.219.2.93", - "10.219.0.222", - "10.219.12.148", - "10.219.1.1", - "10.219.173.21", - "10.219.132.135", - "10.219.186.171", - "10.219.103.178", - "10.219.115.77", - "10.219.90.109", - "10.219.92.169", - "54.86.23.145", - "54.85.146.9", - "54.84.75.99", - "54.84.189.79", - "54.86.51.77", - "54.85.157.183" - ], - "vars": {} - }, - "key_infra_sonos": { - "children": [], - "hosts": [ - "10.219.56.91", - "10.219.56.44", - "10.219.36.235", - "10.219.39.194", - "10.219.154.60", - "10.219.175.103", - "10.219.150.186", - "10.219.84.189", - "10.219.71.223", - "54.86.48.214", - "54.86.80.199", - "54.86.10.255", - "54.86.56.174", - "54.86.89.139", - "54.86.81.117", - "54.86.88.208" - ], - "vars": {} - }, - "key_infra_splunk-sfdc": { - "children": [], - "hosts": [ - "10.219.29.254", - "10.219.25.147", - "10.219.161.118", - "10.219.152.52", - "10.219.188.151", - "10.219.114.174" - ], - "vars": {} - }, - "key_infra_spm1": { - "children": [], - "hosts": [ - "10.219.31.47", - "10.219.128.227", - "10.219.173.45", - "10.219.107.101", - "10.219.91.14", - "10.219.65.35", - "54.84.207.241", - "54.85.34.98", - "54.84.245.20", - "54.84.191.190" - ], - "vars": {} - }, - "key_infra_stackmakr-ops-blue": { - "children": [], - "hosts": [ - "10.219.14.89", - "54.208.96.71" - ], - "vars": {} - }, - "key_infra_take2": { - "children": [], - "hosts": [ - "10.219.61.154", - "10.219.47.252", - "10.219.53.81", - "10.219.134.206", - "10.219.86.78", - "10.219.92.102", - "54.84.92.185", - "54.84.84.233", - "54.84.87.73", - "54.84.65.195" - ], - "vars": {} - }, - "key_infra_trial605": { - "children": [], - "hosts": [ - "10.219.39.9", - "10.219.26.28", - "10.219.60.102", - "10.219.178.85", - "10.219.108.141", - "10.219.81.29", - "54.86.57.201", - "54.85.14.238", - "54.85.75.200", - "54.86.40.17" - ], - "vars": {} - }, - "key_infra_trial606": { - "children": [], - "hosts": [ - "10.219.11.70", - "10.219.5.147", - "10.219.16.66", - "10.219.158.176", - "10.219.142.79", - "10.219.100.175", - "54.85.87.129", - "54.84.163.82", - "54.208.228.127", - "54.84.251.0" - ], - "vars": {} - }, - "key_infra_trial607": { - "children": [], - "hosts": [ - "10.219.62.192", - "10.219.41.67", - "10.219.18.78", - "10.219.185.71", - "10.219.147.74", - "10.219.98.173", - "54.86.90.15", - "54.86.90.142", - "54.86.90.152", - "54.86.90.177" - ], - "vars": {} - }, - "key_infra_trial608": { - "children": [], - "hosts": [ - "54.85.161.87", - "54.85.90.7", - "54.208.59.237", - "54.85.199.140" - ], - "vars": {} - }, - "key_infra_trial609": { - "children": [], - "hosts": [ - "10.219.17.208", - "10.219.185.186", - "10.219.154.115", - "10.219.155.180", - "10.219.103.150", - "10.219.67.120", - "54.208.141.20", - "54.209.120.55", - "54.208.210.176", - "54.209.108.61" - ], - "vars": {} - }, - "key_infra_trial610": { - "children": [], - "hosts": [ - "54.84.169.33", - "54.209.106.125", - "54.84.240.188", - "54.84.192.78" - ], - "vars": {} - }, - "key_infra_trial611": { - "children": [], - "hosts": [ - "10.219.56.242", - "10.219.30.68", - "10.219.57.108", - "10.219.133.48", - "10.219.89.90", - "10.219.111.113", - "54.84.21.94", - "54.85.48.128", - "54.85.208.32", - "54.85.27.197" - ], - "vars": {} - }, - "key_infra_trial612": { - "children": [], - "hosts": [ - "10.219.36.102", - "10.219.11.190", - "10.219.140.138", - "10.219.178.84", - "10.219.155.123", - "10.219.90.205", - "54.85.53.185", - "54.86.75.36", - "54.84.114.2", - "54.86.76.41" - ], - "vars": {} - }, - "key_infra_trial613": { - "children": [], - "hosts": [ - "10.219.16.89", - "10.219.149.40", - "10.219.142.242", - "10.219.114.207", - "10.219.79.196", - "10.219.85.43", - "54.86.102.132", - "54.86.110.180", - "54.86.110.115", - "54.86.52.195" - ], - "vars": {} - }, - "key_infra_trial614": { - "children": [], - "hosts": [ - "10.219.18.12", - "10.219.19.226", - "10.219.180.178", - "10.219.81.201", - "10.219.94.27", - "10.219.117.252", - "54.86.103.5", - "54.86.105.40", - "54.86.104.18", - "54.86.94.75" - ], - "vars": {} - }, - "key_infra_trial615": { - "children": [], - "hosts": [ - "10.219.15.194", - "10.219.12.146", - "10.219.138.98", - "10.219.145.106", - "10.219.137.205", - "10.219.86.47", - "54.85.200.49", - "54.208.45.55", - "54.85.95.0", - "54.85.119.67" - ], - "vars": {} - }, - "key_infra_trial616": { - "children": [], - "hosts": [ - "10.219.2.224", - "10.219.48.124", - "10.219.154.12", - "10.219.92.64", - "10.219.85.31", - "10.219.89.30", - "54.209.204.12", - "54.85.223.164", - "54.209.14.115", - "54.209.203.222" - ], - "vars": {} - }, - "key_infra_trial617": { - "children": [], - "hosts": [ - "10.219.14.143", - "10.219.4.55", - "10.219.130.1", - "10.219.169.68", - "10.219.180.244", - "10.219.122.228", - "54.84.54.49", - "54.85.166.231", - "54.84.245.162", - "54.85.249.26" - ], - "vars": {} - }, - "key_infra_trial618": { - "children": [], - "hosts": [ - "10.219.60.118", - "10.219.41.191", - "10.219.41.230", - "10.219.147.63", - "10.219.173.37", - "10.219.64.87", - "54.86.53.153", - "54.86.74.37", - "54.86.81.21", - "54.86.89.186" - ], - "vars": {} - }, - "key_infra_trial619": { - "children": [], - "hosts": [ - "10.219.56.83", - "10.219.36.162", - "10.219.45.70", - "10.219.177.41", - "10.219.154.211", - "10.219.96.145", - "54.86.117.161", - "54.86.117.163", - "54.86.117.162", - "54.86.111.80" - ], - "vars": {} - }, - "key_infra_trial620": { - "children": [], - "hosts": [ - "10.219.48.23", - "10.219.54.28", - "10.219.143.130", - "10.219.109.92", - "10.219.121.80", - "10.219.109.28", - "54.85.135.14", - "54.208.12.112", - "54.84.103.10", - "54.209.76.22" - ], - "vars": {} - }, - "key_infra_trial621": { - "children": [], - "hosts": [ - "10.219.47.118", - "10.219.143.228", - "10.219.187.178", - "10.219.154.203", - "10.219.88.75", - "10.219.97.207", - "54.209.74.106", - "54.85.85.59", - "54.85.48.70", - "54.208.187.98" - ], - "vars": {} - }, - "key_infra_trial622": { - "children": [], - "hosts": [ - "10.219.43.2", - "10.219.39.144", - "10.219.63.67", - "10.219.184.234", - "10.219.163.166", - "10.219.68.47", - "54.209.127.172", - "54.85.84.167", - "54.85.47.154", - "54.209.108.176" - ], - "vars": {} - }, - "key_infra_trial623": { - "children": [], - "hosts": [ - "10.219.39.139", - "10.219.37.47", - "10.219.25.26", - "10.219.136.13", - "10.219.146.42", - "10.219.78.42", - "54.85.61.212", - "54.84.190.144", - "54.85.255.219", - "54.85.173.90" - ], - "vars": {} - }, - "key_infra_trial624": { - "children": [], - "hosts": [ - "54.84.174.209", - "54.85.44.185", - "54.208.89.118", - "54.85.160.181" - ], - "vars": {} - }, - "key_infra_trial625": { - "children": [], - "hosts": [ - "10.219.36.26", - "10.219.37.213", - "10.219.142.152", - "10.219.169.135", - "10.219.138.185", - "10.219.111.126", - "54.86.117.236", - "54.86.117.237", - "54.86.116.105", - "54.86.116.199" - ], - "vars": {} - }, - "key_infra_trial626": { - "children": [], - "hosts": [ - "10.219.59.159", - "10.219.24.179", - "10.219.9.203", - "10.219.173.38", - "10.219.77.13", - "10.219.66.9", - "54.86.71.155", - "54.86.82.149", - "54.86.77.91", - "54.86.87.25" - ], - "vars": {} - }, - "key_infra_trial627": { - "children": [], - "hosts": [ - "10.219.53.83", - "10.219.25.150", - "10.219.128.18", - "10.219.119.127", - "10.219.118.148", - "10.219.109.144", - "54.86.97.227", - "54.85.75.4", - "54.86.97.181", - "54.86.97.144" - ], - "vars": {} - }, - "key_infra_trial628": { - "children": [], - "hosts": [ - "10.219.27.75", - "10.219.129.154", - "10.219.155.112", - "10.219.123.229", - "10.219.73.211", - "10.219.114.130", - "54.86.90.204", - "54.86.78.51", - "54.86.92.153", - "54.86.91.120" - ], - "vars": {} - }, - "key_infra_trial629": { - "children": [], - "hosts": [ - "10.219.2.72", - "10.219.32.78", - "10.219.63.214", - "10.219.161.92", - "10.219.152.253", - "10.219.75.209", - "54.86.97.67", - "54.86.97.73", - "54.85.196.193", - "54.86.60.192" - ], - "vars": {} - }, - "key_infra_trial630": { - "children": [], - "hosts": [ - "10.219.10.200", - "10.219.185.101", - "10.219.163.151", - "10.219.150.33", - "10.219.114.210", - "10.219.75.150", - "54.85.193.223", - "54.84.199.152", - "54.86.55.72", - "54.86.76.239" - ], - "vars": {} - }, - "key_infra_trial631": { - "children": [], - "hosts": [ - "10.219.53.235", - "10.219.20.248", - "10.219.27.228", - "10.219.142.223", - "10.219.68.180", - "10.219.78.250", - "54.86.97.174", - "54.85.149.164", - "54.85.207.233", - "54.86.8.229" - ], - "vars": {} - }, - "key_infra_trial632": { - "children": [], - "hosts": [ - "10.219.47.66", - "10.219.52.205", - "10.219.137.67", - "10.219.185.140", - "10.219.137.49", - "10.219.110.47", - "54.86.94.149", - "54.86.88.52", - "54.84.81.3", - "54.86.93.172" - ], - "vars": {} - }, - "key_infra_trial633": { - "children": [], - "hosts": [ - "10.219.13.250", - "10.219.40.153", - "10.219.5.136", - "10.219.191.53", - "10.219.119.27", - "10.219.68.40", - "54.86.98.67", - "54.86.96.151", - "54.86.99.19", - "54.86.97.99" - ], - "vars": {} - }, - "key_infra_trial634": { - "children": [], - "hosts": [ - "10.219.20.163", - "10.219.11.33", - "10.219.136.200", - "10.219.183.41", - "10.219.187.219", - "10.219.97.127", - "54.86.100.62", - "54.85.11.117", - "54.86.98.158", - "54.86.99.25" - ], - "vars": {} - }, - "key_infra_trial635": { - "children": [], - "hosts": [ - "10.219.5.238", - "10.219.183.205", - "10.219.134.176", - "10.219.166.38", - "10.219.127.169", - "10.219.91.109", - "54.86.112.96", - "54.86.111.172", - "54.86.111.175", - "54.86.111.203" - ], - "vars": {} - }, - "key_infra_trial636": { - "children": [], - "hosts": [ - "10.219.49.11", - "10.219.138.5", - "10.219.153.9", - "10.219.165.155", - "10.219.79.157", - "10.219.121.158", - "54.86.50.215", - "54.85.248.82", - "54.85.170.154", - "54.85.148.231" - ], - "vars": {} - }, - "key_infra_trial637": { - "children": [], - "hosts": [ - "10.219.32.235", - "10.219.36.177", - "10.219.159.21", - "10.219.162.164", - "10.219.167.0", - "10.219.115.61", - "54.86.112.106", - "54.86.112.102", - "54.86.3.216", - "54.86.112.135" - ], - "vars": {} - }, - "key_infra_trial638": { - "children": [], - "hosts": [ - "10.219.26.152", - "10.219.6.136", - "10.219.63.95", - "10.219.130.129", - "10.219.92.4", - "10.219.68.254", - "54.86.80.163", - "54.86.78.119", - "54.86.80.36", - "54.86.80.208" - ], - "vars": {} - }, - "key_infra_trial639": { - "children": [], - "hosts": [ - "10.219.3.22", - "10.219.12.138", - "10.219.18.43", - "10.219.133.98", - "10.219.179.156", - "10.219.119.78", - "54.86.87.183", - "54.86.67.89", - "54.86.104.169", - "54.86.84.127" - ], - "vars": {} - }, - "key_infra_trial640": { - "children": [], - "hosts": [ - "10.219.22.111", - "10.219.28.211", - "10.219.142.23", - "10.219.165.247", - "10.219.177.177", - "10.219.78.180", - "54.86.99.249", - "54.86.90.71", - "54.86.101.141", - "54.86.94.238" - ], - "vars": {} - }, - "key_infra_trial641": { - "children": [], - "hosts": [ - "10.219.10.83", - "10.219.128.183", - "10.219.158.35", - "10.219.74.178", - "10.219.71.164", - "10.219.66.5", - "54.84.167.146", - "54.84.241.208", - "54.86.61.31", - "54.86.64.168" - ], - "vars": {} - }, - "key_infra_trial642": { - "children": [], - "hosts": [ - "10.219.42.72", - "10.219.49.157", - "10.219.9.24", - "10.219.131.26", - "10.219.75.107", - "10.219.77.162", - "54.86.81.225", - "54.86.65.171", - "54.86.60.175", - "54.86.81.213" - ], - "vars": {} - }, - "key_infra_trial643": { - "children": [], - "hosts": [ - "10.219.30.9", - "10.219.24.227", - "10.219.175.97", - "10.219.151.162", - "10.219.132.1", - "10.219.97.123", - "54.86.79.232", - "54.85.127.222", - "54.86.45.250", - "54.86.53.77" - ], - "vars": {} - }, - "key_infra_trial644": { - "children": [], - "hosts": [ - "10.219.41.239", - "10.219.32.15", - "10.219.175.162", - "10.219.64.58", - "10.219.124.145", - "10.219.125.7", - "54.86.106.242", - "54.86.106.241", - "54.86.106.244", - "54.86.106.243" - ], - "vars": {} - }, - "key_infra_trial645": { - "children": [], - "hosts": [ - "10.219.31.244", - "10.219.143.239", - "10.219.140.250", - "10.219.147.25", - "10.219.93.219", - "10.219.101.155", - "54.86.98.77", - "54.86.98.21", - "54.86.38.49", - "54.85.98.144" - ], - "vars": {} - }, - "key_infra_trial646": { - "children": [], - "hosts": [ - "10.219.50.231", - "10.219.18.88", - "10.219.62.182", - "10.219.135.107", - "10.219.168.254", - "10.219.89.22", - "54.86.85.33", - "54.85.77.167", - "54.85.251.175", - "54.86.80.182" - ], - "vars": {} - }, - "key_infra_trial647": { - "children": [], - "hosts": [ - "10.219.9.54", - "10.219.61.3", - "10.219.156.2", - "10.219.102.143", - "10.219.87.56", - "10.219.67.205", - "54.86.108.101", - "54.86.108.102", - "54.86.108.119", - "54.86.108.117" - ], - "vars": {} - }, - "key_infra_whisper": { - "children": [], - "hosts": [ - "10.219.50.248", - "10.219.57.225", - "10.219.33.86", - "10.219.26.182", - "10.219.161.181", - "10.219.164.210", - "10.217.79.144", - "54.84.149.25", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "key_infra_white-ops": { - "children": [], - "hosts": [ - "10.219.6.165", - "10.219.16.100", - "10.219.43.249", - "10.219.157.181", - "10.219.127.168", - "10.219.90.31", - "54.84.148.213", - "54.84.149.162", - "54.84.15.178", - "54.208.10.193" - ], - "vars": {} - }, - "key_infra_zabbix": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "key_tower": { - "children": [], - "hosts": [ - "10.219.129.226", - "54.86.101.162" - ], - "vars": {} - }, - "security_group_1sot": { - "children": [], - "hosts": [ - "ec2-50-19-44-148.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_NAT": { - "children": [], - "hosts": [ - "10.219.23.181", - "10.219.164.166", - "10.219.123.163", - "54.208.124.14", - "54.84.37.150", - "54.84.41.152" - ], - "vars": {} - }, - "security_group__intermedia": { - "children": [], - "hosts": [ - "10.219.17.109", - "10.219.51.115", - "10.219.55.210", - "10.219.41.127", - "10.219.4.113", - "10.219.189.219", - "10.219.152.17", - "10.219.169.240", - "10.219.112.253", - "10.219.64.207", - "10.219.97.164", - "10.219.118.126", - "54.86.85.22", - "54.84.193.141", - "54.84.18.13", - "54.85.193.109", - "54.86.84.64", - "54.85.167.62", - "54.85.126.177", - "54.86.75.79", - "54.86.14.157", - "54.84.0.249" - ], - "vars": {} - }, - "security_group_anaplan_": { - "children": [], - "hosts": [ - "10.219.1.219", - "10.219.49.160", - "10.219.184.95", - "10.219.92.107", - "10.219.117.146", - "10.219.70.210", - "54.86.107.51", - "54.86.125.136", - "54.86.94.44", - "54.86.128.114" - ], - "vars": {} - }, - "security_group_backupify": { - "children": [], - "hosts": [ - "10.219.5.111", - "10.219.63.105", - "10.219.137.105", - "10.219.168.41", - "10.219.131.132", - "10.219.91.234", - "54.85.54.254", - "54.85.181.37", - "54.85.76.42", - "54.85.68.39" - ], - "vars": {} - }, - "security_group_chef": { - "children": [], - "hosts": [ - "10.219.50.248", - "54.84.149.25" - ], - "vars": {} - }, - "security_group_chef_server": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_climate": { - "children": [], - "hosts": [ - "10.219.147.195", - "54.84.164.51" - ], - "vars": {} - }, - "security_group_cluster-master": { - "children": [], - "hosts": [ - "10.219.52.143", - "10.219.16.100", - "10.219.130.240", - "10.219.137.198", - "10.219.181.82", - "10.219.168.89", - "10.219.179.164", - "10.219.171.92", - "10.219.107.232", - "10.219.118.63", - "54.84.156.145", - "54.86.39.175", - "54.84.222.7" - ], - "vars": {} - }, - "security_group_default": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.41.152", - "54.84.65.195", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.37.150", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.86.101.162", - "54.208.124.14", - "54.208.96.71", - "54.84.92.185", - "54.84.42.12", - "54.84.148.213", - "54.84.149.25", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.217.79.144", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.123.163", - "10.219.92.102", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.118.126", - "10.219.97.164", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.164.166", - "10.219.134.206", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.160.142", - "10.219.179.119", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.136.115", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.164.210", - "10.219.161.181", - "10.219.144.224", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.129.226", - "10.219.142.198", - "10.219.152.142", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.23.181", - "10.219.14.89", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.43.120", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.50.248", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.26.121", - "10.219.59.57", - "10.219.41.51", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.91.91", - "10.219.147.76", - "10.219.164.5", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "security_group_defensenet": { - "children": [], - "hosts": [ - "10.219.18.251", - "10.219.107.166", - "54.84.217.136", - "54.85.42.39" - ], - "vars": {} - }, - "security_group_fido": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_fidoplus": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_finra_cm": { - "children": [], - "hosts": [ - "10.219.52.143", - "54.84.156.145" - ], - "vars": {} - }, - "security_group_finra_lm": { - "children": [], - "hosts": [ - "10.219.173.93", - "54.84.122.210" - ], - "vars": {} - }, - "security_group_finra_sh": { - "children": [], - "hosts": [ - "10.219.4.79", - "10.219.68.240", - "54.84.152.213" - ], - "vars": {} - }, - "security_group_funtomic-prod": { - "children": [], - "hosts": [ - "10.219.28.78", - "10.219.190.234", - "10.219.186.145", - "10.219.168.89", - "10.219.113.16", - "54.85.13.176", - "54.84.137.179", - "54.84.222.25" - ], - "vars": {} - }, - "security_group_gilt": { - "children": [], - "hosts": [ - "10.219.8.78", - "10.219.59.221", - "10.219.38.61", - "10.219.62.128", - "10.219.167.28", - "10.219.165.216", - "10.219.156.153", - "10.219.67.44", - "10.219.82.113", - "54.209.162.114", - "54.209.183.210", - "54.85.80.156", - "54.84.31.76", - "54.85.52.37", - "54.85.47.190", - "54.209.177.56" - ], - "vars": {} - }, - "security_group_idexx": { - "children": [], - "hosts": [ - "10.219.60.213", - "10.219.153.220", - "10.219.154.94", - "10.219.130.229", - "10.219.72.134", - "10.219.94.77", - "54.84.46.105", - "54.85.91.87", - "54.84.190.109", - "54.85.148.101" - ], - "vars": {} - }, - "security_group_indexer": { - "children": [], - "hosts": [ - "54.208.10.193", - "54.84.142.102", - "54.84.185.247", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.21.183", - "54.85.71.54", - "54.84.170.133", - "54.84.74.125", - "54.84.149.162", - "54.84.155.209", - "54.84.164.99", - "54.84.189.190", - "54.84.137.179", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.84.47.238", - "54.84.148.213", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.103.231", - "54.85.13.176", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "10.219.90.31", - "10.219.68.99", - "10.219.105.247", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.81.15", - "10.219.126.78", - "10.219.72.93", - "10.219.125.232", - "10.219.157.181", - "10.219.132.7", - "10.219.136.17", - "10.219.145.78", - "10.219.186.145", - "10.219.189.153", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.130.190", - "10.219.6.165", - "10.219.4.181", - "10.219.11.12", - "10.219.62.184", - "10.219.36.226", - "10.219.28.78", - "10.219.25.43", - "10.219.32.233", - "10.219.49.54", - "10.219.63.147", - "10.219.43.57" - ], - "vars": {} - }, - "security_group_jenkins-blue": { - "children": [], - "hosts": [ - "10.219.14.89", - "54.208.96.71" - ], - "vars": {} - }, - "security_group_jenkins-executor": { - "children": [], - "hosts": [ - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_jenkins-master": { - "children": [], - "hosts": [ - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_k14": { - "children": [], - "hosts": [ - "10.219.35.86", - "10.219.9.213", - "10.219.141.55", - "10.219.134.179", - "10.219.155.57", - "10.219.83.87", - "54.84.156.195", - "54.86.54.174", - "54.85.37.235", - "54.85.175.102" - ], - "vars": {} - }, - "security_group_license-master": { - "children": [], - "hosts": [ - "10.219.47.1", - "10.219.12.85", - "10.219.48.166", - "10.219.16.141", - "10.219.1.9", - "10.219.43.249", - "10.219.146.30", - "10.219.190.234", - "10.219.173.93", - "10.219.98.192", - "54.84.23.79", - "54.84.122.210", - "54.84.206.192" - ], - "vars": {} - }, - "security_group_lyft": { - "children": [], - "hosts": [ - "10.219.29.108", - "10.219.3.208", - "10.219.56.12", - "10.219.184.152", - "10.219.93.172", - "10.219.103.216", - "54.85.42.61", - "54.208.87.90", - "54.85.102.208", - "54.209.139.239" - ], - "vars": {} - }, - "security_group_mckesson": { - "children": [], - "hosts": [ - "10.219.43.48", - "10.219.132.76", - "10.219.147.27", - "10.219.95.221", - "10.219.64.89", - "10.219.85.120", - "54.86.141.183", - "54.86.141.184", - "54.86.141.187", - "54.86.103.185" - ], - "vars": {} - }, - "security_group_mckesson_sh": { - "children": [], - "hosts": [ - "10.219.95.221" - ], - "vars": {} - }, - "security_group_mindtouch": { - "children": [], - "hosts": [ - "10.219.51.0", - "10.219.152.142", - "10.219.165.236", - "10.219.136.115", - "10.219.72.12", - "10.219.69.7", - "10.219.101.208", - "54.86.119.45", - "54.86.109.129", - "54.86.109.121", - "54.86.112.246" - ], - "vars": {} - }, - "security_group_motionsoft": { - "children": [], - "hosts": [ - "10.219.40.115", - "10.219.49.237", - "10.219.188.5", - "10.219.112.202", - "10.219.103.26", - "10.219.81.130", - "54.85.10.98", - "54.85.16.252", - "54.84.228.141", - "54.85.65.51" - ], - "vars": {} - }, - "security_group_nessus": { - "children": [], - "hosts": [ - "ec2-54-237-120-196.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_poc1": { - "children": [], - "hosts": [ - "10.219.16.141", - "10.219.25.43", - "10.219.189.153", - "10.219.182.240", - "10.219.181.82", - "10.219.81.15", - "54.85.33.186", - "54.85.66.59", - "54.85.52.64", - "54.85.21.183" - ], - "vars": {} - }, - "security_group_poc2": { - "children": [], - "hosts": [ - "10.219.32.233", - "10.219.131.134", - "10.219.146.30", - "10.219.118.63", - "10.219.85.37", - "10.219.100.34", - "54.85.53.103", - "54.85.32.12", - "54.85.28.140", - "54.84.252.121" - ], - "vars": {} - }, - "security_group_poc3": { - "children": [], - "hosts": [ - "10.219.48.166", - "10.219.49.54", - "10.219.166.184", - "10.219.85.245", - "10.219.107.232", - "10.219.126.78", - "54.84.84.30", - "54.85.71.17", - "54.84.166.253", - "54.85.71.54" - ], - "vars": {} - }, - "security_group_poc4": { - "children": [], - "hosts": [ - "10.219.43.57", - "10.219.12.85", - "10.219.137.198", - "10.219.150.111", - "10.219.177.243", - "10.219.72.93", - "54.85.69.123", - "54.85.45.216", - "54.84.170.133" - ], - "vars": {} - }, - "security_group_poc5": { - "children": [], - "hosts": [ - "10.219.47.1", - "10.219.63.147", - "10.219.130.240", - "10.219.169.253", - "10.219.130.190", - "10.219.125.232", - "54.84.23.79", - "54.85.80.174", - "54.86.39.175", - "54.85.72.146", - "54.84.47.238", - "54.84.74.125" - ], - "vars": {} - }, - "security_group_search-head": { - "children": [], - "hosts": [ - "54.84.15.178", - "54.85.28.140", - "54.84.166.253", - "54.84.242.116", - "54.84.199.223", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.69.123", - "54.85.72.146", - "54.84.42.12", - "10.219.127.168", - "10.219.85.37", - "10.219.84.105", - "10.219.85.245", - "10.219.127.193", - "10.219.136.66", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.182.240", - "10.219.150.111", - "10.219.169.253", - "10.219.43.120", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225" - ], - "vars": {} - }, - "security_group_security-test": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_security-test_cm": { - "children": [], - "hosts": [ - "ec2-54-204-188-107.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_security-test_idx": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_security-test_lm": { - "children": [], - "hosts": [ - "ec2-54-205-127-141.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_security-test_sh": { - "children": [], - "hosts": [ - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_skynet": { - "children": [], - "hosts": [ - "10.219.0.222", - "10.219.12.148", - "10.219.1.1", - "10.219.173.21", - "10.219.186.171", - "10.219.103.178", - "10.219.115.77", - "10.219.90.109", - "10.219.92.169", - "54.85.146.9", - "54.84.75.99", - "54.84.189.79", - "54.86.51.77", - "54.85.157.183" - ], - "vars": {} - }, - "security_group_sonos": { - "children": [], - "hosts": [ - "10.219.56.91", - "10.219.56.44", - "10.219.36.235", - "10.219.39.194", - "10.219.154.60", - "10.219.175.103", - "10.219.150.186", - "10.219.84.189", - "10.219.71.223", - "54.86.48.214", - "54.86.80.199", - "54.86.10.255", - "54.86.56.174", - "54.86.89.139", - "54.86.81.117", - "54.86.88.208" - ], - "vars": {} - }, - "security_group_splunk-sfdc": { - "children": [], - "hosts": [ - "10.219.29.254", - "10.219.25.147", - "10.219.161.118", - "10.219.152.52", - "10.219.188.151", - "10.219.114.174" - ], - "vars": {} - }, - "security_group_splunk-support": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_splunk_wideopen": { - "children": [], - "hosts": [ - "10.219.14.89", - "54.208.96.71", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_spm1": { - "children": [], - "hosts": [ - "10.219.31.47", - "10.219.128.227", - "10.219.173.45", - "10.219.107.101", - "10.219.91.14", - "10.219.65.35", - "54.84.207.241", - "54.85.34.98", - "54.84.245.20", - "54.84.191.190" - ], - "vars": {} - }, - "security_group_ssh": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_stackmakr": { - "children": [], - "hosts": [ - "10.219.26.182" - ], - "vars": {} - }, - "security_group_stackmakr-corp": { - "children": [], - "hosts": [ - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_stackmakr-corp_cm": { - "children": [], - "hosts": [ - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_stackmakr-corp_lm": { - "children": [], - "hosts": [ - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_stackmakr-ops-blue": { - "children": [], - "hosts": [ - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_stackmakr-service": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_take2": { - "children": [], - "hosts": [ - "10.219.61.154", - "10.219.47.252", - "10.219.53.81", - "10.219.134.206", - "10.219.86.78", - "10.219.92.102", - "54.84.92.185", - "54.84.84.233", - "54.84.87.73", - "54.84.65.195" - ], - "vars": {} - }, - "security_group_tower": { - "children": [], - "hosts": [ - "10.219.129.226" - ], - "vars": {} - }, - "security_group_trail615": { - "children": [], - "hosts": [ - "10.219.15.194", - "10.219.12.146", - "10.219.138.98", - "10.219.145.106", - "10.219.137.205", - "10.219.86.47", - "54.85.200.49", - "54.208.45.55", - "54.85.95.0", - "54.85.119.67" - ], - "vars": {} - }, - "security_group_trial605": { - "children": [], - "hosts": [ - "10.219.39.9", - "10.219.26.28", - "10.219.60.102", - "10.219.178.85", - "10.219.108.141", - "10.219.81.29", - "54.86.57.201", - "54.85.14.238", - "54.85.75.200", - "54.86.40.17" - ], - "vars": {} - }, - "security_group_trial606": { - "children": [], - "hosts": [ - "10.219.11.70", - "10.219.5.147", - "10.219.16.66", - "10.219.158.176", - "10.219.142.79", - "10.219.100.175", - "54.85.87.129", - "54.84.163.82", - "54.208.228.127", - "54.84.251.0" - ], - "vars": {} - }, - "security_group_trial608": { - "children": [], - "hosts": [ - "54.85.161.87", - "54.85.90.7", - "54.208.59.237", - "54.85.199.140" - ], - "vars": {} - }, - "security_group_trial609": { - "children": [], - "hosts": [ - "10.219.17.208", - "10.219.185.186", - "10.219.154.115", - "10.219.155.180", - "10.219.103.150", - "10.219.67.120", - "54.208.141.20", - "54.209.120.55", - "54.208.210.176", - "54.209.108.61" - ], - "vars": {} - }, - "security_group_trial610": { - "children": [], - "hosts": [ - "54.84.169.33", - "54.209.106.125", - "54.84.240.188", - "54.84.192.78" - ], - "vars": {} - }, - "security_group_trial611": { - "children": [], - "hosts": [ - "10.219.56.242", - "10.219.30.68", - "10.219.57.108", - "10.219.133.48", - "10.219.89.90", - "10.219.111.113", - "54.84.21.94", - "54.85.48.128", - "54.85.208.32", - "54.85.27.197" - ], - "vars": {} - }, - "security_group_trial616": { - "children": [], - "hosts": [ - "10.219.2.224", - "10.219.48.124", - "10.219.154.12", - "10.219.92.64", - "10.219.85.31", - "10.219.89.30", - "54.209.204.12", - "54.85.223.164", - "54.209.14.115", - "54.209.203.222" - ], - "vars": {} - }, - "security_group_trial617": { - "children": [], - "hosts": [ - "10.219.14.143", - "10.219.4.55", - "10.219.130.1", - "10.219.169.68", - "10.219.180.244", - "10.219.122.228", - "54.84.54.49", - "54.85.166.231", - "54.84.245.162", - "54.85.249.26" - ], - "vars": {} - }, - "security_group_trial620": { - "children": [], - "hosts": [ - "10.219.48.23", - "10.219.54.28", - "10.219.143.130", - "10.219.109.92", - "10.219.121.80", - "10.219.109.28", - "54.85.135.14", - "54.208.12.112", - "54.84.103.10", - "54.209.76.22" - ], - "vars": {} - }, - "security_group_trial621": { - "children": [], - "hosts": [ - "10.219.47.118", - "10.219.143.228", - "10.219.187.178", - "10.219.154.203", - "10.219.88.75", - "10.219.97.207", - "54.209.74.106", - "54.85.85.59", - "54.85.48.70", - "54.208.187.98" - ], - "vars": {} - }, - "security_group_trial622": { - "children": [], - "hosts": [ - "10.219.43.2", - "10.219.39.144", - "10.219.63.67", - "10.219.184.234", - "10.219.163.166", - "10.219.68.47", - "54.209.127.172", - "54.85.84.167", - "54.85.47.154", - "54.209.108.176" - ], - "vars": {} - }, - "security_group_trial623": { - "children": [], - "hosts": [ - "10.219.39.139", - "10.219.37.47", - "10.219.25.26", - "10.219.136.13", - "10.219.146.42", - "10.219.78.42", - "54.85.61.212", - "54.84.190.144", - "54.85.255.219", - "54.85.173.90" - ], - "vars": {} - }, - "security_group_trial624": { - "children": [], - "hosts": [ - "54.84.174.209", - "54.85.44.185", - "54.208.89.118", - "54.85.160.181" - ], - "vars": {} - }, - "security_group_trial636": { - "children": [], - "hosts": [ - "10.219.49.11", - "10.219.138.5", - "10.219.153.9", - "10.219.165.155", - "10.219.79.157", - "10.219.121.158", - "54.86.50.215", - "54.85.248.82", - "54.85.170.154", - "54.85.148.231" - ], - "vars": {} - }, - "security_group_trials": { - "children": [], - "hosts": [ - "54.86.76.41", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.84.114.2", - "54.86.75.36", - "54.86.77.91", - "54.86.99.19", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.85.53.185", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "10.219.90.205", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.173.38", - "10.219.191.53", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.11.190", - "10.219.36.102", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231" - ], - "vars": {} - }, - "security_group_zabbix-client": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "security_group_zabbix-server": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12", - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_BuildUser_Chris_Boniak": { - "children": [], - "hosts": [ - "54.86.128.114", - "54.86.94.44", - "54.85.148.101", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.209.139.239", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.76.41", - "54.84.190.109", - "54.85.91.87", - "54.209.106.125", - "54.85.102.208", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.114.2", - "54.86.75.36", - "54.86.125.136", - "54.84.46.105", - "54.84.169.33", - "54.208.87.90", - "54.85.42.61", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.85.53.185", - "54.86.107.51", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.94.77", - "10.219.72.134", - "10.219.107.101", - "10.219.103.216", - "10.219.93.172", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.118.126", - "10.219.97.164", - "10.219.90.205", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.184.152", - "10.219.133.48", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.184.95", - "10.219.60.213", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.11.190", - "10.219.36.102", - "10.219.49.160", - "10.219.1.219", - "10.219.43.57" - ], - "vars": {} - }, - "tag_BuildUser_Joped": { - "children": [], - "hosts": [ - "54.85.199.140", - "54.209.108.61", - "54.84.251.0", - "54.86.51.77", - "54.86.40.17", - "54.86.14.157", - "54.86.75.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.208.228.127", - "54.84.75.99", - "54.85.75.200", - "54.85.167.62", - "54.86.84.64", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.163.82", - "54.85.87.129", - "54.85.14.238", - "54.86.57.201", - "54.84.193.141", - "54.86.85.22", - "54.84.152.213", - "54.85.69.157", - "10.219.68.240", - "10.219.67.120", - "10.219.103.150", - "10.219.100.175", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.64.207", - "10.219.112.253", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.142.79", - "10.219.158.176", - "10.219.173.21", - "10.219.178.85", - "10.219.152.17", - "10.219.189.219", - "10.219.152.142", - "10.219.17.208", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.51.115", - "10.219.17.109", - "10.219.4.79", - "10.219.87.108", - "10.219.147.76", - "10.219.164.5", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215" - ], - "vars": {} - }, - "tag_BuildUser_Mike_Regan": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.103.185", - "54.86.141.187", - "54.85.119.67", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.85.175.102", - "54.85.95.0", - "54.208.45.55", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.85.37.235", - "54.86.54.174", - "54.86.109.129", - "54.86.141.184", - "54.85.200.49", - "54.209.204.12", - "54.84.54.49", - "54.86.23.145", - "54.84.156.195", - "54.86.119.45", - "54.86.141.183", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.219.119.218", - "10.219.86.47", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.112.202", - "10.219.83.87", - "10.219.160.142", - "10.219.179.119", - "10.219.136.115", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.165.236", - "10.219.147.27", - "10.219.132.76", - "10.219.26.121", - "10.219.59.57", - "10.219.41.51", - "10.219.12.146", - "10.219.15.194", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.2.93", - "10.219.9.213", - "10.219.35.86", - "10.219.51.0", - "10.219.43.48" - ], - "vars": {} - }, - "tag_BuildUser_Ravi_Anandwala": { - "children": [], - "hosts": [ - "54.85.148.231", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.85.170.154", - "54.85.248.82", - "54.86.77.91", - "54.86.99.19", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.50.215", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "10.219.121.158", - "10.219.79.157", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.173.38", - "10.219.191.53", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.49.11", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231" - ], - "vars": {} - }, - "tag_BuildUser_bwong": { - "children": [], - "hosts": [ - "10.219.29.254", - "10.219.25.147", - "10.219.161.118", - "10.219.152.52", - "10.219.188.151", - "10.219.114.174" - ], - "vars": {} - }, - "tag_BuildUser_mloven": { - "children": [], - "hosts": [ - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.86.88.208", - "54.86.81.117", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.86.89.139", - "54.86.56.174", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.71.223", - "10.219.84.189", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.132.135", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91" - ], - "vars": {} - }, - "tag_FQDN_c0m1_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.45.160" - ], - "vars": {} - }, - "tag_FQDN_c0m1_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.92.107" - ], - "vars": {} - }, - "tag_FQDN_c0m1_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.137.105" - ], - "vars": {} - }, - "tag_FQDN_c0m1_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.171.92" - ], - "vars": {} - }, - "tag_FQDN_c0m1_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.183.156" - ], - "vars": {} - }, - "tag_FQDN_c0m1_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.52.143", - "54.84.156.145" - ], - "vars": {} - }, - "tag_FQDN_c0m1_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.168.89" - ], - "vars": {} - }, - "tag_FQDN_c0m1_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.59.221" - ], - "vars": {} - }, - "tag_FQDN_c0m1_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.130.229" - ], - "vars": {} - }, - "tag_FQDN_c0m1_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.127" - ], - "vars": {} - }, - "tag_FQDN_c0m1_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.134.179" - ], - "vars": {} - }, - "tag_FQDN_c0m1_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.29.108" - ], - "vars": {} - }, - "tag_FQDN_c0m1_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.179.164", - "54.84.222.7" - ], - "vars": {} - }, - "tag_FQDN_c0m1_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.85.120" - ], - "vars": {} - }, - "tag_FQDN_c0m1_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.72.12" - ], - "vars": {} - }, - "tag_FQDN_c0m1_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.112.202" - ], - "vars": {} - }, - "tag_FQDN_c0m1_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.51" - ], - "vars": {} - }, - "tag_FQDN_c0m1_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.181.82" - ], - "vars": {} - }, - "tag_FQDN_c0m1_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.118.63" - ], - "vars": {} - }, - "tag_FQDN_c0m1_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.107.232" - ], - "vars": {} - }, - "tag_FQDN_c0m1_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.137.198" - ], - "vars": {} - }, - "tag_FQDN_c0m1_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.130.240", - "54.86.39.175" - ], - "vars": {} - }, - "tag_FQDN_c0m1_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.166.102", - "10.219.132.127", - "10.219.134.89", - "10.219.177.248", - "10.219.144.224" - ], - "vars": {} - }, - "tag_FQDN_c0m1_security-test_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-204-188-107.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_c0m1_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.115.77" - ], - "vars": {} - }, - "tag_FQDN_c0m1_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.39.194" - ], - "vars": {} - }, - "tag_FQDN_c0m1_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.152.52" - ], - "vars": {} - }, - "tag_FQDN_c0m1_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.91.14" - ], - "vars": {} - }, - "tag_FQDN_c0m1_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.53.81" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.26.28" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.11.70" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.67" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.155.180" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.30.68" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.140.138" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.85.43" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.81.201" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.137.205" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.92.64" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.180.244" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.60.118" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.45.70" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.121.80" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.143.228" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.43.2" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.39.139" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.169.135" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.9.203" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.119.127" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.123.229" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.63.214" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.150.33" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.27.228" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.137.67" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.40.153" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.187.219" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.183.205" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.165.155" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.162.164" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.6.136" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.12.138" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.165.247" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.71.164" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.9.24" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.151.162" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.124.145" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.25" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.62.182" - ], - "vars": {} - }, - "tag_FQDN_c0m1_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.87.56" - ], - "vars": {} - }, - "tag_FQDN_c0m1_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.16.100" - ], - "vars": {} - }, - "tag_FQDN_chef-corp-dev_fidoplus_splunkwhisper_com": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_chef-sandbox-dev_fidoplus_splunkwhisper_com": { - "children": [], - "hosts": [ - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_exec03_stackmakr-corp_splunkwhisper_com": { - "children": [], - "hosts": [ - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_idx1_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.62.215" - ], - "vars": {} - }, - "tag_FQDN_idx1_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.1.219", - "54.86.107.51" - ], - "vars": {} - }, - "tag_FQDN_idx1_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.63.105", - "54.85.54.254" - ], - "vars": {} - }, - "tag_FQDN_idx1_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.4.181", - "54.84.99.227" - ], - "vars": {} - }, - "tag_FQDN_idx1_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.18.251", - "54.84.217.136" - ], - "vars": {} - }, - "tag_FQDN_idx1_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.226", - "54.84.103.231" - ], - "vars": {} - }, - "tag_FQDN_idx1_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.28.78", - "54.85.13.176" - ], - "vars": {} - }, - "tag_FQDN_idx1_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.38.61", - "54.209.183.210" - ], - "vars": {} - }, - "tag_FQDN_idx1_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.60.213", - "54.84.46.105" - ], - "vars": {} - }, - "tag_FQDN_idx1_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.55.210", - "54.84.18.13" - ], - "vars": {} - }, - "tag_FQDN_idx1_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.35.86", - "54.84.156.195" - ], - "vars": {} - }, - "tag_FQDN_idx1_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.3.208", - "54.85.42.61" - ], - "vars": {} - }, - "tag_FQDN_idx1_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.11.12", - "54.84.125.108" - ], - "vars": {} - }, - "tag_FQDN_idx1_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.43.48", - "54.86.141.183" - ], - "vars": {} - }, - "tag_FQDN_idx1_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.51.0", - "54.86.119.45" - ], - "vars": {} - }, - "tag_FQDN_idx1_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.49.237", - "54.85.10.98" - ], - "vars": {} - }, - "tag_FQDN_idx1_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.59.57" - ], - "vars": {} - }, - "tag_FQDN_idx1_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.25.43", - "54.85.33.186" - ], - "vars": {} - }, - "tag_FQDN_idx1_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.32.233", - "54.85.53.103" - ], - "vars": {} - }, - "tag_FQDN_idx1_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.49.54", - "54.84.84.30" - ], - "vars": {} - }, - "tag_FQDN_idx1_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.43.57", - "54.85.69.157" - ], - "vars": {} - }, - "tag_FQDN_idx1_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.63.147", - "54.85.80.174" - ], - "vars": {} - }, - "tag_FQDN_idx1_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.58.233", - "10.219.2.175", - "10.219.4.252", - "10.219.16.214" - ], - "vars": {} - }, - "tag_FQDN_idx1_security-test_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_idx1_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.1.1", - "54.85.146.9" - ], - "vars": {} - }, - "tag_FQDN_idx1_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.235", - "54.86.10.255" - ], - "vars": {} - }, - "tag_FQDN_idx1_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.25.147" - ], - "vars": {} - }, - "tag_FQDN_idx1_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.31.47", - "54.84.207.241" - ], - "vars": {} - }, - "tag_FQDN_idx1_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.61.154", - "54.84.92.185" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.60.102", - "54.85.14.238" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.16.66", - "54.84.163.82" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.18.78", - "54.86.90.142" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial608_splunkcloud_com": { - "children": [], - "hosts": [ - "54.85.161.87" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.17.208", - "54.208.141.20" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial610_splunkcloud_com": { - "children": [], - "hosts": [ - "54.84.169.33" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.57.108", - "54.85.48.128" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.11.190", - "54.85.53.185" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.16.89", - "54.86.102.132" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.18.12", - "54.86.103.5" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.12.146", - "54.85.200.49" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.2.224", - "54.209.204.12" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.14.143", - "54.84.54.49" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.191", - "54.86.53.153" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.162", - "54.86.117.163" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.48.23", - "54.85.135.14" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.47.118", - "54.209.74.106" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.63.67", - "54.85.84.167" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.37.47", - "54.85.61.212" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial624_splunkcloud_com": { - "children": [], - "hosts": [ - "54.84.174.209" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.37.213", - "54.86.117.236" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.24.179", - "54.86.82.149" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.53.83", - "54.86.97.227" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.27.75", - "54.86.90.204" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.32.78", - "54.86.97.73" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.10.200", - "54.85.193.223" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.20.248", - "54.85.149.164" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.47.66", - "54.86.94.149" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.5.136", - "54.86.96.151" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.20.163", - "54.86.100.62" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.5.238", - "54.86.112.96" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.49.11", - "54.86.50.215" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.32.235", - "54.86.112.106" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.26.152", - "54.86.80.163" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.3.22", - "54.86.87.183" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.22.111", - "54.86.99.249" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.10.83", - "54.84.167.146" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.42.72", - "54.86.81.225" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.24.227", - "54.86.79.232" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.32.15", - "54.86.106.242" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.31.244", - "54.86.98.77" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.18.88", - "54.85.77.167" - ], - "vars": {} - }, - "tag_FQDN_idx1_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.61.3", - "54.86.108.101" - ], - "vars": {} - }, - "tag_FQDN_idx1_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.6.165", - "54.84.148.213" - ], - "vars": {} - }, - "tag_FQDN_idx2_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.87.108" - ], - "vars": {} - }, - "tag_FQDN_idx2_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.70.210", - "54.86.128.114" - ], - "vars": {} - }, - "tag_FQDN_idx2_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.91.234", - "54.85.68.39" - ], - "vars": {} - }, - "tag_FQDN_idx2_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.99", - "54.84.142.102" - ], - "vars": {} - }, - "tag_FQDN_idx2_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.107.166", - "54.85.42.39" - ], - "vars": {} - }, - "tag_FQDN_idx2_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.127.143", - "54.84.189.117" - ], - "vars": {} - }, - "tag_FQDN_idx2_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.113.16", - "54.84.222.25" - ], - "vars": {} - }, - "tag_FQDN_idx2_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.82.113", - "54.209.177.56" - ], - "vars": {} - }, - "tag_FQDN_idx2_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.72.134", - "54.85.148.101" - ], - "vars": {} - }, - "tag_FQDN_idx2_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.118.126", - "54.84.0.249" - ], - "vars": {} - }, - "tag_FQDN_idx2_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.83.87", - "54.85.175.102" - ], - "vars": {} - }, - "tag_FQDN_idx2_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.103.216", - "54.209.139.239" - ], - "vars": {} - }, - "tag_FQDN_idx2_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.105.247", - "54.84.185.247" - ], - "vars": {} - }, - "tag_FQDN_idx2_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.64.89", - "54.86.103.185" - ], - "vars": {} - }, - "tag_FQDN_idx2_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.69.7", - "54.86.109.121" - ], - "vars": {} - }, - "tag_FQDN_idx2_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.103.26", - "54.84.228.141" - ], - "vars": {} - }, - "tag_FQDN_idx2_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.119.218" - ], - "vars": {} - }, - "tag_FQDN_idx2_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.81.15", - "54.85.21.183" - ], - "vars": {} - }, - "tag_FQDN_idx2_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.100.34", - "54.84.252.121" - ], - "vars": {} - }, - "tag_FQDN_idx2_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.126.78", - "54.85.71.54" - ], - "vars": {} - }, - "tag_FQDN_idx2_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.72.93", - "54.84.170.133" - ], - "vars": {} - }, - "tag_FQDN_idx2_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.125.232", - "54.84.74.125" - ], - "vars": {} - }, - "tag_FQDN_idx2_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.114.9", - "10.219.120.83", - "10.219.80.212", - "10.219.120.23", - "10.219.78.69", - "10.219.64.217" - ], - "vars": {} - }, - "tag_FQDN_idx2_security-test_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-23-22-96-198.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_idx2_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.90.109", - "54.85.157.183" - ], - "vars": {} - }, - "tag_FQDN_idx2_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.84.189", - "54.86.81.117" - ], - "vars": {} - }, - "tag_FQDN_idx2_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.114.174" - ], - "vars": {} - }, - "tag_FQDN_idx2_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.65.35", - "54.84.191.190" - ], - "vars": {} - }, - "tag_FQDN_idx2_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.86.78", - "54.84.87.73" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.81.29", - "54.86.40.17" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.100.175", - "54.84.251.0" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.98.173", - "54.86.90.177" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial608_splunkcloud_com": { - "children": [], - "hosts": [ - "54.85.199.140" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.67.120", - "54.209.108.61" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial610_splunkcloud_com": { - "children": [], - "hosts": [ - "54.84.192.78" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.89.90", - "54.85.27.197" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.90.205", - "54.86.76.41" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.114.207", - "54.86.110.115" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.94.27", - "54.86.104.18" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.86.47", - "54.85.119.67" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.89.30", - "54.209.203.222" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.122.228", - "54.85.249.26" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.64.87", - "54.86.89.186" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.96.145", - "54.86.111.80" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.109.92", - "54.84.103.10" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.88.75", - "54.208.187.98" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.47", - "54.209.108.176" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.78.42", - "54.85.173.90" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial624_splunkcloud_com": { - "children": [], - "hosts": [ - "54.85.160.181" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.111.126", - "54.86.116.199" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.77.13", - "54.86.87.25" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.118.148", - "54.86.97.181" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.73.211", - "54.86.92.153" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.75.209", - "54.86.60.192" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.114.210", - "54.86.76.239" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.78.250", - "54.86.8.229" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.110.47", - "54.86.93.172" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.40", - "54.86.97.99" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.97.127", - "54.86.99.25" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.91.109", - "54.86.111.203" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.121.158", - "54.85.148.231" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.115.61", - "54.86.112.135" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.92.4", - "54.86.80.208" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.119.78", - "54.86.84.127" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.78.180", - "54.86.94.238" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.66.5", - "54.86.64.168" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.75.107", - "54.86.81.213" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.97.123", - "54.86.53.77" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.125.7", - "54.86.106.243" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.93.219", - "54.85.98.144" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.89.22", - "54.86.80.182" - ], - "vars": {} - }, - "tag_FQDN_idx2_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.102.143", - "54.86.108.119" - ], - "vars": {} - }, - "tag_FQDN_idx2_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.90.31", - "54.208.10.193" - ], - "vars": {} - }, - "tag_FQDN_idx3_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.76" - ], - "vars": {} - }, - "tag_FQDN_idx3_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.184.95", - "54.86.125.136" - ], - "vars": {} - }, - "tag_FQDN_idx3_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.168.41", - "54.85.181.37" - ], - "vars": {} - }, - "tag_FQDN_idx3_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.132.7", - "54.84.155.209" - ], - "vars": {} - }, - "tag_FQDN_idx3_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.174.165", - "54.84.116.38" - ], - "vars": {} - }, - "tag_FQDN_idx3_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.145.78", - "54.84.189.190" - ], - "vars": {} - }, - "tag_FQDN_idx3_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.186.145", - "54.84.137.179" - ], - "vars": {} - }, - "tag_FQDN_idx3_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.156.153", - "54.85.52.37" - ], - "vars": {} - }, - "tag_FQDN_idx3_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.153.220", - "54.85.91.87" - ], - "vars": {} - }, - "tag_FQDN_idx3_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.169.240", - "54.85.126.177" - ], - "vars": {} - }, - "tag_FQDN_idx3_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.155.57", - "54.85.37.235" - ], - "vars": {} - }, - "tag_FQDN_idx3_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.184.152", - "54.85.102.208" - ], - "vars": {} - }, - "tag_FQDN_idx3_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.136.17", - "54.84.164.99" - ], - "vars": {} - }, - "tag_FQDN_idx3_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.27", - "54.86.141.184" - ], - "vars": {} - }, - "tag_FQDN_idx3_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.165.236", - "54.86.109.129" - ], - "vars": {} - }, - "tag_FQDN_idx3_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.188.5", - "54.85.16.252" - ], - "vars": {} - }, - "tag_FQDN_idx3_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.179.119" - ], - "vars": {} - }, - "tag_FQDN_idx3_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.189.153", - "54.85.66.59" - ], - "vars": {} - }, - "tag_FQDN_idx3_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.131.134", - "54.85.32.12" - ], - "vars": {} - }, - "tag_FQDN_idx3_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.166.184", - "54.85.71.17" - ], - "vars": {} - }, - "tag_FQDN_idx3_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.177.243", - "54.85.45.216" - ], - "vars": {} - }, - "tag_FQDN_idx3_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.130.190", - "54.84.47.238" - ], - "vars": {} - }, - "tag_FQDN_idx3_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.174.231", - "10.219.130.19", - "10.219.148.67", - "10.219.182.219", - "10.219.177.150" - ], - "vars": {} - }, - "tag_FQDN_idx3_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.186.171", - "54.84.189.79" - ], - "vars": {} - }, - "tag_FQDN_idx3_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.150.186", - "54.86.89.139" - ], - "vars": {} - }, - "tag_FQDN_idx3_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.188.151" - ], - "vars": {} - }, - "tag_FQDN_idx3_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.173.45", - "54.85.34.98" - ], - "vars": {} - }, - "tag_FQDN_idx3_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.134.206", - "54.84.84.233" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.178.85", - "54.85.75.200" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.142.79", - "54.208.228.127" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.74", - "54.86.90.152" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial608_splunkcloud_com": { - "children": [], - "hosts": [ - "54.208.59.237" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.185.186", - "54.209.120.55" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial610_splunkcloud_com": { - "children": [], - "hosts": [ - "54.209.106.125" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.133.48", - "54.85.208.32" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.178.84", - "54.86.75.36" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.149.40", - "54.86.110.180" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.180.178", - "54.86.105.40" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.145.106", - "54.85.95.0" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.12", - "54.85.223.164" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.130.1", - "54.85.166.231" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.63", - "54.86.81.21" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.177.41", - "54.86.117.162" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.143.130", - "54.208.12.112" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.187.178", - "54.85.85.59" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.163.166", - "54.85.47.154" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.146.42", - "54.85.255.219" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial624_splunkcloud_com": { - "children": [], - "hosts": [ - "54.85.44.185" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.142.152", - "54.86.117.237" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.173.38", - "54.86.77.91" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.128.18", - "54.85.75.4" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.155.112", - "54.86.78.51" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.152.253", - "54.85.196.193" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.185.101", - "54.84.199.152" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.142.223", - "54.85.207.233" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.137.49", - "54.84.81.3" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.191.53", - "54.86.99.19" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.136.200", - "54.85.11.117" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.166.38", - "54.86.111.175" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.138.5", - "54.85.248.82" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.167.0", - "54.86.3.216" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.130.129", - "54.86.80.36" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.179.156", - "54.86.104.169" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.142.23", - "54.86.90.71" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.158.35", - "54.84.241.208" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.131.26", - "54.86.60.175" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.175.97", - "54.85.127.222" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.175.162", - "54.86.106.241" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.140.250", - "54.86.38.49" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.168.254", - "54.85.251.175" - ], - "vars": {} - }, - "tag_FQDN_idx3_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.156.2", - "54.86.108.102" - ], - "vars": {} - }, - "tag_FQDN_idx3_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.157.181", - "54.84.149.162" - ], - "vars": {} - }, - "tag_FQDN_idx4_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.62.184", - "54.84.180.204" - ], - "vars": {} - }, - "tag_FQDN_idx4_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.8.78", - "54.209.162.114" - ], - "vars": {} - }, - "tag_FQDN_idx4_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.17.109", - "54.86.85.22" - ], - "vars": {} - }, - "tag_FQDN_idx4_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.2.93", - "54.86.23.145" - ], - "vars": {} - }, - "tag_FQDN_idx4_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.56.91", - "54.86.48.214" - ], - "vars": {} - }, - "tag_FQDN_idx5_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.98.174", - "54.84.80.225" - ], - "vars": {} - }, - "tag_FQDN_idx5_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.67.44", - "54.85.47.190" - ], - "vars": {} - }, - "tag_FQDN_idx5_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.112.253", - "54.86.75.79" - ], - "vars": {} - }, - "tag_FQDN_idx5_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.103.178", - "54.86.51.77" - ], - "vars": {} - }, - "tag_FQDN_idx5_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.71.223", - "54.86.88.208" - ], - "vars": {} - }, - "tag_FQDN_idx6_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.167.28", - "54.84.31.76" - ], - "vars": {} - }, - "tag_FQDN_idx6_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.189.219", - "54.86.84.64" - ], - "vars": {} - }, - "tag_FQDN_idx6_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.173.21", - "54.84.75.99" - ], - "vars": {} - }, - "tag_FQDN_idx6_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.175.103", - "54.86.56.174" - ], - "vars": {} - }, - "tag_FQDN_idx7_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.51.115", - "54.84.193.141" - ], - "vars": {} - }, - "tag_FQDN_idx8_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.64.207", - "54.86.14.157" - ], - "vars": {} - }, - "tag_FQDN_idx9_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.152.17", - "54.85.167.62" - ], - "vars": {} - }, - "tag_FQDN_jenkins01_stackmakr-corp_splunkwhisper_com": { - "children": [], - "hosts": [ - "ec2-54-205-251-95.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_jenkins01_stackmakr-ops-blue_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-221-223-232.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_jenkins01_stackmakr-ops-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.26.182" - ], - "vars": {} - }, - "tag_FQDN_lm1_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.164.5" - ], - "vars": {} - }, - "tag_FQDN_lm1_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.49.160" - ], - "vars": {} - }, - "tag_FQDN_lm1_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.5.111" - ], - "vars": {} - }, - "tag_FQDN_lm1_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.1.9" - ], - "vars": {} - }, - "tag_FQDN_lm1_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.84.105" - ], - "vars": {} - }, - "tag_FQDN_lm1_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.173.93", - "54.84.122.210" - ], - "vars": {} - }, - "tag_FQDN_lm1_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.190.234" - ], - "vars": {} - }, - "tag_FQDN_lm1_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.165.216" - ], - "vars": {} - }, - "tag_FQDN_lm1_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.94.77" - ], - "vars": {} - }, - "tag_FQDN_lm1_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.97.164" - ], - "vars": {} - }, - "tag_FQDN_lm1_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.9.213" - ], - "vars": {} - }, - "tag_FQDN_lm1_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.93.172" - ], - "vars": {} - }, - "tag_FQDN_lm1_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.98.192", - "54.84.206.192" - ], - "vars": {} - }, - "tag_FQDN_lm1_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.132.76" - ], - "vars": {} - }, - "tag_FQDN_lm1_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.136.115" - ], - "vars": {} - }, - "tag_FQDN_lm1_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.40.115" - ], - "vars": {} - }, - "tag_FQDN_lm1_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.160.142" - ], - "vars": {} - }, - "tag_FQDN_lm1_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.16.141" - ], - "vars": {} - }, - "tag_FQDN_lm1_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.146.30" - ], - "vars": {} - }, - "tag_FQDN_lm1_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.48.166" - ], - "vars": {} - }, - "tag_FQDN_lm1_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.12.85" - ], - "vars": {} - }, - "tag_FQDN_lm1_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.47.1", - "54.84.23.79" - ], - "vars": {} - }, - "tag_FQDN_lm1_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.111.13", - "10.219.111.100", - "10.219.91.91", - "10.219.118.52", - "10.219.115.245", - "10.219.100.237" - ], - "vars": {} - }, - "tag_FQDN_lm1_security-test_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-205-127-141.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_lm1_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.0.222" - ], - "vars": {} - }, - "tag_FQDN_lm1_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.60" - ], - "vars": {} - }, - "tag_FQDN_lm1_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.29.254" - ], - "vars": {} - }, - "tag_FQDN_lm1_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.128.227" - ], - "vars": {} - }, - "tag_FQDN_lm1_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.47.252" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.108.141" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.158.176" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.185.71" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.103.150" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.111.113" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.102" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.142.242" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.19.226" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.15.194" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.48.124" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.4.55" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.173.37" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.211" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.54.28" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.97.207" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.184.234" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.136.13" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.26" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.66.9" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.25.150" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.129.154" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.161.92" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.75.150" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.180" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.52.205" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.119.27" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.11.33" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.127.169" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.79.157" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.36.177" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.254" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.133.98" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.28.211" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.128.183" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.77.162" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.30.9" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.239" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.101.155" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.135.107" - ], - "vars": {} - }, - "tag_FQDN_lm1_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.9.54" - ], - "vars": {} - }, - "tag_FQDN_lm1_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.43.249" - ], - "vars": {} - }, - "tag_FQDN_ops-blue-exec01_stackmakr-ops-blue_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-204-191-195.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_ops-blue-exec02_stackmakr-ops-blue_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-50-17-62-124.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_ops-red-exec01_stackmakr-ops-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.33.86" - ], - "vars": {} - }, - "tag_FQDN_ops-red-exec02_stackmakr-ops-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.57.225" - ], - "vars": {} - }, - "tag_FQDN_sh1_CO-920_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.10.116" - ], - "vars": {} - }, - "tag_FQDN_sh1_anaplan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.117.146", - "54.86.94.44" - ], - "vars": {} - }, - "tag_FQDN_sh1_backupify_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.131.132", - "54.85.76.42" - ], - "vars": {} - }, - "tag_FQDN_sh1_climate_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.147.195", - "54.84.164.51" - ], - "vars": {} - }, - "tag_FQDN_sh1_defensenet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.184", - "54.84.97.29" - ], - "vars": {} - }, - "tag_FQDN_sh1_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.4.79", - "54.84.152.213" - ], - "vars": {} - }, - "tag_FQDN_sh1_funtomic-prod_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.127.193", - "54.84.242.116" - ], - "vars": {} - }, - "tag_FQDN_sh1_gilt_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.62.128", - "54.85.80.156" - ], - "vars": {} - }, - "tag_FQDN_sh1_idexx_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.94", - "54.84.190.109" - ], - "vars": {} - }, - "tag_FQDN_sh1_intermedia_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.4.113", - "54.85.193.109" - ], - "vars": {} - }, - "tag_FQDN_sh1_k14_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.141.55", - "54.86.54.174" - ], - "vars": {} - }, - "tag_FQDN_sh1_lyft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.56.12", - "54.208.87.90" - ], - "vars": {} - }, - "tag_FQDN_sh1_marriott_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.136.66", - "54.84.199.223" - ], - "vars": {} - }, - "tag_FQDN_sh1_mckesson_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.95.221", - "54.86.141.187" - ], - "vars": {} - }, - "tag_FQDN_sh1_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.101.208", - "54.86.112.246" - ], - "vars": {} - }, - "tag_FQDN_sh1_motionsoft_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.81.130", - "54.85.65.51" - ], - "vars": {} - }, - "tag_FQDN_sh1_mregan_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.26.121" - ], - "vars": {} - }, - "tag_FQDN_sh1_poc1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.182.240", - "54.85.52.64" - ], - "vars": {} - }, - "tag_FQDN_sh1_poc2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.85.37", - "54.85.28.140" - ], - "vars": {} - }, - "tag_FQDN_sh1_poc3_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.85.245", - "54.84.166.253" - ], - "vars": {} - }, - "tag_FQDN_sh1_poc4_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.150.111", - "54.85.69.123" - ], - "vars": {} - }, - "tag_FQDN_sh1_poc5_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.169.253", - "54.85.72.146" - ], - "vars": {} - }, - "tag_FQDN_sh1_prod-monitor-red_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.167.181", - "10.219.152.208", - "10.219.161.188", - "10.219.154.235" - ], - "vars": {} - }, - "tag_FQDN_sh1_security-test_splunkcloud_com": { - "children": [], - "hosts": [ - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_FQDN_sh1_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.92.169" - ], - "vars": {} - }, - "tag_FQDN_sh1_sonos_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.56.44", - "54.86.80.199" - ], - "vars": {} - }, - "tag_FQDN_sh1_splunk-sfdc_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.161.118" - ], - "vars": {} - }, - "tag_FQDN_sh1_spm1_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.107.101", - "54.84.245.20" - ], - "vars": {} - }, - "tag_FQDN_sh1_take2_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.92.102", - "54.84.65.195" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial605_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.39.9", - "54.86.57.201" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial606_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.5.147", - "54.85.87.129" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial607_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.62.192", - "54.86.90.15" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial608_splunkcloud_com": { - "children": [], - "hosts": [ - "54.85.90.7" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial609_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.115", - "54.208.210.176" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial610_splunkcloud_com": { - "children": [], - "hosts": [ - "54.84.240.188" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial611_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.56.242", - "54.84.21.94" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial612_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.155.123", - "54.84.114.2" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial613_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.79.196", - "54.86.52.195" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial614_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.117.252", - "54.86.94.75" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial615_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.138.98", - "54.208.45.55" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial616_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.85.31", - "54.209.14.115" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial617_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.169.68", - "54.84.245.162" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial618_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.41.230", - "54.86.74.37" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial619_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.56.83", - "54.86.117.161" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial620_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.109.28", - "54.209.76.22" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial621_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.154.203", - "54.85.48.70" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial622_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.39.144", - "54.209.127.172" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial623_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.25.26", - "54.84.190.144" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial624_splunkcloud_com": { - "children": [], - "hosts": [ - "54.208.89.118" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial625_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.138.185", - "54.86.116.105" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial626_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.59.159", - "54.86.71.155" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial627_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.109.144", - "54.86.97.144" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial628_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.114.130", - "54.86.91.120" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial629_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.2.72", - "54.86.97.67" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial630_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.163.151", - "54.86.55.72" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial631_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.53.235", - "54.86.97.174" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial632_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.185.140", - "54.86.88.52" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial633_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.13.250", - "54.86.98.67" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial634_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.183.41", - "54.86.98.158" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial635_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.134.176", - "54.86.111.172" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial636_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.153.9", - "54.85.170.154" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial637_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.159.21", - "54.86.112.102" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial638_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.63.95", - "54.86.78.119" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial639_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.18.43", - "54.86.67.89" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial640_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.177.177", - "54.86.101.141" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial641_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.74.178", - "54.86.61.31" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial642_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.49.157", - "54.86.65.171" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial643_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.132.1", - "54.86.45.250" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial644_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.64.58", - "54.86.106.244" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial645_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.143.239", - "54.86.98.21" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial646_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.50.231", - "54.86.85.33" - ], - "vars": {} - }, - "tag_FQDN_sh1_trial647_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.67.205", - "54.86.108.117" - ], - "vars": {} - }, - "tag_FQDN_sh1_white-ops_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.127.168", - "54.84.15.178" - ], - "vars": {} - }, - "tag_FQDN_sh2_finra_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.68.240" - ], - "vars": {} - }, - "tag_FQDN_sh2_mindtouch_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.152.142" - ], - "vars": {} - }, - "tag_FQDN_sh2_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.12.148" - ], - "vars": {} - }, - "tag_FQDN_sh3_skynet_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.132.135" - ], - "vars": {} - }, - "tag_FQDN_zabbix1_zabbix_splunkcloud_com": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "tag_License_whisper-project-test": { - "children": [], - "hosts": [ - "ec2-54-205-127-141.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_1sot": { - "children": [], - "hosts": [ - "ec2-50-19-44-148.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_CO-920_-_c0m1": { - "children": [], - "hosts": [ - "10.219.45.160" - ], - "vars": {} - }, - "tag_Name_CO-920_-_idx1": { - "children": [], - "hosts": [ - "10.219.62.215" - ], - "vars": {} - }, - "tag_Name_CO-920_-_idx2": { - "children": [], - "hosts": [ - "10.219.87.108" - ], - "vars": {} - }, - "tag_Name_CO-920_-_idx3": { - "children": [], - "hosts": [ - "10.219.147.76" - ], - "vars": {} - }, - "tag_Name_CO-920_-_lm1": { - "children": [], - "hosts": [ - "10.219.164.5" - ], - "vars": {} - }, - "tag_Name_CO-920_-_sh1": { - "children": [], - "hosts": [ - "10.219.10.116" - ], - "vars": {} - }, - "tag_Name_anaplan_-_c0m1": { - "children": [], - "hosts": [ - "10.219.92.107" - ], - "vars": {} - }, - "tag_Name_anaplan_-_idx1": { - "children": [], - "hosts": [ - "10.219.1.219", - "54.86.107.51" - ], - "vars": {} - }, - "tag_Name_anaplan_-_idx2": { - "children": [], - "hosts": [ - "10.219.70.210", - "54.86.128.114" - ], - "vars": {} - }, - "tag_Name_anaplan_-_idx3": { - "children": [], - "hosts": [ - "10.219.184.95", - "54.86.125.136" - ], - "vars": {} - }, - "tag_Name_anaplan_-_lm1": { - "children": [], - "hosts": [ - "10.219.49.160" - ], - "vars": {} - }, - "tag_Name_anaplan_-_sh1": { - "children": [], - "hosts": [ - "10.219.117.146", - "54.86.94.44" - ], - "vars": {} - }, - "tag_Name_backupify_-_c0m1": { - "children": [], - "hosts": [ - "10.219.137.105" - ], - "vars": {} - }, - "tag_Name_backupify_-_idx1": { - "children": [], - "hosts": [ - "10.219.63.105", - "54.85.54.254" - ], - "vars": {} - }, - "tag_Name_backupify_-_idx2": { - "children": [], - "hosts": [ - "10.219.91.234", - "54.85.68.39" - ], - "vars": {} - }, - "tag_Name_backupify_-_idx3": { - "children": [], - "hosts": [ - "10.219.168.41", - "54.85.181.37" - ], - "vars": {} - }, - "tag_Name_backupify_-_lm1": { - "children": [], - "hosts": [ - "10.219.5.111" - ], - "vars": {} - }, - "tag_Name_backupify_-_sh1": { - "children": [], - "hosts": [ - "10.219.131.132", - "54.85.76.42" - ], - "vars": {} - }, - "tag_Name_chef_-_whisper": { - "children": [], - "hosts": [ - "ec2-54-80-236-42.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_climate_-_c0m1": { - "children": [], - "hosts": [ - "10.219.171.92" - ], - "vars": {} - }, - "tag_Name_climate_-_idx1": { - "children": [], - "hosts": [ - "10.219.4.181", - "54.84.99.227" - ], - "vars": {} - }, - "tag_Name_climate_-_idx2": { - "children": [], - "hosts": [ - "10.219.68.99", - "54.84.142.102" - ], - "vars": {} - }, - "tag_Name_climate_-_idx3": { - "children": [], - "hosts": [ - "10.219.132.7", - "54.84.155.209" - ], - "vars": {} - }, - "tag_Name_climate_-_lm1": { - "children": [], - "hosts": [ - "10.219.1.9" - ], - "vars": {} - }, - "tag_Name_climate_-_sh1": { - "children": [], - "hosts": [ - "10.219.147.195", - "54.84.164.51" - ], - "vars": {} - }, - "tag_Name_defensenet_-_c0m1": { - "children": [], - "hosts": [ - "10.219.183.156" - ], - "vars": {} - }, - "tag_Name_defensenet_-_idx1": { - "children": [], - "hosts": [ - "10.219.18.251", - "54.84.217.136" - ], - "vars": {} - }, - "tag_Name_defensenet_-_idx2": { - "children": [], - "hosts": [ - "10.219.107.166", - "54.85.42.39" - ], - "vars": {} - }, - "tag_Name_defensenet_-_idx3": { - "children": [], - "hosts": [ - "10.219.174.165", - "54.84.116.38" - ], - "vars": {} - }, - "tag_Name_defensenet_-_lm1": { - "children": [], - "hosts": [ - "10.219.84.105" - ], - "vars": {} - }, - "tag_Name_defensenet_-_sh1": { - "children": [], - "hosts": [ - "10.219.154.184", - "54.84.97.29" - ], - "vars": {} - }, - "tag_Name_fido_-_zabbix": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_fidoplus_-_chef-corp-dev": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_fidoplus_-_chef-sandbox-dev": { - "children": [], - "hosts": [ - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_finra_-_c0m1": { - "children": [], - "hosts": [ - "10.219.52.143", - "54.84.156.145" - ], - "vars": {} - }, - "tag_Name_finra_-_idx1": { - "children": [], - "hosts": [ - "10.219.36.226", - "54.84.103.231" - ], - "vars": {} - }, - "tag_Name_finra_-_idx2": { - "children": [], - "hosts": [ - "10.219.127.143", - "54.84.189.117" - ], - "vars": {} - }, - "tag_Name_finra_-_idx3": { - "children": [], - "hosts": [ - "10.219.145.78", - "54.84.189.190" - ], - "vars": {} - }, - "tag_Name_finra_-_idx4": { - "children": [], - "hosts": [ - "10.219.62.184", - "54.84.180.204" - ], - "vars": {} - }, - "tag_Name_finra_-_idx5": { - "children": [], - "hosts": [ - "10.219.98.174", - "54.84.80.225" - ], - "vars": {} - }, - "tag_Name_finra_-_lm1": { - "children": [], - "hosts": [ - "10.219.173.93", - "54.84.122.210" - ], - "vars": {} - }, - "tag_Name_finra_-_sh1": { - "children": [], - "hosts": [ - "10.219.4.79", - "54.84.152.213" - ], - "vars": {} - }, - "tag_Name_finra_-_sh2": { - "children": [], - "hosts": [ - "10.219.68.240" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_c0m1": { - "children": [], - "hosts": [ - "10.219.168.89" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_idx1": { - "children": [], - "hosts": [ - "10.219.28.78", - "54.85.13.176" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_idx2": { - "children": [], - "hosts": [ - "10.219.113.16", - "54.84.222.25" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_idx3": { - "children": [], - "hosts": [ - "10.219.186.145", - "54.84.137.179" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_lm1": { - "children": [], - "hosts": [ - "10.219.190.234" - ], - "vars": {} - }, - "tag_Name_funtomic-prod_-_sh1": { - "children": [], - "hosts": [ - "10.219.127.193", - "54.84.242.116" - ], - "vars": {} - }, - "tag_Name_gilt_-_c0m1": { - "children": [], - "hosts": [ - "10.219.59.221" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx1": { - "children": [], - "hosts": [ - "10.219.38.61", - "54.209.183.210" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx2": { - "children": [], - "hosts": [ - "10.219.82.113", - "54.209.177.56" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx3": { - "children": [], - "hosts": [ - "10.219.156.153", - "54.85.52.37" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx4": { - "children": [], - "hosts": [ - "10.219.8.78", - "54.209.162.114" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx5": { - "children": [], - "hosts": [ - "10.219.67.44", - "54.85.47.190" - ], - "vars": {} - }, - "tag_Name_gilt_-_idx6": { - "children": [], - "hosts": [ - "10.219.167.28", - "54.84.31.76" - ], - "vars": {} - }, - "tag_Name_gilt_-_lm1": { - "children": [], - "hosts": [ - "10.219.165.216" - ], - "vars": {} - }, - "tag_Name_gilt_-_sh1": { - "children": [], - "hosts": [ - "10.219.62.128", - "54.85.80.156" - ], - "vars": {} - }, - "tag_Name_idexx_-_c0m1": { - "children": [], - "hosts": [ - "10.219.130.229" - ], - "vars": {} - }, - "tag_Name_idexx_-_idx1": { - "children": [], - "hosts": [ - "10.219.60.213", - "54.84.46.105" - ], - "vars": {} - }, - "tag_Name_idexx_-_idx2": { - "children": [], - "hosts": [ - "10.219.72.134", - "54.85.148.101" - ], - "vars": {} - }, - "tag_Name_idexx_-_idx3": { - "children": [], - "hosts": [ - "10.219.153.220", - "54.85.91.87" - ], - "vars": {} - }, - "tag_Name_idexx_-_lm1": { - "children": [], - "hosts": [ - "10.219.94.77" - ], - "vars": {} - }, - "tag_Name_idexx_-_sh1": { - "children": [], - "hosts": [ - "10.219.154.94", - "54.84.190.109" - ], - "vars": {} - }, - "tag_Name_intermedia_-_c0m1": { - "children": [], - "hosts": [ - "10.219.41.127" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx1": { - "children": [], - "hosts": [ - "10.219.55.210", - "54.84.18.13" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx2": { - "children": [], - "hosts": [ - "10.219.118.126", - "54.84.0.249" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx3": { - "children": [], - "hosts": [ - "10.219.169.240", - "54.85.126.177" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx4": { - "children": [], - "hosts": [ - "10.219.17.109", - "54.86.85.22" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx5": { - "children": [], - "hosts": [ - "10.219.112.253", - "54.86.75.79" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx6": { - "children": [], - "hosts": [ - "10.219.189.219", - "54.86.84.64" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx7": { - "children": [], - "hosts": [ - "10.219.51.115", - "54.84.193.141" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx8": { - "children": [], - "hosts": [ - "10.219.64.207", - "54.86.14.157" - ], - "vars": {} - }, - "tag_Name_intermedia_-_idx9": { - "children": [], - "hosts": [ - "10.219.152.17", - "54.85.167.62" - ], - "vars": {} - }, - "tag_Name_intermedia_-_lm1": { - "children": [], - "hosts": [ - "10.219.97.164" - ], - "vars": {} - }, - "tag_Name_intermedia_-_sh1": { - "children": [], - "hosts": [ - "10.219.4.113", - "54.85.193.109" - ], - "vars": {} - }, - "tag_Name_k14_-_c0m1": { - "children": [], - "hosts": [ - "10.219.134.179" - ], - "vars": {} - }, - "tag_Name_k14_-_idx1": { - "children": [], - "hosts": [ - "10.219.35.86", - "54.84.156.195" - ], - "vars": {} - }, - "tag_Name_k14_-_idx2": { - "children": [], - "hosts": [ - "10.219.83.87", - "54.85.175.102" - ], - "vars": {} - }, - "tag_Name_k14_-_idx3": { - "children": [], - "hosts": [ - "10.219.155.57", - "54.85.37.235" - ], - "vars": {} - }, - "tag_Name_k14_-_lm1": { - "children": [], - "hosts": [ - "10.219.9.213" - ], - "vars": {} - }, - "tag_Name_k14_-_sh1": { - "children": [], - "hosts": [ - "10.219.141.55", - "54.86.54.174" - ], - "vars": {} - }, - "tag_Name_lyft_-_c0m1": { - "children": [], - "hosts": [ - "10.219.29.108" - ], - "vars": {} - }, - "tag_Name_lyft_-_idx1": { - "children": [], - "hosts": [ - "10.219.3.208", - "54.85.42.61" - ], - "vars": {} - }, - "tag_Name_lyft_-_idx2": { - "children": [], - "hosts": [ - "10.219.103.216", - "54.209.139.239" - ], - "vars": {} - }, - "tag_Name_lyft_-_idx3": { - "children": [], - "hosts": [ - "10.219.184.152", - "54.85.102.208" - ], - "vars": {} - }, - "tag_Name_lyft_-_lm1": { - "children": [], - "hosts": [ - "10.219.93.172" - ], - "vars": {} - }, - "tag_Name_lyft_-_sh1": { - "children": [], - "hosts": [ - "10.219.56.12", - "54.208.87.90" - ], - "vars": {} - }, - "tag_Name_marriott_-_c0m1": { - "children": [], - "hosts": [ - "10.219.179.164", - "54.84.222.7" - ], - "vars": {} - }, - "tag_Name_marriott_-_idx1": { - "children": [], - "hosts": [ - "10.219.11.12", - "54.84.125.108" - ], - "vars": {} - }, - "tag_Name_marriott_-_idx2": { - "children": [], - "hosts": [ - "10.219.105.247", - "54.84.185.247" - ], - "vars": {} - }, - "tag_Name_marriott_-_idx3": { - "children": [], - "hosts": [ - "10.219.136.17", - "54.84.164.99" - ], - "vars": {} - }, - "tag_Name_marriott_-_lm1": { - "children": [], - "hosts": [ - "10.219.98.192", - "54.84.206.192" - ], - "vars": {} - }, - "tag_Name_marriott_-_sh1": { - "children": [], - "hosts": [ - "10.219.136.66", - "54.84.199.223" - ], - "vars": {} - }, - "tag_Name_mckesson_-_c0m1": { - "children": [], - "hosts": [ - "10.219.85.120" - ], - "vars": {} - }, - "tag_Name_mckesson_-_idx1": { - "children": [], - "hosts": [ - "10.219.43.48", - "54.86.141.183" - ], - "vars": {} - }, - "tag_Name_mckesson_-_idx2": { - "children": [], - "hosts": [ - "10.219.64.89", - "54.86.103.185" - ], - "vars": {} - }, - "tag_Name_mckesson_-_idx3": { - "children": [], - "hosts": [ - "10.219.147.27", - "54.86.141.184" - ], - "vars": {} - }, - "tag_Name_mckesson_-_lm1": { - "children": [], - "hosts": [ - "10.219.132.76" - ], - "vars": {} - }, - "tag_Name_mckesson_-_sh1": { - "children": [], - "hosts": [ - "10.219.95.221", - "54.86.141.187" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_c0m1": { - "children": [], - "hosts": [ - "10.219.72.12" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_idx1": { - "children": [], - "hosts": [ - "10.219.51.0", - "54.86.119.45" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_idx2": { - "children": [], - "hosts": [ - "10.219.69.7", - "54.86.109.121" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_idx3": { - "children": [], - "hosts": [ - "10.219.165.236", - "54.86.109.129" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_lm1": { - "children": [], - "hosts": [ - "10.219.136.115" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_sh1": { - "children": [], - "hosts": [ - "10.219.101.208", - "54.86.112.246" - ], - "vars": {} - }, - "tag_Name_mindtouch_-_sh2": { - "children": [], - "hosts": [ - "10.219.152.142" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_c0m1": { - "children": [], - "hosts": [ - "10.219.112.202" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_idx1": { - "children": [], - "hosts": [ - "10.219.49.237", - "54.85.10.98" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_idx2": { - "children": [], - "hosts": [ - "10.219.103.26", - "54.84.228.141" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_idx3": { - "children": [], - "hosts": [ - "10.219.188.5", - "54.85.16.252" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_lm1": { - "children": [], - "hosts": [ - "10.219.40.115" - ], - "vars": {} - }, - "tag_Name_motionsoft_-_sh1": { - "children": [], - "hosts": [ - "10.219.81.130", - "54.85.65.51" - ], - "vars": {} - }, - "tag_Name_mregan_-_c0m1": { - "children": [], - "hosts": [ - "10.219.41.51" - ], - "vars": {} - }, - "tag_Name_mregan_-_idx1": { - "children": [], - "hosts": [ - "10.219.59.57" - ], - "vars": {} - }, - "tag_Name_mregan_-_idx2": { - "children": [], - "hosts": [ - "10.219.119.218" - ], - "vars": {} - }, - "tag_Name_mregan_-_idx3": { - "children": [], - "hosts": [ - "10.219.179.119" - ], - "vars": {} - }, - "tag_Name_mregan_-_lm1": { - "children": [], - "hosts": [ - "10.219.160.142" - ], - "vars": {} - }, - "tag_Name_mregan_-_sh1": { - "children": [], - "hosts": [ - "10.219.26.121" - ], - "vars": {} - }, - "tag_Name_nessus": { - "children": [], - "hosts": [ - "ec2-54-237-120-196.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_poc1_-_c0m1": { - "children": [], - "hosts": [ - "10.219.181.82" - ], - "vars": {} - }, - "tag_Name_poc1_-_idx1": { - "children": [], - "hosts": [ - "10.219.25.43", - "54.85.33.186" - ], - "vars": {} - }, - "tag_Name_poc1_-_idx2": { - "children": [], - "hosts": [ - "10.219.81.15", - "54.85.21.183" - ], - "vars": {} - }, - "tag_Name_poc1_-_idx3": { - "children": [], - "hosts": [ - "10.219.189.153", - "54.85.66.59" - ], - "vars": {} - }, - "tag_Name_poc1_-_lm1": { - "children": [], - "hosts": [ - "10.219.16.141" - ], - "vars": {} - }, - "tag_Name_poc1_-_sh1": { - "children": [], - "hosts": [ - "10.219.182.240", - "54.85.52.64" - ], - "vars": {} - }, - "tag_Name_poc2_-_c0m1": { - "children": [], - "hosts": [ - "10.219.118.63" - ], - "vars": {} - }, - "tag_Name_poc2_-_idx1": { - "children": [], - "hosts": [ - "10.219.32.233", - "54.85.53.103" - ], - "vars": {} - }, - "tag_Name_poc2_-_idx2": { - "children": [], - "hosts": [ - "10.219.100.34", - "54.84.252.121" - ], - "vars": {} - }, - "tag_Name_poc2_-_idx3": { - "children": [], - "hosts": [ - "10.219.131.134", - "54.85.32.12" - ], - "vars": {} - }, - "tag_Name_poc2_-_lm1": { - "children": [], - "hosts": [ - "10.219.146.30" - ], - "vars": {} - }, - "tag_Name_poc2_-_sh1": { - "children": [], - "hosts": [ - "10.219.85.37", - "54.85.28.140" - ], - "vars": {} - }, - "tag_Name_poc3_-_c0m1": { - "children": [], - "hosts": [ - "10.219.107.232" - ], - "vars": {} - }, - "tag_Name_poc3_-_idx1": { - "children": [], - "hosts": [ - "10.219.49.54", - "54.84.84.30" - ], - "vars": {} - }, - "tag_Name_poc3_-_idx2": { - "children": [], - "hosts": [ - "10.219.126.78", - "54.85.71.54" - ], - "vars": {} - }, - "tag_Name_poc3_-_idx3": { - "children": [], - "hosts": [ - "10.219.166.184", - "54.85.71.17" - ], - "vars": {} - }, - "tag_Name_poc3_-_lm1": { - "children": [], - "hosts": [ - "10.219.48.166" - ], - "vars": {} - }, - "tag_Name_poc3_-_sh1": { - "children": [], - "hosts": [ - "10.219.85.245", - "54.84.166.253" - ], - "vars": {} - }, - "tag_Name_poc4_-_c0m1": { - "children": [], - "hosts": [ - "10.219.137.198" - ], - "vars": {} - }, - "tag_Name_poc4_-_idx1": { - "children": [], - "hosts": [ - "10.219.43.57", - "54.85.69.157" - ], - "vars": {} - }, - "tag_Name_poc4_-_idx2": { - "children": [], - "hosts": [ - "10.219.72.93", - "54.84.170.133" - ], - "vars": {} - }, - "tag_Name_poc4_-_idx3": { - "children": [], - "hosts": [ - "10.219.177.243", - "54.85.45.216" - ], - "vars": {} - }, - "tag_Name_poc4_-_lm1": { - "children": [], - "hosts": [ - "10.219.12.85" - ], - "vars": {} - }, - "tag_Name_poc4_-_sh1": { - "children": [], - "hosts": [ - "10.219.150.111", - "54.85.69.123" - ], - "vars": {} - }, - "tag_Name_poc5_-_c0m1": { - "children": [], - "hosts": [ - "10.219.130.240", - "54.86.39.175" - ], - "vars": {} - }, - "tag_Name_poc5_-_idx1": { - "children": [], - "hosts": [ - "10.219.63.147", - "54.85.80.174" - ], - "vars": {} - }, - "tag_Name_poc5_-_idx2": { - "children": [], - "hosts": [ - "10.219.125.232", - "54.84.74.125" - ], - "vars": {} - }, - "tag_Name_poc5_-_idx3": { - "children": [], - "hosts": [ - "10.219.130.190", - "54.84.47.238" - ], - "vars": {} - }, - "tag_Name_poc5_-_lm1": { - "children": [], - "hosts": [ - "10.219.47.1", - "54.84.23.79" - ], - "vars": {} - }, - "tag_Name_poc5_-_sh1": { - "children": [], - "hosts": [ - "10.219.169.253", - "54.85.72.146" - ], - "vars": {} - }, - "tag_Name_prod-chef": { - "children": [], - "hosts": [ - "10.219.50.248", - "54.84.149.25" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_c0m1": { - "children": [], - "hosts": [ - "10.219.166.102", - "10.219.132.127", - "10.219.134.89", - "10.219.177.248", - "10.219.144.224" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_idx1": { - "children": [], - "hosts": [ - "10.219.58.233", - "10.219.2.175", - "10.219.4.252", - "10.219.16.214" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_idx2": { - "children": [], - "hosts": [ - "10.219.114.9", - "10.219.120.83", - "10.219.80.212", - "10.219.120.23", - "10.219.78.69", - "10.219.64.217" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_idx3": { - "children": [], - "hosts": [ - "10.219.174.231", - "10.219.130.19", - "10.219.148.67", - "10.219.182.219", - "10.219.177.150" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_lm1": { - "children": [], - "hosts": [ - "10.219.111.13", - "10.219.111.100", - "10.219.91.91", - "10.219.118.52", - "10.219.115.245", - "10.219.100.237" - ], - "vars": {} - }, - "tag_Name_prod-monitor-red_-_sh1": { - "children": [], - "hosts": [ - "10.219.167.181", - "10.219.152.208", - "10.219.161.188", - "10.219.154.235" - ], - "vars": {} - }, - "tag_Name_prod_infra_test": { - "children": [], - "hosts": [ - "10.217.79.144" - ], - "vars": {} - }, - "tag_Name_sc-vpc-nat": { - "children": [], - "hosts": [ - "10.219.23.181", - "54.208.124.14" - ], - "vars": {} - }, - "tag_Name_sc-vpc-nat__subnet_2_": { - "children": [], - "hosts": [ - "10.219.123.163", - "54.84.41.152" - ], - "vars": {} - }, - "tag_Name_sc-vpc-nat__subnet_3_": { - "children": [], - "hosts": [ - "10.219.164.166", - "54.84.37.150" - ], - "vars": {} - }, - "tag_Name_security-test_-_c0m1": { - "children": [], - "hosts": [ - "ec2-54-204-188-107.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_security-test_-_idx1": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_security-test_-_idx2": { - "children": [], - "hosts": [ - "ec2-23-22-96-198.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_security-test_-_lm1": { - "children": [], - "hosts": [ - "ec2-54-205-127-141.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_security-test_-_sh1": { - "children": [], - "hosts": [ - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_skynet_-_c0m1": { - "children": [], - "hosts": [ - "10.219.115.77" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx1": { - "children": [], - "hosts": [ - "10.219.1.1", - "54.85.146.9" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx2": { - "children": [], - "hosts": [ - "10.219.90.109", - "54.85.157.183" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx3": { - "children": [], - "hosts": [ - "10.219.186.171", - "54.84.189.79" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx4": { - "children": [], - "hosts": [ - "10.219.2.93", - "54.86.23.145" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx5": { - "children": [], - "hosts": [ - "10.219.103.178", - "54.86.51.77" - ], - "vars": {} - }, - "tag_Name_skynet_-_idx6": { - "children": [], - "hosts": [ - "10.219.173.21", - "54.84.75.99" - ], - "vars": {} - }, - "tag_Name_skynet_-_lm1": { - "children": [], - "hosts": [ - "10.219.0.222" - ], - "vars": {} - }, - "tag_Name_skynet_-_sh1": { - "children": [], - "hosts": [ - "10.219.92.169" - ], - "vars": {} - }, - "tag_Name_skynet_-_sh2": { - "children": [], - "hosts": [ - "10.219.12.148" - ], - "vars": {} - }, - "tag_Name_skynet_-_sh3": { - "children": [], - "hosts": [ - "10.219.132.135" - ], - "vars": {} - }, - "tag_Name_sonos_-_c0m1": { - "children": [], - "hosts": [ - "10.219.39.194" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx1": { - "children": [], - "hosts": [ - "10.219.36.235", - "54.86.10.255" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx2": { - "children": [], - "hosts": [ - "10.219.84.189", - "54.86.81.117" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx3": { - "children": [], - "hosts": [ - "10.219.150.186", - "54.86.89.139" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx4": { - "children": [], - "hosts": [ - "10.219.56.91", - "54.86.48.214" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx5": { - "children": [], - "hosts": [ - "10.219.71.223", - "54.86.88.208" - ], - "vars": {} - }, - "tag_Name_sonos_-_idx6": { - "children": [], - "hosts": [ - "10.219.175.103", - "54.86.56.174" - ], - "vars": {} - }, - "tag_Name_sonos_-_lm1": { - "children": [], - "hosts": [ - "10.219.154.60" - ], - "vars": {} - }, - "tag_Name_sonos_-_sh1": { - "children": [], - "hosts": [ - "10.219.56.44", - "54.86.80.199" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_c0m1": { - "children": [], - "hosts": [ - "10.219.152.52" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_idx1": { - "children": [], - "hosts": [ - "10.219.25.147" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_idx2": { - "children": [], - "hosts": [ - "10.219.114.174" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_idx3": { - "children": [], - "hosts": [ - "10.219.188.151" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_lm1": { - "children": [], - "hosts": [ - "10.219.29.254" - ], - "vars": {} - }, - "tag_Name_splunk-sfdc_-_sh1": { - "children": [], - "hosts": [ - "10.219.161.118" - ], - "vars": {} - }, - "tag_Name_spm1_-_c0m1": { - "children": [], - "hosts": [ - "10.219.91.14" - ], - "vars": {} - }, - "tag_Name_spm1_-_idx1": { - "children": [], - "hosts": [ - "10.219.31.47", - "54.84.207.241" - ], - "vars": {} - }, - "tag_Name_spm1_-_idx2": { - "children": [], - "hosts": [ - "10.219.65.35", - "54.84.191.190" - ], - "vars": {} - }, - "tag_Name_spm1_-_idx3": { - "children": [], - "hosts": [ - "10.219.173.45", - "54.85.34.98" - ], - "vars": {} - }, - "tag_Name_spm1_-_lm1": { - "children": [], - "hosts": [ - "10.219.128.227" - ], - "vars": {} - }, - "tag_Name_spm1_-_sh1": { - "children": [], - "hosts": [ - "10.219.107.101", - "54.84.245.20" - ], - "vars": {} - }, - "tag_Name_stackmakr-corp_-_exec03": { - "children": [], - "hosts": [ - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_stackmakr-corp_-_jenkins01": { - "children": [], - "hosts": [ - "ec2-54-205-251-95.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-blue_-_jenkins01": { - "children": [], - "hosts": [ - "ec2-54-221-223-232.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec01": { - "children": [], - "hosts": [ - "ec2-54-204-191-195.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec02": { - "children": [], - "hosts": [ - "ec2-50-17-62-124.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-blue_-_ops-blue-exec03__vpc_2_": { - "children": [], - "hosts": [ - "10.219.14.89", - "54.208.96.71" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-red_-_jenkins01": { - "children": [], - "hosts": [ - "10.219.26.182" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-red_-_ops-red-exec01": { - "children": [], - "hosts": [ - "10.219.33.86" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-red_-_ops-red-exec02": { - "children": [], - "hosts": [ - "10.219.57.225" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-red_-_ops-red-exec03": { - "children": [], - "hosts": [ - "10.219.164.210" - ], - "vars": {} - }, - "tag_Name_stackmakr-ops-red_-_ops-red-exec04": { - "children": [], - "hosts": [ - "10.219.161.181" - ], - "vars": {} - }, - "tag_Name_take2_-_c0m1": { - "children": [], - "hosts": [ - "10.219.53.81" - ], - "vars": {} - }, - "tag_Name_take2_-_idx1": { - "children": [], - "hosts": [ - "10.219.61.154", - "54.84.92.185" - ], - "vars": {} - }, - "tag_Name_take2_-_idx2": { - "children": [], - "hosts": [ - "10.219.86.78", - "54.84.87.73" - ], - "vars": {} - }, - "tag_Name_take2_-_idx3": { - "children": [], - "hosts": [ - "10.219.134.206", - "54.84.84.233" - ], - "vars": {} - }, - "tag_Name_take2_-_lm1": { - "children": [], - "hosts": [ - "10.219.47.252" - ], - "vars": {} - }, - "tag_Name_take2_-_sh1": { - "children": [], - "hosts": [ - "10.219.92.102", - "54.84.65.195" - ], - "vars": {} - }, - "tag_Name_tower": { - "children": [], - "hosts": [ - "10.219.129.226", - "54.86.101.162" - ], - "vars": {} - }, - "tag_Name_trial605_-_c0m1": { - "children": [], - "hosts": [ - "10.219.26.28" - ], - "vars": {} - }, - "tag_Name_trial605_-_idx1": { - "children": [], - "hosts": [ - "10.219.60.102", - "54.85.14.238" - ], - "vars": {} - }, - "tag_Name_trial605_-_idx2": { - "children": [], - "hosts": [ - "10.219.81.29", - "54.86.40.17" - ], - "vars": {} - }, - "tag_Name_trial605_-_idx3": { - "children": [], - "hosts": [ - "10.219.178.85", - "54.85.75.200" - ], - "vars": {} - }, - "tag_Name_trial605_-_lm1": { - "children": [], - "hosts": [ - "10.219.108.141" - ], - "vars": {} - }, - "tag_Name_trial605_-_sh1": { - "children": [], - "hosts": [ - "10.219.39.9", - "54.86.57.201" - ], - "vars": {} - }, - "tag_Name_trial606_-_c0m1": { - "children": [], - "hosts": [ - "10.219.11.70" - ], - "vars": {} - }, - "tag_Name_trial606_-_idx1": { - "children": [], - "hosts": [ - "10.219.16.66", - "54.84.163.82" - ], - "vars": {} - }, - "tag_Name_trial606_-_idx2": { - "children": [], - "hosts": [ - "10.219.100.175", - "54.84.251.0" - ], - "vars": {} - }, - "tag_Name_trial606_-_idx3": { - "children": [], - "hosts": [ - "10.219.142.79", - "54.208.228.127" - ], - "vars": {} - }, - "tag_Name_trial606_-_lm1": { - "children": [], - "hosts": [ - "10.219.158.176" - ], - "vars": {} - }, - "tag_Name_trial606_-_sh1": { - "children": [], - "hosts": [ - "10.219.5.147", - "54.85.87.129" - ], - "vars": {} - }, - "tag_Name_trial607_-_c0m1": { - "children": [], - "hosts": [ - "10.219.41.67" - ], - "vars": {} - }, - "tag_Name_trial607_-_idx1": { - "children": [], - "hosts": [ - "10.219.18.78", - "54.86.90.142" - ], - "vars": {} - }, - "tag_Name_trial607_-_idx2": { - "children": [], - "hosts": [ - "10.219.98.173", - "54.86.90.177" - ], - "vars": {} - }, - "tag_Name_trial607_-_idx3": { - "children": [], - "hosts": [ - "10.219.147.74", - "54.86.90.152" - ], - "vars": {} - }, - "tag_Name_trial607_-_lm1": { - "children": [], - "hosts": [ - "10.219.185.71" - ], - "vars": {} - }, - "tag_Name_trial607_-_sh1": { - "children": [], - "hosts": [ - "10.219.62.192", - "54.86.90.15" - ], - "vars": {} - }, - "tag_Name_trial608_-_idx1": { - "children": [], - "hosts": [ - "54.85.161.87" - ], - "vars": {} - }, - "tag_Name_trial608_-_idx2": { - "children": [], - "hosts": [ - "54.85.199.140" - ], - "vars": {} - }, - "tag_Name_trial608_-_idx3": { - "children": [], - "hosts": [ - "54.208.59.237" - ], - "vars": {} - }, - "tag_Name_trial608_-_sh1": { - "children": [], - "hosts": [ - "54.85.90.7" - ], - "vars": {} - }, - "tag_Name_trial609_-_c0m1": { - "children": [], - "hosts": [ - "10.219.155.180" - ], - "vars": {} - }, - "tag_Name_trial609_-_idx1": { - "children": [], - "hosts": [ - "10.219.17.208", - "54.208.141.20" - ], - "vars": {} - }, - "tag_Name_trial609_-_idx2": { - "children": [], - "hosts": [ - "10.219.67.120", - "54.209.108.61" - ], - "vars": {} - }, - "tag_Name_trial609_-_idx3": { - "children": [], - "hosts": [ - "10.219.185.186", - "54.209.120.55" - ], - "vars": {} - }, - "tag_Name_trial609_-_lm1": { - "children": [], - "hosts": [ - "10.219.103.150" - ], - "vars": {} - }, - "tag_Name_trial609_-_sh1": { - "children": [], - "hosts": [ - "10.219.154.115", - "54.208.210.176" - ], - "vars": {} - }, - "tag_Name_trial610_-_idx1": { - "children": [], - "hosts": [ - "54.84.169.33" - ], - "vars": {} - }, - "tag_Name_trial610_-_idx2": { - "children": [], - "hosts": [ - "54.84.192.78" - ], - "vars": {} - }, - "tag_Name_trial610_-_idx3": { - "children": [], - "hosts": [ - "54.209.106.125" - ], - "vars": {} - }, - "tag_Name_trial610_-_sh1": { - "children": [], - "hosts": [ - "54.84.240.188" - ], - "vars": {} - }, - "tag_Name_trial611_-_c0m1": { - "children": [], - "hosts": [ - "10.219.30.68" - ], - "vars": {} - }, - "tag_Name_trial611_-_idx1": { - "children": [], - "hosts": [ - "10.219.57.108", - "54.85.48.128" - ], - "vars": {} - }, - "tag_Name_trial611_-_idx2": { - "children": [], - "hosts": [ - "10.219.89.90", - "54.85.27.197" - ], - "vars": {} - }, - "tag_Name_trial611_-_idx3": { - "children": [], - "hosts": [ - "10.219.133.48", - "54.85.208.32" - ], - "vars": {} - }, - "tag_Name_trial611_-_lm1": { - "children": [], - "hosts": [ - "10.219.111.113" - ], - "vars": {} - }, - "tag_Name_trial611_-_sh1": { - "children": [], - "hosts": [ - "10.219.56.242", - "54.84.21.94" - ], - "vars": {} - }, - "tag_Name_trial612_-_c0m1": { - "children": [], - "hosts": [ - "10.219.140.138" - ], - "vars": {} - }, - "tag_Name_trial612_-_idx1": { - "children": [], - "hosts": [ - "10.219.11.190", - "54.85.53.185" - ], - "vars": {} - }, - "tag_Name_trial612_-_idx2": { - "children": [], - "hosts": [ - "10.219.90.205", - "54.86.76.41" - ], - "vars": {} - }, - "tag_Name_trial612_-_idx3": { - "children": [], - "hosts": [ - "10.219.178.84", - "54.86.75.36" - ], - "vars": {} - }, - "tag_Name_trial612_-_lm1": { - "children": [], - "hosts": [ - "10.219.36.102" - ], - "vars": {} - }, - "tag_Name_trial612_-_sh1": { - "children": [], - "hosts": [ - "10.219.155.123", - "54.84.114.2" - ], - "vars": {} - }, - "tag_Name_trial613_-_c0m1": { - "children": [], - "hosts": [ - "10.219.85.43" - ], - "vars": {} - }, - "tag_Name_trial613_-_idx1": { - "children": [], - "hosts": [ - "10.219.16.89", - "54.86.102.132" - ], - "vars": {} - }, - "tag_Name_trial613_-_idx2": { - "children": [], - "hosts": [ - "10.219.114.207", - "54.86.110.115" - ], - "vars": {} - }, - "tag_Name_trial613_-_idx3": { - "children": [], - "hosts": [ - "10.219.149.40", - "54.86.110.180" - ], - "vars": {} - }, - "tag_Name_trial613_-_lm1": { - "children": [], - "hosts": [ - "10.219.142.242" - ], - "vars": {} - }, - "tag_Name_trial613_-_sh1": { - "children": [], - "hosts": [ - "10.219.79.196", - "54.86.52.195" - ], - "vars": {} - }, - "tag_Name_trial614_-_c0m1": { - "children": [], - "hosts": [ - "10.219.81.201" - ], - "vars": {} - }, - "tag_Name_trial614_-_idx1": { - "children": [], - "hosts": [ - "10.219.18.12", - "54.86.103.5" - ], - "vars": {} - }, - "tag_Name_trial614_-_idx2": { - "children": [], - "hosts": [ - "10.219.94.27", - "54.86.104.18" - ], - "vars": {} - }, - "tag_Name_trial614_-_idx3": { - "children": [], - "hosts": [ - "10.219.180.178", - "54.86.105.40" - ], - "vars": {} - }, - "tag_Name_trial614_-_lm1": { - "children": [], - "hosts": [ - "10.219.19.226" - ], - "vars": {} - }, - "tag_Name_trial614_-_sh1": { - "children": [], - "hosts": [ - "10.219.117.252", - "54.86.94.75" - ], - "vars": {} - }, - "tag_Name_trial615_-_c0m1": { - "children": [], - "hosts": [ - "10.219.137.205" - ], - "vars": {} - }, - "tag_Name_trial615_-_idx1": { - "children": [], - "hosts": [ - "10.219.12.146", - "54.85.200.49" - ], - "vars": {} - }, - "tag_Name_trial615_-_idx2": { - "children": [], - "hosts": [ - "10.219.86.47", - "54.85.119.67" - ], - "vars": {} - }, - "tag_Name_trial615_-_idx3": { - "children": [], - "hosts": [ - "10.219.145.106", - "54.85.95.0" - ], - "vars": {} - }, - "tag_Name_trial615_-_lm1": { - "children": [], - "hosts": [ - "10.219.15.194" - ], - "vars": {} - }, - "tag_Name_trial615_-_sh1": { - "children": [], - "hosts": [ - "10.219.138.98", - "54.208.45.55" - ], - "vars": {} - }, - "tag_Name_trial616_-_c0m1": { - "children": [], - "hosts": [ - "10.219.92.64" - ], - "vars": {} - }, - "tag_Name_trial616_-_idx1": { - "children": [], - "hosts": [ - "10.219.2.224", - "54.209.204.12" - ], - "vars": {} - }, - "tag_Name_trial616_-_idx2": { - "children": [], - "hosts": [ - "10.219.89.30", - "54.209.203.222" - ], - "vars": {} - }, - "tag_Name_trial616_-_idx3": { - "children": [], - "hosts": [ - "10.219.154.12", - "54.85.223.164" - ], - "vars": {} - }, - "tag_Name_trial616_-_lm1": { - "children": [], - "hosts": [ - "10.219.48.124" - ], - "vars": {} - }, - "tag_Name_trial616_-_sh1": { - "children": [], - "hosts": [ - "10.219.85.31", - "54.209.14.115" - ], - "vars": {} - }, - "tag_Name_trial617_-_c0m1": { - "children": [], - "hosts": [ - "10.219.180.244" - ], - "vars": {} - }, - "tag_Name_trial617_-_idx1": { - "children": [], - "hosts": [ - "10.219.14.143", - "54.84.54.49" - ], - "vars": {} - }, - "tag_Name_trial617_-_idx2": { - "children": [], - "hosts": [ - "10.219.122.228", - "54.85.249.26" - ], - "vars": {} - }, - "tag_Name_trial617_-_idx3": { - "children": [], - "hosts": [ - "10.219.130.1", - "54.85.166.231" - ], - "vars": {} - }, - "tag_Name_trial617_-_lm1": { - "children": [], - "hosts": [ - "10.219.4.55" - ], - "vars": {} - }, - "tag_Name_trial617_-_sh1": { - "children": [], - "hosts": [ - "10.219.169.68", - "54.84.245.162" - ], - "vars": {} - }, - "tag_Name_trial618_-_c0m1": { - "children": [], - "hosts": [ - "10.219.60.118" - ], - "vars": {} - }, - "tag_Name_trial618_-_idx1": { - "children": [], - "hosts": [ - "10.219.41.191", - "54.86.53.153" - ], - "vars": {} - }, - "tag_Name_trial618_-_idx2": { - "children": [], - "hosts": [ - "10.219.64.87", - "54.86.89.186" - ], - "vars": {} - }, - "tag_Name_trial618_-_idx3": { - "children": [], - "hosts": [ - "10.219.147.63", - "54.86.81.21" - ], - "vars": {} - }, - "tag_Name_trial618_-_lm1": { - "children": [], - "hosts": [ - "10.219.173.37" - ], - "vars": {} - }, - "tag_Name_trial618_-_sh1": { - "children": [], - "hosts": [ - "10.219.41.230", - "54.86.74.37" - ], - "vars": {} - }, - "tag_Name_trial619_-_c0m1": { - "children": [], - "hosts": [ - "10.219.45.70" - ], - "vars": {} - }, - "tag_Name_trial619_-_idx1": { - "children": [], - "hosts": [ - "10.219.36.162", - "54.86.117.163" - ], - "vars": {} - }, - "tag_Name_trial619_-_idx2": { - "children": [], - "hosts": [ - "10.219.96.145", - "54.86.111.80" - ], - "vars": {} - }, - "tag_Name_trial619_-_idx3": { - "children": [], - "hosts": [ - "10.219.177.41", - "54.86.117.162" - ], - "vars": {} - }, - "tag_Name_trial619_-_lm1": { - "children": [], - "hosts": [ - "10.219.154.211" - ], - "vars": {} - }, - "tag_Name_trial619_-_sh1": { - "children": [], - "hosts": [ - "10.219.56.83", - "54.86.117.161" - ], - "vars": {} - }, - "tag_Name_trial620_-_c0m1": { - "children": [], - "hosts": [ - "10.219.121.80" - ], - "vars": {} - }, - "tag_Name_trial620_-_idx1": { - "children": [], - "hosts": [ - "10.219.48.23", - "54.85.135.14" - ], - "vars": {} - }, - "tag_Name_trial620_-_idx2": { - "children": [], - "hosts": [ - "10.219.109.92", - "54.84.103.10" - ], - "vars": {} - }, - "tag_Name_trial620_-_idx3": { - "children": [], - "hosts": [ - "10.219.143.130", - "54.208.12.112" - ], - "vars": {} - }, - "tag_Name_trial620_-_lm1": { - "children": [], - "hosts": [ - "10.219.54.28" - ], - "vars": {} - }, - "tag_Name_trial620_-_sh1": { - "children": [], - "hosts": [ - "10.219.109.28", - "54.209.76.22" - ], - "vars": {} - }, - "tag_Name_trial621_-_c0m1": { - "children": [], - "hosts": [ - "10.219.143.228" - ], - "vars": {} - }, - "tag_Name_trial621_-_idx1": { - "children": [], - "hosts": [ - "10.219.47.118", - "54.209.74.106" - ], - "vars": {} - }, - "tag_Name_trial621_-_idx2": { - "children": [], - "hosts": [ - "10.219.88.75", - "54.208.187.98" - ], - "vars": {} - }, - "tag_Name_trial621_-_idx3": { - "children": [], - "hosts": [ - "10.219.187.178", - "54.85.85.59" - ], - "vars": {} - }, - "tag_Name_trial621_-_lm1": { - "children": [], - "hosts": [ - "10.219.97.207" - ], - "vars": {} - }, - "tag_Name_trial621_-_sh1": { - "children": [], - "hosts": [ - "10.219.154.203", - "54.85.48.70" - ], - "vars": {} - }, - "tag_Name_trial622_-_c0m1": { - "children": [], - "hosts": [ - "10.219.43.2" - ], - "vars": {} - }, - "tag_Name_trial622_-_idx1": { - "children": [], - "hosts": [ - "10.219.63.67", - "54.85.84.167" - ], - "vars": {} - }, - "tag_Name_trial622_-_idx2": { - "children": [], - "hosts": [ - "10.219.68.47", - "54.209.108.176" - ], - "vars": {} - }, - "tag_Name_trial622_-_idx3": { - "children": [], - "hosts": [ - "10.219.163.166", - "54.85.47.154" - ], - "vars": {} - }, - "tag_Name_trial622_-_lm1": { - "children": [], - "hosts": [ - "10.219.184.234" - ], - "vars": {} - }, - "tag_Name_trial622_-_sh1": { - "children": [], - "hosts": [ - "10.219.39.144", - "54.209.127.172" - ], - "vars": {} - }, - "tag_Name_trial623_-_c0m1": { - "children": [], - "hosts": [ - "10.219.39.139" - ], - "vars": {} - }, - "tag_Name_trial623_-_idx1": { - "children": [], - "hosts": [ - "10.219.37.47", - "54.85.61.212" - ], - "vars": {} - }, - "tag_Name_trial623_-_idx2": { - "children": [], - "hosts": [ - "10.219.78.42", - "54.85.173.90" - ], - "vars": {} - }, - "tag_Name_trial623_-_idx3": { - "children": [], - "hosts": [ - "10.219.146.42", - "54.85.255.219" - ], - "vars": {} - }, - "tag_Name_trial623_-_lm1": { - "children": [], - "hosts": [ - "10.219.136.13" - ], - "vars": {} - }, - "tag_Name_trial623_-_sh1": { - "children": [], - "hosts": [ - "10.219.25.26", - "54.84.190.144" - ], - "vars": {} - }, - "tag_Name_trial624_-_idx1": { - "children": [], - "hosts": [ - "54.84.174.209" - ], - "vars": {} - }, - "tag_Name_trial624_-_idx2": { - "children": [], - "hosts": [ - "54.85.160.181" - ], - "vars": {} - }, - "tag_Name_trial624_-_idx3": { - "children": [], - "hosts": [ - "54.85.44.185" - ], - "vars": {} - }, - "tag_Name_trial624_-_sh1": { - "children": [], - "hosts": [ - "54.208.89.118" - ], - "vars": {} - }, - "tag_Name_trial625_-_c0m1": { - "children": [], - "hosts": [ - "10.219.169.135" - ], - "vars": {} - }, - "tag_Name_trial625_-_idx1": { - "children": [], - "hosts": [ - "10.219.37.213", - "54.86.117.236" - ], - "vars": {} - }, - "tag_Name_trial625_-_idx2": { - "children": [], - "hosts": [ - "10.219.111.126", - "54.86.116.199" - ], - "vars": {} - }, - "tag_Name_trial625_-_idx3": { - "children": [], - "hosts": [ - "10.219.142.152", - "54.86.117.237" - ], - "vars": {} - }, - "tag_Name_trial625_-_lm1": { - "children": [], - "hosts": [ - "10.219.36.26" - ], - "vars": {} - }, - "tag_Name_trial625_-_sh1": { - "children": [], - "hosts": [ - "10.219.138.185", - "54.86.116.105" - ], - "vars": {} - }, - "tag_Name_trial626_-_c0m1": { - "children": [], - "hosts": [ - "10.219.9.203" - ], - "vars": {} - }, - "tag_Name_trial626_-_idx1": { - "children": [], - "hosts": [ - "10.219.24.179", - "54.86.82.149" - ], - "vars": {} - }, - "tag_Name_trial626_-_idx2": { - "children": [], - "hosts": [ - "10.219.77.13", - "54.86.87.25" - ], - "vars": {} - }, - "tag_Name_trial626_-_idx3": { - "children": [], - "hosts": [ - "10.219.173.38", - "54.86.77.91" - ], - "vars": {} - }, - "tag_Name_trial626_-_lm1": { - "children": [], - "hosts": [ - "10.219.66.9" - ], - "vars": {} - }, - "tag_Name_trial626_-_sh1": { - "children": [], - "hosts": [ - "10.219.59.159", - "54.86.71.155" - ], - "vars": {} - }, - "tag_Name_trial627_-_c0m1": { - "children": [], - "hosts": [ - "10.219.119.127" - ], - "vars": {} - }, - "tag_Name_trial627_-_idx1": { - "children": [], - "hosts": [ - "10.219.53.83", - "54.86.97.227" - ], - "vars": {} - }, - "tag_Name_trial627_-_idx2": { - "children": [], - "hosts": [ - "10.219.118.148", - "54.86.97.181" - ], - "vars": {} - }, - "tag_Name_trial627_-_idx3": { - "children": [], - "hosts": [ - "10.219.128.18", - "54.85.75.4" - ], - "vars": {} - }, - "tag_Name_trial627_-_lm1": { - "children": [], - "hosts": [ - "10.219.25.150" - ], - "vars": {} - }, - "tag_Name_trial627_-_sh1": { - "children": [], - "hosts": [ - "10.219.109.144", - "54.86.97.144" - ], - "vars": {} - }, - "tag_Name_trial628_-_c0m1": { - "children": [], - "hosts": [ - "10.219.123.229" - ], - "vars": {} - }, - "tag_Name_trial628_-_idx1": { - "children": [], - "hosts": [ - "10.219.27.75", - "54.86.90.204" - ], - "vars": {} - }, - "tag_Name_trial628_-_idx2": { - "children": [], - "hosts": [ - "10.219.73.211", - "54.86.92.153" - ], - "vars": {} - }, - "tag_Name_trial628_-_idx3": { - "children": [], - "hosts": [ - "10.219.155.112", - "54.86.78.51" - ], - "vars": {} - }, - "tag_Name_trial628_-_lm1": { - "children": [], - "hosts": [ - "10.219.129.154" - ], - "vars": {} - }, - "tag_Name_trial628_-_sh1": { - "children": [], - "hosts": [ - "10.219.114.130", - "54.86.91.120" - ], - "vars": {} - }, - "tag_Name_trial629_-_c0m1": { - "children": [], - "hosts": [ - "10.219.63.214" - ], - "vars": {} - }, - "tag_Name_trial629_-_idx1": { - "children": [], - "hosts": [ - "10.219.32.78", - "54.86.97.73" - ], - "vars": {} - }, - "tag_Name_trial629_-_idx2": { - "children": [], - "hosts": [ - "10.219.75.209", - "54.86.60.192" - ], - "vars": {} - }, - "tag_Name_trial629_-_idx3": { - "children": [], - "hosts": [ - "10.219.152.253", - "54.85.196.193" - ], - "vars": {} - }, - "tag_Name_trial629_-_lm1": { - "children": [], - "hosts": [ - "10.219.161.92" - ], - "vars": {} - }, - "tag_Name_trial629_-_sh1": { - "children": [], - "hosts": [ - "10.219.2.72", - "54.86.97.67" - ], - "vars": {} - }, - "tag_Name_trial630_-_c0m1": { - "children": [], - "hosts": [ - "10.219.150.33" - ], - "vars": {} - }, - "tag_Name_trial630_-_idx1": { - "children": [], - "hosts": [ - "10.219.10.200", - "54.85.193.223" - ], - "vars": {} - }, - "tag_Name_trial630_-_idx2": { - "children": [], - "hosts": [ - "10.219.114.210", - "54.86.76.239" - ], - "vars": {} - }, - "tag_Name_trial630_-_idx3": { - "children": [], - "hosts": [ - "10.219.185.101", - "54.84.199.152" - ], - "vars": {} - }, - "tag_Name_trial630_-_lm1": { - "children": [], - "hosts": [ - "10.219.75.150" - ], - "vars": {} - }, - "tag_Name_trial630_-_sh1": { - "children": [], - "hosts": [ - "10.219.163.151", - "54.86.55.72" - ], - "vars": {} - }, - "tag_Name_trial631_-_c0m1": { - "children": [], - "hosts": [ - "10.219.27.228" - ], - "vars": {} - }, - "tag_Name_trial631_-_idx1": { - "children": [], - "hosts": [ - "10.219.20.248", - "54.85.149.164" - ], - "vars": {} - }, - "tag_Name_trial631_-_idx2": { - "children": [], - "hosts": [ - "10.219.78.250", - "54.86.8.229" - ], - "vars": {} - }, - "tag_Name_trial631_-_idx3": { - "children": [], - "hosts": [ - "10.219.142.223", - "54.85.207.233" - ], - "vars": {} - }, - "tag_Name_trial631_-_lm1": { - "children": [], - "hosts": [ - "10.219.68.180" - ], - "vars": {} - }, - "tag_Name_trial631_-_sh1": { - "children": [], - "hosts": [ - "10.219.53.235", - "54.86.97.174" - ], - "vars": {} - }, - "tag_Name_trial632_-_c0m1": { - "children": [], - "hosts": [ - "10.219.137.67" - ], - "vars": {} - }, - "tag_Name_trial632_-_idx1": { - "children": [], - "hosts": [ - "10.219.47.66", - "54.86.94.149" - ], - "vars": {} - }, - "tag_Name_trial632_-_idx2": { - "children": [], - "hosts": [ - "10.219.110.47", - "54.86.93.172" - ], - "vars": {} - }, - "tag_Name_trial632_-_idx3": { - "children": [], - "hosts": [ - "10.219.137.49", - "54.84.81.3" - ], - "vars": {} - }, - "tag_Name_trial632_-_lm1": { - "children": [], - "hosts": [ - "10.219.52.205" - ], - "vars": {} - }, - "tag_Name_trial632_-_sh1": { - "children": [], - "hosts": [ - "10.219.185.140", - "54.86.88.52" - ], - "vars": {} - }, - "tag_Name_trial633_-_c0m1": { - "children": [], - "hosts": [ - "10.219.40.153" - ], - "vars": {} - }, - "tag_Name_trial633_-_idx1": { - "children": [], - "hosts": [ - "10.219.5.136", - "54.86.96.151" - ], - "vars": {} - }, - "tag_Name_trial633_-_idx2": { - "children": [], - "hosts": [ - "10.219.68.40", - "54.86.97.99" - ], - "vars": {} - }, - "tag_Name_trial633_-_idx3": { - "children": [], - "hosts": [ - "10.219.191.53", - "54.86.99.19" - ], - "vars": {} - }, - "tag_Name_trial633_-_lm1": { - "children": [], - "hosts": [ - "10.219.119.27" - ], - "vars": {} - }, - "tag_Name_trial633_-_sh1": { - "children": [], - "hosts": [ - "10.219.13.250", - "54.86.98.67" - ], - "vars": {} - }, - "tag_Name_trial634_-_c0m1": { - "children": [], - "hosts": [ - "10.219.187.219" - ], - "vars": {} - }, - "tag_Name_trial634_-_idx1": { - "children": [], - "hosts": [ - "10.219.20.163", - "54.86.100.62" - ], - "vars": {} - }, - "tag_Name_trial634_-_idx2": { - "children": [], - "hosts": [ - "10.219.97.127", - "54.86.99.25" - ], - "vars": {} - }, - "tag_Name_trial634_-_idx3": { - "children": [], - "hosts": [ - "10.219.136.200", - "54.85.11.117" - ], - "vars": {} - }, - "tag_Name_trial634_-_lm1": { - "children": [], - "hosts": [ - "10.219.11.33" - ], - "vars": {} - }, - "tag_Name_trial634_-_sh1": { - "children": [], - "hosts": [ - "10.219.183.41", - "54.86.98.158" - ], - "vars": {} - }, - "tag_Name_trial635_-_c0m1": { - "children": [], - "hosts": [ - "10.219.183.205" - ], - "vars": {} - }, - "tag_Name_trial635_-_idx1": { - "children": [], - "hosts": [ - "10.219.5.238", - "54.86.112.96" - ], - "vars": {} - }, - "tag_Name_trial635_-_idx2": { - "children": [], - "hosts": [ - "10.219.91.109", - "54.86.111.203" - ], - "vars": {} - }, - "tag_Name_trial635_-_idx3": { - "children": [], - "hosts": [ - "10.219.166.38", - "54.86.111.175" - ], - "vars": {} - }, - "tag_Name_trial635_-_lm1": { - "children": [], - "hosts": [ - "10.219.127.169" - ], - "vars": {} - }, - "tag_Name_trial635_-_sh1": { - "children": [], - "hosts": [ - "10.219.134.176", - "54.86.111.172" - ], - "vars": {} - }, - "tag_Name_trial636_-_c0m1": { - "children": [], - "hosts": [ - "10.219.165.155" - ], - "vars": {} - }, - "tag_Name_trial636_-_idx1": { - "children": [], - "hosts": [ - "10.219.49.11", - "54.86.50.215" - ], - "vars": {} - }, - "tag_Name_trial636_-_idx2": { - "children": [], - "hosts": [ - "10.219.121.158", - "54.85.148.231" - ], - "vars": {} - }, - "tag_Name_trial636_-_idx3": { - "children": [], - "hosts": [ - "10.219.138.5", - "54.85.248.82" - ], - "vars": {} - }, - "tag_Name_trial636_-_lm1": { - "children": [], - "hosts": [ - "10.219.79.157" - ], - "vars": {} - }, - "tag_Name_trial636_-_sh1": { - "children": [], - "hosts": [ - "10.219.153.9", - "54.85.170.154" - ], - "vars": {} - }, - "tag_Name_trial637_-_c0m1": { - "children": [], - "hosts": [ - "10.219.162.164" - ], - "vars": {} - }, - "tag_Name_trial637_-_idx1": { - "children": [], - "hosts": [ - "10.219.32.235", - "54.86.112.106" - ], - "vars": {} - }, - "tag_Name_trial637_-_idx2": { - "children": [], - "hosts": [ - "10.219.115.61", - "54.86.112.135" - ], - "vars": {} - }, - "tag_Name_trial637_-_idx3": { - "children": [], - "hosts": [ - "10.219.167.0", - "54.86.3.216" - ], - "vars": {} - }, - "tag_Name_trial637_-_lm1": { - "children": [], - "hosts": [ - "10.219.36.177" - ], - "vars": {} - }, - "tag_Name_trial637_-_sh1": { - "children": [], - "hosts": [ - "10.219.159.21", - "54.86.112.102" - ], - "vars": {} - }, - "tag_Name_trial638_-_c0m1": { - "children": [], - "hosts": [ - "10.219.6.136" - ], - "vars": {} - }, - "tag_Name_trial638_-_idx1": { - "children": [], - "hosts": [ - "10.219.26.152", - "54.86.80.163" - ], - "vars": {} - }, - "tag_Name_trial638_-_idx2": { - "children": [], - "hosts": [ - "10.219.92.4", - "54.86.80.208" - ], - "vars": {} - }, - "tag_Name_trial638_-_idx3": { - "children": [], - "hosts": [ - "10.219.130.129", - "54.86.80.36" - ], - "vars": {} - }, - "tag_Name_trial638_-_lm1": { - "children": [], - "hosts": [ - "10.219.68.254" - ], - "vars": {} - }, - "tag_Name_trial638_-_sh1": { - "children": [], - "hosts": [ - "10.219.63.95", - "54.86.78.119" - ], - "vars": {} - }, - "tag_Name_trial639_-_c0m1": { - "children": [], - "hosts": [ - "10.219.12.138" - ], - "vars": {} - }, - "tag_Name_trial639_-_idx1": { - "children": [], - "hosts": [ - "10.219.3.22", - "54.86.87.183" - ], - "vars": {} - }, - "tag_Name_trial639_-_idx2": { - "children": [], - "hosts": [ - "10.219.119.78", - "54.86.84.127" - ], - "vars": {} - }, - "tag_Name_trial639_-_idx3": { - "children": [], - "hosts": [ - "10.219.179.156", - "54.86.104.169" - ], - "vars": {} - }, - "tag_Name_trial639_-_lm1": { - "children": [], - "hosts": [ - "10.219.133.98" - ], - "vars": {} - }, - "tag_Name_trial639_-_sh1": { - "children": [], - "hosts": [ - "10.219.18.43", - "54.86.67.89" - ], - "vars": {} - }, - "tag_Name_trial640_-_c0m1": { - "children": [], - "hosts": [ - "10.219.165.247" - ], - "vars": {} - }, - "tag_Name_trial640_-_idx1": { - "children": [], - "hosts": [ - "10.219.22.111", - "54.86.99.249" - ], - "vars": {} - }, - "tag_Name_trial640_-_idx2": { - "children": [], - "hosts": [ - "10.219.78.180", - "54.86.94.238" - ], - "vars": {} - }, - "tag_Name_trial640_-_idx3": { - "children": [], - "hosts": [ - "10.219.142.23", - "54.86.90.71" - ], - "vars": {} - }, - "tag_Name_trial640_-_lm1": { - "children": [], - "hosts": [ - "10.219.28.211" - ], - "vars": {} - }, - "tag_Name_trial640_-_sh1": { - "children": [], - "hosts": [ - "10.219.177.177", - "54.86.101.141" - ], - "vars": {} - }, - "tag_Name_trial641_-_c0m1": { - "children": [], - "hosts": [ - "10.219.71.164" - ], - "vars": {} - }, - "tag_Name_trial641_-_idx1": { - "children": [], - "hosts": [ - "10.219.10.83", - "54.84.167.146" - ], - "vars": {} - }, - "tag_Name_trial641_-_idx2": { - "children": [], - "hosts": [ - "10.219.66.5", - "54.86.64.168" - ], - "vars": {} - }, - "tag_Name_trial641_-_idx3": { - "children": [], - "hosts": [ - "10.219.158.35", - "54.84.241.208" - ], - "vars": {} - }, - "tag_Name_trial641_-_lm1": { - "children": [], - "hosts": [ - "10.219.128.183" - ], - "vars": {} - }, - "tag_Name_trial641_-_sh1": { - "children": [], - "hosts": [ - "10.219.74.178", - "54.86.61.31" - ], - "vars": {} - }, - "tag_Name_trial642_-_c0m1": { - "children": [], - "hosts": [ - "10.219.9.24" - ], - "vars": {} - }, - "tag_Name_trial642_-_idx1": { - "children": [], - "hosts": [ - "10.219.42.72", - "54.86.81.225" - ], - "vars": {} - }, - "tag_Name_trial642_-_idx2": { - "children": [], - "hosts": [ - "10.219.75.107", - "54.86.81.213" - ], - "vars": {} - }, - "tag_Name_trial642_-_idx3": { - "children": [], - "hosts": [ - "10.219.131.26", - "54.86.60.175" - ], - "vars": {} - }, - "tag_Name_trial642_-_lm1": { - "children": [], - "hosts": [ - "10.219.77.162" - ], - "vars": {} - }, - "tag_Name_trial642_-_sh1": { - "children": [], - "hosts": [ - "10.219.49.157", - "54.86.65.171" - ], - "vars": {} - }, - "tag_Name_trial643_-_c0m1": { - "children": [], - "hosts": [ - "10.219.151.162" - ], - "vars": {} - }, - "tag_Name_trial643_-_idx1": { - "children": [], - "hosts": [ - "10.219.24.227", - "54.86.79.232" - ], - "vars": {} - }, - "tag_Name_trial643_-_idx2": { - "children": [], - "hosts": [ - "10.219.97.123", - "54.86.53.77" - ], - "vars": {} - }, - "tag_Name_trial643_-_idx3": { - "children": [], - "hosts": [ - "10.219.175.97", - "54.85.127.222" - ], - "vars": {} - }, - "tag_Name_trial643_-_lm1": { - "children": [], - "hosts": [ - "10.219.30.9" - ], - "vars": {} - }, - "tag_Name_trial643_-_sh1": { - "children": [], - "hosts": [ - "10.219.132.1", - "54.86.45.250" - ], - "vars": {} - }, - "tag_Name_trial644_-_c0m1": { - "children": [], - "hosts": [ - "10.219.124.145" - ], - "vars": {} - }, - "tag_Name_trial644_-_idx1": { - "children": [], - "hosts": [ - "10.219.32.15", - "54.86.106.242" - ], - "vars": {} - }, - "tag_Name_trial644_-_idx2": { - "children": [], - "hosts": [ - "10.219.125.7", - "54.86.106.243" - ], - "vars": {} - }, - "tag_Name_trial644_-_idx3": { - "children": [], - "hosts": [ - "10.219.175.162", - "54.86.106.241" - ], - "vars": {} - }, - "tag_Name_trial644_-_lm1": { - "children": [], - "hosts": [ - "10.219.41.239" - ], - "vars": {} - }, - "tag_Name_trial644_-_sh1": { - "children": [], - "hosts": [ - "10.219.64.58", - "54.86.106.244" - ], - "vars": {} - }, - "tag_Name_trial645_-_c0m1": { - "children": [], - "hosts": [ - "10.219.147.25" - ], - "vars": {} - }, - "tag_Name_trial645_-_idx1": { - "children": [], - "hosts": [ - "10.219.31.244", - "54.86.98.77" - ], - "vars": {} - }, - "tag_Name_trial645_-_idx2": { - "children": [], - "hosts": [ - "10.219.93.219", - "54.85.98.144" - ], - "vars": {} - }, - "tag_Name_trial645_-_idx3": { - "children": [], - "hosts": [ - "10.219.140.250", - "54.86.38.49" - ], - "vars": {} - }, - "tag_Name_trial645_-_lm1": { - "children": [], - "hosts": [ - "10.219.101.155" - ], - "vars": {} - }, - "tag_Name_trial645_-_sh1": { - "children": [], - "hosts": [ - "10.219.143.239", - "54.86.98.21" - ], - "vars": {} - }, - "tag_Name_trial646_-_c0m1": { - "children": [], - "hosts": [ - "10.219.62.182" - ], - "vars": {} - }, - "tag_Name_trial646_-_idx1": { - "children": [], - "hosts": [ - "10.219.18.88", - "54.85.77.167" - ], - "vars": {} - }, - "tag_Name_trial646_-_idx2": { - "children": [], - "hosts": [ - "10.219.89.22", - "54.86.80.182" - ], - "vars": {} - }, - "tag_Name_trial646_-_idx3": { - "children": [], - "hosts": [ - "10.219.168.254", - "54.85.251.175" - ], - "vars": {} - }, - "tag_Name_trial646_-_lm1": { - "children": [], - "hosts": [ - "10.219.135.107" - ], - "vars": {} - }, - "tag_Name_trial646_-_sh1": { - "children": [], - "hosts": [ - "10.219.50.231", - "54.86.85.33" - ], - "vars": {} - }, - "tag_Name_trial647_-_c0m1": { - "children": [], - "hosts": [ - "10.219.87.56" - ], - "vars": {} - }, - "tag_Name_trial647_-_idx1": { - "children": [], - "hosts": [ - "10.219.61.3", - "54.86.108.101" - ], - "vars": {} - }, - "tag_Name_trial647_-_idx2": { - "children": [], - "hosts": [ - "10.219.102.143", - "54.86.108.119" - ], - "vars": {} - }, - "tag_Name_trial647_-_idx3": { - "children": [], - "hosts": [ - "10.219.156.2", - "54.86.108.102" - ], - "vars": {} - }, - "tag_Name_trial647_-_lm1": { - "children": [], - "hosts": [ - "10.219.9.54" - ], - "vars": {} - }, - "tag_Name_trial647_-_sh1": { - "children": [], - "hosts": [ - "10.219.67.205", - "54.86.108.117" - ], - "vars": {} - }, - "tag_Name_white-ops_-_c0m1": { - "children": [], - "hosts": [ - "10.219.16.100" - ], - "vars": {} - }, - "tag_Name_white-ops_-_idx1": { - "children": [], - "hosts": [ - "10.219.6.165", - "54.84.148.213" - ], - "vars": {} - }, - "tag_Name_white-ops_-_idx2": { - "children": [], - "hosts": [ - "10.219.90.31", - "54.208.10.193" - ], - "vars": {} - }, - "tag_Name_white-ops_-_idx3": { - "children": [], - "hosts": [ - "10.219.157.181", - "54.84.149.162" - ], - "vars": {} - }, - "tag_Name_white-ops_-_lm1": { - "children": [], - "hosts": [ - "10.219.43.249" - ], - "vars": {} - }, - "tag_Name_white-ops_-_sh1": { - "children": [], - "hosts": [ - "10.219.127.168", - "54.84.15.178" - ], - "vars": {} - }, - "tag_Name_zabbix_-_zabbix1": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "tag_Role_chef_server": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Role_cluster-master": { - "children": [], - "hosts": [ - "54.84.222.7", - "54.86.39.175", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "54.84.156.145", - "10.219.72.12", - "10.219.92.107", - "10.219.85.120", - "10.219.91.14", - "10.219.118.63", - "10.219.107.232", - "10.219.115.77", - "10.219.121.80", - "10.219.92.64", - "10.219.112.202", - "10.219.85.43", - "10.219.81.201", - "10.219.123.229", - "10.219.119.127", - "10.219.71.164", - "10.219.124.145", - "10.219.87.56", - "10.219.171.92", - "10.219.179.164", - "10.219.168.89", - "10.219.183.156", - "10.219.181.82", - "10.219.137.198", - "10.219.130.240", - "10.219.130.229", - "10.219.137.105", - "10.219.155.180", - "10.219.137.205", - "10.219.143.228", - "10.219.180.244", - "10.219.140.138", - "10.219.165.155", - "10.219.134.179", - "10.219.169.135", - "10.219.150.33", - "10.219.187.219", - "10.219.137.67", - "10.219.162.164", - "10.219.183.205", - "10.219.165.247", - "10.219.151.162", - "10.219.147.25", - "10.219.144.224", - "10.219.177.248", - "10.219.53.81", - "10.219.16.100", - "10.219.52.143", - "10.219.41.51", - "10.219.29.108", - "10.219.43.2", - "10.219.39.139", - "10.219.11.70", - "10.219.30.68", - "10.219.59.221", - "10.219.41.127", - "10.219.26.28", - "10.219.60.118", - "10.219.45.70", - "10.219.9.203", - "10.219.63.214", - "10.219.27.228", - "10.219.40.153", - "10.219.41.67", - "10.219.6.136", - "10.219.9.24", - "10.219.12.138", - "10.219.62.182", - "10.219.39.194", - "10.219.134.89", - "10.219.152.52", - "10.219.45.160", - "10.219.132.127", - "10.219.166.102" - ], - "vars": {} - }, - "tag_Role_indexer": { - "children": [], - "hosts": [ - "54.86.109.121", - "54.86.128.114", - "54.86.103.185", - "54.84.87.73", - "54.208.10.193", - "54.84.142.102", - "54.84.185.247", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.170.133", - "54.84.74.125", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.192.78", - "54.85.119.67", - "54.209.139.239", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.209.203.222", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.80.182", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.99", - "54.84.189.190", - "54.84.137.179", - "54.85.34.98", - "54.84.116.38", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.84.47.238", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.85.102.208", - "54.208.12.112", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.86.75.36", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.60.175", - "54.86.80.36", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "54.84.92.185", - "54.84.148.213", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.48.128", - "54.209.183.210", - "54.209.162.114", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.53.153", - "54.86.117.163", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.103.5", - "54.86.97.73", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.81.225", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.10.255", - "54.86.48.214", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.69.7", - "10.219.70.210", - "10.219.64.89", - "10.219.64.217", - "10.219.78.69", - "10.219.86.78", - "10.219.90.31", - "10.219.68.99", - "10.219.105.247", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.65.35", - "10.219.107.166", - "10.219.81.15", - "10.219.126.78", - "10.219.72.93", - "10.219.125.232", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.72.134", - "10.219.90.109", - "10.219.67.120", - "10.219.86.47", - "10.219.103.216", - "10.219.109.92", - "10.219.68.47", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.122.228", - "10.219.100.175", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.118.126", - "10.219.103.178", - "10.219.81.29", - "10.219.120.23", - "10.219.90.205", - "10.219.121.158", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.94.27", - "10.219.111.126", - "10.219.77.13", - "10.219.73.211", - "10.219.75.209", - "10.219.78.250", - "10.219.114.210", - "10.219.110.47", - "10.219.118.148", - "10.219.68.40", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.98.173", - "10.219.92.4", - "10.219.78.180", - "10.219.66.5", - "10.219.75.107", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.89.22", - "10.219.102.143", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.134.206", - "10.219.157.181", - "10.219.132.7", - "10.219.136.17", - "10.219.145.78", - "10.219.186.145", - "10.219.173.45", - "10.219.174.165", - "10.219.189.153", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.130.190", - "10.219.179.119", - "10.219.153.220", - "10.219.168.41", - "10.219.188.5", - "10.219.186.171", - "10.219.185.186", - "10.219.145.106", - "10.219.184.152", - "10.219.143.130", - "10.219.187.178", - "10.219.146.42", - "10.219.163.166", - "10.219.154.12", - "10.219.130.1", - "10.219.142.79", - "10.219.133.48", - "10.219.156.153", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.178.84", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.147.63", - "10.219.149.40", - "10.219.177.41", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.142.223", - "10.219.185.101", - "10.219.137.49", - "10.219.128.18", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.131.26", - "10.219.130.129", - "10.219.142.23", - "10.219.158.35", - "10.219.179.156", - "10.219.175.97", - "10.219.175.162", - "10.219.168.254", - "10.219.140.250", - "10.219.156.2", - "10.219.150.186", - "10.219.175.103", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.182.219", - "10.219.61.154", - "10.219.6.165", - "10.219.4.181", - "10.219.11.12", - "10.219.62.184", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.32.233", - "10.219.49.54", - "10.219.63.147", - "10.219.49.237", - "10.219.63.105", - "10.219.59.57", - "10.219.1.1", - "10.219.60.213", - "10.219.17.208", - "10.219.12.146", - "10.219.3.208", - "10.219.48.23", - "10.219.63.67", - "10.219.37.47", - "10.219.47.118", - "10.219.2.224", - "10.219.14.143", - "10.219.16.66", - "10.219.57.108", - "10.219.38.61", - "10.219.8.78", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.11.190", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.35.86", - "10.219.41.191", - "10.219.36.162", - "10.219.16.89", - "10.219.37.213", - "10.219.24.179", - "10.219.18.12", - "10.219.32.78", - "10.219.27.75", - "10.219.10.200", - "10.219.20.248", - "10.219.5.136", - "10.219.53.83", - "10.219.20.163", - "10.219.47.66", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.26.152", - "10.219.22.111", - "10.219.10.83", - "10.219.42.72", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.61.3", - "10.219.31.244", - "10.219.18.88", - "10.219.36.235", - "10.219.56.91", - "10.219.51.0", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.147.76", - "10.219.148.67", - "10.219.188.151", - "10.219.25.147", - "10.219.62.215", - "10.219.4.252", - "10.219.120.83", - "10.219.130.19", - "10.219.2.175", - "10.219.114.9", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_Role_jenkins-executor": { - "children": [], - "hosts": [ - "10.219.57.225", - "10.219.33.86", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Role_jenkins-master": { - "children": [], - "hosts": [ - "10.219.26.182", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Role_license-master": { - "children": [], - "hosts": [ - "54.84.206.192", - "54.84.122.210", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "54.84.23.79", - "10.219.100.237", - "10.219.115.245", - "10.219.98.192", - "10.219.84.105", - "10.219.94.77", - "10.219.103.150", - "10.219.93.172", - "10.219.97.207", - "10.219.111.113", - "10.219.97.164", - "10.219.108.141", - "10.219.118.52", - "10.219.79.157", - "10.219.66.9", - "10.219.75.150", - "10.219.68.180", - "10.219.119.27", - "10.219.127.169", - "10.219.68.254", - "10.219.77.162", - "10.219.101.155", - "10.219.173.93", - "10.219.190.234", - "10.219.128.227", - "10.219.146.30", - "10.219.160.142", - "10.219.136.115", - "10.219.136.13", - "10.219.184.234", - "10.219.158.176", - "10.219.165.216", - "10.219.173.37", - "10.219.142.242", - "10.219.154.211", - "10.219.161.92", - "10.219.129.154", - "10.219.185.71", - "10.219.128.183", - "10.219.133.98", - "10.219.135.107", - "10.219.154.60", - "10.219.132.76", - "10.219.47.252", - "10.219.43.249", - "10.219.1.9", - "10.219.16.141", - "10.219.48.166", - "10.219.12.85", - "10.219.47.1", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.15.194", - "10.219.54.28", - "10.219.48.124", - "10.219.4.55", - "10.219.36.102", - "10.219.9.213", - "10.219.19.226", - "10.219.36.26", - "10.219.25.150", - "10.219.11.33", - "10.219.52.205", - "10.219.36.177", - "10.219.28.211", - "10.219.30.9", - "10.219.41.239", - "10.219.9.54", - "10.219.49.160", - "10.219.91.91", - "10.219.164.5", - "10.219.29.254", - "10.219.111.100", - "10.219.111.13" - ], - "vars": {} - }, - "tag_Role_search-head": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.94.44", - "54.86.141.187", - "54.84.65.195", - "54.84.15.178", - "54.85.28.140", - "54.84.166.253", - "54.85.65.51", - "54.84.242.116", - "54.84.245.20", - "54.84.240.188", - "54.209.76.22", - "54.208.89.118", - "54.209.14.115", - "54.86.52.195", - "54.86.94.75", - "54.86.91.120", - "54.86.97.144", - "54.86.61.31", - "54.86.106.244", - "54.86.108.117", - "54.84.164.51", - "54.84.199.223", - "54.84.97.29", - "54.85.52.64", - "54.85.69.123", - "54.85.72.146", - "54.85.76.42", - "54.84.190.109", - "54.208.210.176", - "54.208.45.55", - "54.85.48.70", - "54.84.245.162", - "54.84.114.2", - "54.85.170.154", - "54.86.54.174", - "54.86.116.105", - "54.86.55.72", - "54.86.88.52", - "54.86.98.158", - "54.86.111.172", - "54.86.112.102", - "54.86.101.141", - "54.86.45.250", - "54.86.98.21", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "54.85.90.7", - "54.208.87.90", - "54.84.190.144", - "54.209.127.172", - "54.85.87.129", - "54.84.21.94", - "54.85.80.156", - "54.85.193.109", - "54.86.57.201", - "54.86.74.37", - "54.86.117.161", - "54.86.71.155", - "54.86.97.67", - "54.86.97.174", - "54.86.98.67", - "54.86.90.15", - "54.86.78.119", - "54.86.65.171", - "54.86.67.89", - "54.86.85.33", - "54.86.80.199", - "54.84.152.213", - "10.219.68.240", - "10.219.101.208", - "10.219.117.146", - "10.219.95.221", - "10.219.92.102", - "10.219.127.168", - "10.219.85.37", - "10.219.85.245", - "10.219.81.130", - "10.219.127.193", - "10.219.92.169", - "10.219.107.101", - "10.219.109.28", - "10.219.85.31", - "10.219.79.196", - "10.219.117.252", - "10.219.114.130", - "10.219.109.144", - "10.219.74.178", - "10.219.64.58", - "10.219.67.205", - "10.219.147.195", - "10.219.136.66", - "10.219.154.184", - "10.219.182.240", - "10.219.150.111", - "10.219.169.253", - "10.219.131.132", - "10.219.154.94", - "10.219.154.115", - "10.219.138.98", - "10.219.154.203", - "10.219.169.68", - "10.219.132.135", - "10.219.155.123", - "10.219.153.9", - "10.219.141.55", - "10.219.138.185", - "10.219.163.151", - "10.219.185.140", - "10.219.183.41", - "10.219.134.176", - "10.219.159.21", - "10.219.177.177", - "10.219.132.1", - "10.219.143.239", - "10.219.152.142", - "10.219.154.235", - "10.219.26.121", - "10.219.12.148", - "10.219.56.12", - "10.219.25.26", - "10.219.39.144", - "10.219.5.147", - "10.219.56.242", - "10.219.62.128", - "10.219.4.113", - "10.219.39.9", - "10.219.41.230", - "10.219.56.83", - "10.219.59.159", - "10.219.2.72", - "10.219.53.235", - "10.219.13.250", - "10.219.62.192", - "10.219.63.95", - "10.219.49.157", - "10.219.18.43", - "10.219.50.231", - "10.219.56.44", - "10.219.4.79", - "10.219.161.188", - "10.219.161.118", - "10.219.10.116", - "10.219.152.208", - "10.219.167.181" - ], - "vars": {} - }, - "tag_Role_zabbix-server": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12", - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_CO-920": { - "children": [], - "hosts": [ - "10.219.62.215", - "10.219.45.160", - "10.219.10.116", - "10.219.164.5", - "10.219.147.76", - "10.219.87.108" - ], - "vars": {} - }, - "tag_Stack_anaplan": { - "children": [], - "hosts": [ - "10.219.1.219", - "10.219.49.160", - "10.219.184.95", - "10.219.92.107", - "10.219.117.146", - "10.219.70.210", - "54.86.107.51", - "54.86.125.136", - "54.86.94.44", - "54.86.128.114" - ], - "vars": {} - }, - "tag_Stack_backupify": { - "children": [], - "hosts": [ - "10.219.5.111", - "10.219.63.105", - "10.219.137.105", - "10.219.168.41", - "10.219.131.132", - "10.219.91.234", - "54.85.54.254", - "54.85.181.37", - "54.85.76.42", - "54.85.68.39" - ], - "vars": {} - }, - "tag_Stack_climate": { - "children": [], - "hosts": [ - "10.219.1.9", - "10.219.4.181", - "10.219.147.195", - "10.219.132.7", - "10.219.171.92", - "10.219.68.99", - "54.84.99.227", - "54.84.164.51", - "54.84.155.209", - "54.84.142.102" - ], - "vars": {} - }, - "tag_Stack_defensenet": { - "children": [], - "hosts": [ - "10.219.18.251", - "10.219.183.156", - "10.219.174.165", - "10.219.154.184", - "10.219.84.105", - "10.219.107.166", - "54.84.217.136", - "54.84.116.38", - "54.84.97.29", - "54.85.42.39" - ], - "vars": {} - }, - "tag_Stack_fido": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_fidoplus": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_finra": { - "children": [], - "hosts": [ - "10.219.4.79", - "10.219.36.226", - "10.219.52.143", - "10.219.62.184", - "10.219.173.93", - "10.219.145.78", - "10.219.98.174", - "10.219.127.143", - "10.219.68.240", - "54.84.152.213", - "54.84.103.231", - "54.84.156.145", - "54.84.180.204", - "54.84.122.210", - "54.84.189.190", - "54.84.80.225", - "54.84.189.117" - ], - "vars": {} - }, - "tag_Stack_funtomic-prod": { - "children": [], - "hosts": [ - "10.219.28.78", - "10.219.190.234", - "10.219.186.145", - "10.219.168.89", - "10.219.127.193", - "10.219.113.16", - "54.85.13.176", - "54.84.137.179", - "54.84.242.116", - "54.84.222.25" - ], - "vars": {} - }, - "tag_Stack_gilt": { - "children": [], - "hosts": [ - "10.219.8.78", - "10.219.59.221", - "10.219.38.61", - "10.219.62.128", - "10.219.167.28", - "10.219.165.216", - "10.219.156.153", - "10.219.67.44", - "10.219.82.113", - "54.209.162.114", - "54.209.183.210", - "54.85.80.156", - "54.84.31.76", - "54.85.52.37", - "54.85.47.190", - "54.209.177.56" - ], - "vars": {} - }, - "tag_Stack_idexx": { - "children": [], - "hosts": [ - "10.219.60.213", - "10.219.153.220", - "10.219.154.94", - "10.219.130.229", - "10.219.72.134", - "10.219.94.77", - "54.84.46.105", - "54.85.91.87", - "54.84.190.109", - "54.85.148.101" - ], - "vars": {} - }, - "tag_Stack_intermedia": { - "children": [], - "hosts": [ - "10.219.17.109", - "10.219.51.115", - "10.219.55.210", - "10.219.41.127", - "10.219.4.113", - "10.219.189.219", - "10.219.152.17", - "10.219.169.240", - "10.219.112.253", - "10.219.64.207", - "10.219.97.164", - "10.219.118.126", - "54.86.85.22", - "54.84.193.141", - "54.84.18.13", - "54.85.193.109", - "54.86.84.64", - "54.85.167.62", - "54.85.126.177", - "54.86.75.79", - "54.86.14.157", - "54.84.0.249" - ], - "vars": {} - }, - "tag_Stack_k14": { - "children": [], - "hosts": [ - "10.219.35.86", - "10.219.9.213", - "10.219.141.55", - "10.219.134.179", - "10.219.155.57", - "10.219.83.87", - "54.84.156.195", - "54.86.54.174", - "54.85.37.235", - "54.85.175.102" - ], - "vars": {} - }, - "tag_Stack_lyft": { - "children": [], - "hosts": [ - "10.219.29.108", - "10.219.3.208", - "10.219.56.12", - "10.219.184.152", - "10.219.93.172", - "10.219.103.216", - "54.85.42.61", - "54.208.87.90", - "54.85.102.208", - "54.209.139.239" - ], - "vars": {} - }, - "tag_Stack_marriott": { - "children": [], - "hosts": [ - "10.219.11.12", - "10.219.136.66", - "10.219.136.17", - "10.219.179.164", - "10.219.98.192", - "10.219.105.247", - "54.84.125.108", - "54.84.199.223", - "54.84.164.99", - "54.84.222.7", - "54.84.206.192", - "54.84.185.247" - ], - "vars": {} - }, - "tag_Stack_mckesson": { - "children": [], - "hosts": [ - "10.219.43.48", - "10.219.132.76", - "10.219.147.27", - "10.219.95.221", - "10.219.64.89", - "10.219.85.120", - "54.86.141.183", - "54.86.141.184", - "54.86.141.187", - "54.86.103.185" - ], - "vars": {} - }, - "tag_Stack_mindtouch": { - "children": [], - "hosts": [ - "10.219.51.0", - "10.219.152.142", - "10.219.165.236", - "10.219.136.115", - "10.219.72.12", - "10.219.69.7", - "10.219.101.208", - "54.86.119.45", - "54.86.109.129", - "54.86.109.121", - "54.86.112.246" - ], - "vars": {} - }, - "tag_Stack_motionsoft": { - "children": [], - "hosts": [ - "10.219.40.115", - "10.219.49.237", - "10.219.188.5", - "10.219.112.202", - "10.219.103.26", - "10.219.81.130", - "54.85.10.98", - "54.85.16.252", - "54.84.228.141", - "54.85.65.51" - ], - "vars": {} - }, - "tag_Stack_mregan": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_Stack_poc1": { - "children": [], - "hosts": [ - "10.219.16.141", - "10.219.25.43", - "10.219.189.153", - "10.219.182.240", - "10.219.181.82", - "10.219.81.15", - "54.85.33.186", - "54.85.66.59", - "54.85.52.64", - "54.85.21.183" - ], - "vars": {} - }, - "tag_Stack_poc2": { - "children": [], - "hosts": [ - "10.219.32.233", - "10.219.131.134", - "10.219.146.30", - "10.219.118.63", - "10.219.85.37", - "10.219.100.34", - "54.85.53.103", - "54.85.32.12", - "54.85.28.140", - "54.84.252.121" - ], - "vars": {} - }, - "tag_Stack_poc3": { - "children": [], - "hosts": [ - "10.219.48.166", - "10.219.49.54", - "10.219.166.184", - "10.219.85.245", - "10.219.107.232", - "10.219.126.78", - "54.84.84.30", - "54.85.71.17", - "54.84.166.253", - "54.85.71.54" - ], - "vars": {} - }, - "tag_Stack_poc4": { - "children": [], - "hosts": [ - "10.219.43.57", - "10.219.12.85", - "10.219.137.198", - "10.219.150.111", - "10.219.177.243", - "10.219.72.93", - "54.85.69.157", - "54.85.69.123", - "54.85.45.216", - "54.84.170.133" - ], - "vars": {} - }, - "tag_Stack_poc5": { - "children": [], - "hosts": [ - "10.219.47.1", - "10.219.63.147", - "10.219.130.240", - "10.219.169.253", - "10.219.130.190", - "10.219.125.232", - "54.84.23.79", - "54.85.80.174", - "54.86.39.175", - "54.85.72.146", - "54.84.47.238", - "54.84.74.125" - ], - "vars": {} - }, - "tag_Stack_prod-monitor-red": { - "children": [], - "hosts": [ - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.120.23", - "10.219.118.52", - "10.219.177.150", - "10.219.144.224", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.16.214", - "10.219.80.212", - "10.219.91.91", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_Stack_security-test": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_skynet": { - "children": [], - "hosts": [ - "10.219.2.93", - "10.219.0.222", - "10.219.12.148", - "10.219.1.1", - "10.219.173.21", - "10.219.132.135", - "10.219.186.171", - "10.219.103.178", - "10.219.115.77", - "10.219.90.109", - "10.219.92.169", - "54.86.23.145", - "54.85.146.9", - "54.84.75.99", - "54.84.189.79", - "54.86.51.77", - "54.85.157.183" - ], - "vars": {} - }, - "tag_Stack_sonos": { - "children": [], - "hosts": [ - "10.219.56.91", - "10.219.56.44", - "10.219.36.235", - "10.219.39.194", - "10.219.154.60", - "10.219.175.103", - "10.219.150.186", - "10.219.84.189", - "10.219.71.223", - "54.86.48.214", - "54.86.80.199", - "54.86.10.255", - "54.86.56.174", - "54.86.89.139", - "54.86.81.117", - "54.86.88.208" - ], - "vars": {} - }, - "tag_Stack_splunk-sfdc": { - "children": [], - "hosts": [ - "10.219.29.254", - "10.219.25.147", - "10.219.161.118", - "10.219.152.52", - "10.219.188.151", - "10.219.114.174" - ], - "vars": {} - }, - "tag_Stack_spm1": { - "children": [], - "hosts": [ - "10.219.31.47", - "10.219.128.227", - "10.219.173.45", - "10.219.107.101", - "10.219.91.14", - "10.219.65.35", - "54.84.207.241", - "54.85.34.98", - "54.84.245.20", - "54.84.191.190" - ], - "vars": {} - }, - "tag_Stack_stackmakr-corp": { - "children": [], - "hosts": [ - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_stackmakr-ops-blue": { - "children": [], - "hosts": [ - "ec2-54-204-191-195.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Stack_stackmakr-ops-red": { - "children": [], - "hosts": [ - "10.219.57.225", - "10.219.33.86", - "10.219.26.182" - ], - "vars": {} - }, - "tag_Stack_take2": { - "children": [], - "hosts": [ - "10.219.61.154", - "10.219.47.252", - "10.219.53.81", - "10.219.134.206", - "10.219.86.78", - "10.219.92.102", - "54.84.92.185", - "54.84.84.233", - "54.84.87.73", - "54.84.65.195" - ], - "vars": {} - }, - "tag_Stack_trial605": { - "children": [], - "hosts": [ - "10.219.39.9", - "10.219.26.28", - "10.219.60.102", - "10.219.178.85", - "10.219.108.141", - "10.219.81.29", - "54.86.57.201", - "54.85.14.238", - "54.85.75.200", - "54.86.40.17" - ], - "vars": {} - }, - "tag_Stack_trial606": { - "children": [], - "hosts": [ - "10.219.11.70", - "10.219.5.147", - "10.219.16.66", - "10.219.158.176", - "10.219.142.79", - "10.219.100.175", - "54.85.87.129", - "54.84.163.82", - "54.208.228.127", - "54.84.251.0" - ], - "vars": {} - }, - "tag_Stack_trial607": { - "children": [], - "hosts": [ - "10.219.62.192", - "10.219.41.67", - "10.219.18.78", - "10.219.185.71", - "10.219.147.74", - "10.219.98.173", - "54.86.90.15", - "54.86.90.142", - "54.86.90.152", - "54.86.90.177" - ], - "vars": {} - }, - "tag_Stack_trial608": { - "children": [], - "hosts": [ - "54.85.161.87", - "54.85.90.7", - "54.208.59.237", - "54.85.199.140" - ], - "vars": {} - }, - "tag_Stack_trial609": { - "children": [], - "hosts": [ - "10.219.17.208", - "10.219.185.186", - "10.219.154.115", - "10.219.155.180", - "10.219.103.150", - "10.219.67.120", - "54.208.141.20", - "54.209.120.55", - "54.208.210.176", - "54.209.108.61" - ], - "vars": {} - }, - "tag_Stack_trial610": { - "children": [], - "hosts": [ - "54.84.169.33", - "54.209.106.125", - "54.84.240.188", - "54.84.192.78" - ], - "vars": {} - }, - "tag_Stack_trial611": { - "children": [], - "hosts": [ - "10.219.56.242", - "10.219.30.68", - "10.219.57.108", - "10.219.133.48", - "10.219.89.90", - "10.219.111.113", - "54.84.21.94", - "54.85.48.128", - "54.85.208.32", - "54.85.27.197" - ], - "vars": {} - }, - "tag_Stack_trial612": { - "children": [], - "hosts": [ - "10.219.36.102", - "10.219.11.190", - "10.219.140.138", - "10.219.178.84", - "10.219.155.123", - "10.219.90.205", - "54.85.53.185", - "54.86.75.36", - "54.84.114.2", - "54.86.76.41" - ], - "vars": {} - }, - "tag_Stack_trial613": { - "children": [], - "hosts": [ - "10.219.16.89", - "10.219.149.40", - "10.219.142.242", - "10.219.114.207", - "10.219.79.196", - "10.219.85.43", - "54.86.102.132", - "54.86.110.180", - "54.86.110.115", - "54.86.52.195" - ], - "vars": {} - }, - "tag_Stack_trial614": { - "children": [], - "hosts": [ - "10.219.18.12", - "10.219.19.226", - "10.219.180.178", - "10.219.81.201", - "10.219.94.27", - "10.219.117.252", - "54.86.103.5", - "54.86.105.40", - "54.86.104.18", - "54.86.94.75" - ], - "vars": {} - }, - "tag_Stack_trial615": { - "children": [], - "hosts": [ - "10.219.15.194", - "10.219.12.146", - "10.219.138.98", - "10.219.145.106", - "10.219.137.205", - "10.219.86.47", - "54.85.200.49", - "54.208.45.55", - "54.85.95.0", - "54.85.119.67" - ], - "vars": {} - }, - "tag_Stack_trial616": { - "children": [], - "hosts": [ - "10.219.2.224", - "10.219.48.124", - "10.219.154.12", - "10.219.92.64", - "10.219.85.31", - "10.219.89.30", - "54.209.204.12", - "54.85.223.164", - "54.209.14.115", - "54.209.203.222" - ], - "vars": {} - }, - "tag_Stack_trial617": { - "children": [], - "hosts": [ - "10.219.14.143", - "10.219.4.55", - "10.219.130.1", - "10.219.169.68", - "10.219.180.244", - "10.219.122.228", - "54.84.54.49", - "54.85.166.231", - "54.84.245.162", - "54.85.249.26" - ], - "vars": {} - }, - "tag_Stack_trial618": { - "children": [], - "hosts": [ - "10.219.60.118", - "10.219.41.191", - "10.219.41.230", - "10.219.147.63", - "10.219.173.37", - "10.219.64.87", - "54.86.53.153", - "54.86.74.37", - "54.86.81.21", - "54.86.89.186" - ], - "vars": {} - }, - "tag_Stack_trial619": { - "children": [], - "hosts": [ - "10.219.56.83", - "10.219.36.162", - "10.219.45.70", - "10.219.177.41", - "10.219.154.211", - "10.219.96.145", - "54.86.117.161", - "54.86.117.163", - "54.86.117.162", - "54.86.111.80" - ], - "vars": {} - }, - "tag_Stack_trial620": { - "children": [], - "hosts": [ - "10.219.48.23", - "10.219.54.28", - "10.219.143.130", - "10.219.109.92", - "10.219.121.80", - "10.219.109.28", - "54.85.135.14", - "54.208.12.112", - "54.84.103.10", - "54.209.76.22" - ], - "vars": {} - }, - "tag_Stack_trial621": { - "children": [], - "hosts": [ - "10.219.47.118", - "10.219.143.228", - "10.219.187.178", - "10.219.154.203", - "10.219.88.75", - "10.219.97.207", - "54.209.74.106", - "54.85.85.59", - "54.85.48.70", - "54.208.187.98" - ], - "vars": {} - }, - "tag_Stack_trial622": { - "children": [], - "hosts": [ - "10.219.43.2", - "10.219.39.144", - "10.219.63.67", - "10.219.184.234", - "10.219.163.166", - "10.219.68.47", - "54.209.127.172", - "54.85.84.167", - "54.85.47.154", - "54.209.108.176" - ], - "vars": {} - }, - "tag_Stack_trial623": { - "children": [], - "hosts": [ - "10.219.39.139", - "10.219.37.47", - "10.219.25.26", - "10.219.136.13", - "10.219.146.42", - "10.219.78.42", - "54.85.61.212", - "54.84.190.144", - "54.85.255.219", - "54.85.173.90" - ], - "vars": {} - }, - "tag_Stack_trial624": { - "children": [], - "hosts": [ - "54.84.174.209", - "54.85.44.185", - "54.208.89.118", - "54.85.160.181" - ], - "vars": {} - }, - "tag_Stack_trial625": { - "children": [], - "hosts": [ - "10.219.36.26", - "10.219.37.213", - "10.219.142.152", - "10.219.169.135", - "10.219.138.185", - "10.219.111.126", - "54.86.117.236", - "54.86.117.237", - "54.86.116.105", - "54.86.116.199" - ], - "vars": {} - }, - "tag_Stack_trial626": { - "children": [], - "hosts": [ - "10.219.59.159", - "10.219.24.179", - "10.219.9.203", - "10.219.173.38", - "10.219.77.13", - "10.219.66.9", - "54.86.71.155", - "54.86.82.149", - "54.86.77.91", - "54.86.87.25" - ], - "vars": {} - }, - "tag_Stack_trial627": { - "children": [], - "hosts": [ - "10.219.53.83", - "10.219.25.150", - "10.219.128.18", - "10.219.119.127", - "10.219.118.148", - "10.219.109.144", - "54.86.97.227", - "54.85.75.4", - "54.86.97.181", - "54.86.97.144" - ], - "vars": {} - }, - "tag_Stack_trial628": { - "children": [], - "hosts": [ - "10.219.27.75", - "10.219.129.154", - "10.219.155.112", - "10.219.123.229", - "10.219.73.211", - "10.219.114.130", - "54.86.90.204", - "54.86.78.51", - "54.86.92.153", - "54.86.91.120" - ], - "vars": {} - }, - "tag_Stack_trial629": { - "children": [], - "hosts": [ - "10.219.2.72", - "10.219.32.78", - "10.219.63.214", - "10.219.161.92", - "10.219.152.253", - "10.219.75.209", - "54.86.97.67", - "54.86.97.73", - "54.85.196.193", - "54.86.60.192" - ], - "vars": {} - }, - "tag_Stack_trial630": { - "children": [], - "hosts": [ - "10.219.10.200", - "10.219.185.101", - "10.219.163.151", - "10.219.150.33", - "10.219.114.210", - "10.219.75.150", - "54.85.193.223", - "54.84.199.152", - "54.86.55.72", - "54.86.76.239" - ], - "vars": {} - }, - "tag_Stack_trial631": { - "children": [], - "hosts": [ - "10.219.53.235", - "10.219.20.248", - "10.219.27.228", - "10.219.142.223", - "10.219.68.180", - "10.219.78.250", - "54.86.97.174", - "54.85.149.164", - "54.85.207.233", - "54.86.8.229" - ], - "vars": {} - }, - "tag_Stack_trial632": { - "children": [], - "hosts": [ - "10.219.47.66", - "10.219.52.205", - "10.219.137.67", - "10.219.185.140", - "10.219.137.49", - "10.219.110.47", - "54.86.94.149", - "54.86.88.52", - "54.84.81.3", - "54.86.93.172" - ], - "vars": {} - }, - "tag_Stack_trial633": { - "children": [], - "hosts": [ - "10.219.13.250", - "10.219.40.153", - "10.219.5.136", - "10.219.191.53", - "10.219.119.27", - "10.219.68.40", - "54.86.98.67", - "54.86.96.151", - "54.86.99.19", - "54.86.97.99" - ], - "vars": {} - }, - "tag_Stack_trial634": { - "children": [], - "hosts": [ - "10.219.20.163", - "10.219.11.33", - "10.219.136.200", - "10.219.183.41", - "10.219.187.219", - "10.219.97.127", - "54.86.100.62", - "54.85.11.117", - "54.86.98.158", - "54.86.99.25" - ], - "vars": {} - }, - "tag_Stack_trial635": { - "children": [], - "hosts": [ - "10.219.5.238", - "10.219.183.205", - "10.219.134.176", - "10.219.166.38", - "10.219.127.169", - "10.219.91.109", - "54.86.112.96", - "54.86.111.172", - "54.86.111.175", - "54.86.111.203" - ], - "vars": {} - }, - "tag_Stack_trial636": { - "children": [], - "hosts": [ - "10.219.49.11", - "10.219.138.5", - "10.219.153.9", - "10.219.165.155", - "10.219.79.157", - "10.219.121.158", - "54.86.50.215", - "54.85.248.82", - "54.85.170.154", - "54.85.148.231" - ], - "vars": {} - }, - "tag_Stack_trial637": { - "children": [], - "hosts": [ - "10.219.32.235", - "10.219.36.177", - "10.219.159.21", - "10.219.162.164", - "10.219.167.0", - "10.219.115.61", - "54.86.112.106", - "54.86.112.102", - "54.86.3.216", - "54.86.112.135" - ], - "vars": {} - }, - "tag_Stack_trial638": { - "children": [], - "hosts": [ - "10.219.26.152", - "10.219.6.136", - "10.219.63.95", - "10.219.130.129", - "10.219.92.4", - "10.219.68.254", - "54.86.80.163", - "54.86.78.119", - "54.86.80.36", - "54.86.80.208" - ], - "vars": {} - }, - "tag_Stack_trial639": { - "children": [], - "hosts": [ - "10.219.3.22", - "10.219.12.138", - "10.219.18.43", - "10.219.133.98", - "10.219.179.156", - "10.219.119.78", - "54.86.87.183", - "54.86.67.89", - "54.86.104.169", - "54.86.84.127" - ], - "vars": {} - }, - "tag_Stack_trial640": { - "children": [], - "hosts": [ - "10.219.22.111", - "10.219.28.211", - "10.219.142.23", - "10.219.165.247", - "10.219.177.177", - "10.219.78.180", - "54.86.99.249", - "54.86.90.71", - "54.86.101.141", - "54.86.94.238" - ], - "vars": {} - }, - "tag_Stack_trial641": { - "children": [], - "hosts": [ - "10.219.10.83", - "10.219.128.183", - "10.219.158.35", - "10.219.74.178", - "10.219.71.164", - "10.219.66.5", - "54.84.167.146", - "54.84.241.208", - "54.86.61.31", - "54.86.64.168" - ], - "vars": {} - }, - "tag_Stack_trial642": { - "children": [], - "hosts": [ - "10.219.42.72", - "10.219.49.157", - "10.219.9.24", - "10.219.131.26", - "10.219.75.107", - "10.219.77.162", - "54.86.81.225", - "54.86.65.171", - "54.86.60.175", - "54.86.81.213" - ], - "vars": {} - }, - "tag_Stack_trial643": { - "children": [], - "hosts": [ - "10.219.30.9", - "10.219.24.227", - "10.219.175.97", - "10.219.151.162", - "10.219.132.1", - "10.219.97.123", - "54.86.79.232", - "54.85.127.222", - "54.86.45.250", - "54.86.53.77" - ], - "vars": {} - }, - "tag_Stack_trial644": { - "children": [], - "hosts": [ - "10.219.41.239", - "10.219.32.15", - "10.219.175.162", - "10.219.64.58", - "10.219.124.145", - "10.219.125.7", - "54.86.106.242", - "54.86.106.241", - "54.86.106.244", - "54.86.106.243" - ], - "vars": {} - }, - "tag_Stack_trial645": { - "children": [], - "hosts": [ - "10.219.31.244", - "10.219.143.239", - "10.219.140.250", - "10.219.147.25", - "10.219.93.219", - "10.219.101.155", - "54.86.98.77", - "54.86.98.21", - "54.86.38.49", - "54.85.98.144" - ], - "vars": {} - }, - "tag_Stack_trial646": { - "children": [], - "hosts": [ - "10.219.50.231", - "10.219.18.88", - "10.219.62.182", - "10.219.135.107", - "10.219.168.254", - "10.219.89.22", - "54.86.85.33", - "54.85.77.167", - "54.85.251.175", - "54.86.80.182" - ], - "vars": {} - }, - "tag_Stack_trial647": { - "children": [], - "hosts": [ - "10.219.9.54", - "10.219.61.3", - "10.219.156.2", - "10.219.102.143", - "10.219.87.56", - "10.219.67.205", - "54.86.108.101", - "54.86.108.102", - "54.86.108.119", - "54.86.108.117" - ], - "vars": {} - }, - "tag_Stack_white-ops": { - "children": [], - "hosts": [ - "10.219.6.165", - "10.219.16.100", - "10.219.43.249", - "10.219.157.181", - "10.219.127.168", - "10.219.90.31", - "54.84.148.213", - "54.84.149.162", - "54.84.15.178", - "54.208.10.193" - ], - "vars": {} - }, - "tag_Stack_zabbix": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "tag_Ticket_CO-182": { - "children": [], - "hosts": [ - "10.219.5.111", - "10.219.63.105", - "10.219.137.105", - "10.219.168.41", - "10.219.131.132", - "10.219.91.234", - "54.85.54.254", - "54.85.181.37", - "54.85.76.42", - "54.85.68.39" - ], - "vars": {} - }, - "tag_Ticket_CO-194": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "tag_Ticket_CO-251": { - "children": [], - "hosts": [ - "10.219.18.251", - "10.219.183.156", - "10.219.174.165", - "10.219.154.184", - "10.219.84.105", - "10.219.107.166", - "54.84.217.136", - "54.84.116.38", - "54.84.97.29", - "54.85.42.39" - ], - "vars": {} - }, - "tag_Ticket_CO-279": { - "children": [], - "hosts": [ - "10.219.40.115", - "10.219.49.237", - "10.219.188.5", - "10.219.112.202", - "10.219.103.26", - "10.219.81.130", - "54.85.10.98", - "54.85.16.252", - "54.84.228.141", - "54.85.65.51" - ], - "vars": {} - }, - "tag_Ticket_CO-296": { - "children": [], - "hosts": [ - "10.219.61.154", - "10.219.47.252", - "10.219.53.81", - "10.219.134.206", - "10.219.86.78", - "10.219.92.102", - "54.84.92.185", - "54.84.84.233", - "54.84.87.73", - "54.84.65.195" - ], - "vars": {} - }, - "tag_Ticket_CO-303": { - "children": [], - "hosts": [ - "10.219.31.47", - "10.219.128.227", - "10.219.173.45", - "10.219.107.101", - "10.219.91.14", - "10.219.65.35", - "54.84.207.241", - "54.85.34.98", - "54.84.245.20", - "54.84.191.190" - ], - "vars": {} - }, - "tag_Ticket_CO-330": { - "children": [], - "hosts": [ - "10.219.4.79", - "10.219.52.143", - "10.219.173.93", - "10.219.145.78", - "10.219.98.174", - "10.219.127.143", - "10.219.68.240", - "54.84.152.213", - "54.84.156.145", - "54.84.122.210", - "54.84.189.190", - "54.84.80.225", - "54.84.189.117" - ], - "vars": {} - }, - "tag_Ticket_CO-35": { - "children": [], - "hosts": [ - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com" - ], - "vars": {} - }, - "tag_Ticket_CO-351": { - "children": [], - "hosts": [ - "10.219.6.165", - "10.219.16.100", - "10.219.43.249", - "10.219.157.181", - "10.219.127.168", - "10.219.90.31", - "54.84.148.213", - "54.84.149.162", - "54.84.15.178", - "54.208.10.193" - ], - "vars": {} - }, - "tag_Ticket_CO-358": { - "children": [], - "hosts": [ - "10.219.1.9", - "10.219.4.181", - "10.219.147.195", - "10.219.132.7", - "10.219.171.92", - "10.219.68.99", - "54.84.99.227", - "54.84.164.51", - "54.84.155.209", - "54.84.142.102" - ], - "vars": {} - }, - "tag_Ticket_CO-398": { - "children": [], - "hosts": [ - "10.219.11.12", - "10.219.136.66", - "10.219.136.17", - "10.219.179.164", - "10.219.98.192", - "10.219.105.247", - "54.84.125.108", - "54.84.199.223", - "54.84.164.99", - "54.84.222.7", - "54.84.206.192", - "54.84.185.247" - ], - "vars": {} - }, - "tag_Ticket_CO-436": { - "children": [], - "hosts": [ - "10.219.28.78", - "10.219.190.234", - "10.219.186.145", - "10.219.168.89", - "10.219.127.193", - "10.219.113.16", - "54.85.13.176", - "54.84.137.179", - "54.84.242.116", - "54.84.222.25" - ], - "vars": {} - }, - "tag_Ticket_CO-478": { - "children": [], - "hosts": [ - "10.219.32.233", - "10.219.16.141", - "10.219.25.43", - "10.219.131.134", - "10.219.146.30", - "10.219.189.153", - "10.219.182.240", - "10.219.181.82", - "10.219.118.63", - "10.219.81.15", - "10.219.85.37", - "10.219.100.34", - "54.85.53.103", - "54.85.33.186", - "54.85.32.12", - "54.85.66.59", - "54.85.52.64", - "54.85.21.183", - "54.85.28.140", - "54.84.252.121" - ], - "vars": {} - }, - "tag_Ticket_CO-493": { - "children": [], - "hosts": [ - "10.219.48.166", - "10.219.49.54", - "10.219.166.184", - "10.219.85.245", - "10.219.107.232", - "10.219.126.78", - "54.84.84.30", - "54.85.71.17", - "54.84.166.253", - "54.85.71.54" - ], - "vars": {} - }, - "tag_Ticket_CO-494": { - "children": [], - "hosts": [ - "10.219.43.57", - "10.219.12.85", - "10.219.137.198", - "10.219.150.111", - "10.219.177.243", - "10.219.72.93", - "54.85.69.157", - "54.85.69.123", - "54.85.45.216", - "54.84.170.133" - ], - "vars": {} - }, - "tag_Ticket_CO-495": { - "children": [], - "hosts": [ - "10.219.47.1", - "10.219.63.147", - "10.219.130.240", - "10.219.169.253", - "10.219.130.190", - "10.219.125.232", - "54.84.23.79", - "54.85.80.174", - "54.86.39.175", - "54.85.72.146", - "54.84.47.238", - "54.84.74.125" - ], - "vars": {} - }, - "tag_Ticket_CO-546": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_Ticket_CO-549": { - "children": [], - "hosts": [ - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.120.23", - "10.219.118.52", - "10.219.177.150", - "10.219.144.224", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.16.214", - "10.219.80.212", - "10.219.91.91", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_Ticket_CO-562": { - "children": [], - "hosts": [ - "10.219.60.213", - "10.219.153.220", - "10.219.154.94", - "10.219.130.229", - "10.219.72.134", - "10.219.94.77", - "54.84.46.105", - "54.85.91.87", - "54.84.190.109", - "54.85.148.101" - ], - "vars": {} - }, - "tag_Ticket_CO-635": { - "children": [], - "hosts": [ - "10.219.39.9", - "10.219.26.28", - "10.219.60.102", - "10.219.178.85", - "10.219.108.141", - "10.219.81.29", - "54.86.57.201", - "54.85.14.238", - "54.85.75.200", - "54.86.40.17" - ], - "vars": {} - }, - "tag_Ticket_CO-636": { - "children": [], - "hosts": [ - "10.219.11.70", - "10.219.5.147", - "10.219.16.66", - "10.219.158.176", - "10.219.142.79", - "10.219.100.175", - "54.85.87.129", - "54.84.163.82", - "54.208.228.127", - "54.84.251.0" - ], - "vars": {} - }, - "tag_Ticket_CO-637": { - "children": [], - "hosts": [ - "10.219.62.192", - "10.219.41.67", - "10.219.18.78", - "10.219.185.71", - "10.219.147.74", - "10.219.98.173", - "54.86.90.15", - "54.86.90.142", - "54.86.90.152", - "54.86.90.177" - ], - "vars": {} - }, - "tag_Ticket_CO-638": { - "children": [], - "hosts": [ - "54.85.161.87", - "54.85.90.7", - "54.208.59.237", - "54.85.199.140" - ], - "vars": {} - }, - "tag_Ticket_CO-639": { - "children": [], - "hosts": [ - "10.219.17.208", - "10.219.185.186", - "10.219.154.115", - "10.219.155.180", - "10.219.103.150", - "10.219.67.120", - "54.208.141.20", - "54.209.120.55", - "54.208.210.176", - "54.209.108.61" - ], - "vars": {} - }, - "tag_Ticket_CO-640": { - "children": [], - "hosts": [ - "54.84.169.33", - "54.209.106.125", - "54.84.240.188", - "54.84.192.78" - ], - "vars": {} - }, - "tag_Ticket_CO-641": { - "children": [], - "hosts": [ - "10.219.56.242", - "10.219.30.68", - "10.219.57.108", - "10.219.133.48", - "10.219.89.90", - "10.219.111.113", - "54.84.21.94", - "54.85.48.128", - "54.85.208.32", - "54.85.27.197" - ], - "vars": {} - }, - "tag_Ticket_CO-642": { - "children": [], - "hosts": [ - "10.219.36.102", - "10.219.11.190", - "10.219.140.138", - "10.219.178.84", - "10.219.155.123", - "10.219.90.205", - "54.85.53.185", - "54.86.75.36", - "54.84.114.2", - "54.86.76.41" - ], - "vars": {} - }, - "tag_Ticket_CO-643": { - "children": [], - "hosts": [ - "10.219.16.89", - "10.219.149.40", - "10.219.142.242", - "10.219.114.207", - "10.219.79.196", - "10.219.85.43", - "54.86.102.132", - "54.86.110.180", - "54.86.110.115", - "54.86.52.195" - ], - "vars": {} - }, - "tag_Ticket_CO-644": { - "children": [], - "hosts": [ - "10.219.18.12", - "10.219.19.226", - "10.219.180.178", - "10.219.81.201", - "10.219.94.27", - "10.219.117.252", - "54.86.103.5", - "54.86.105.40", - "54.86.104.18", - "54.86.94.75" - ], - "vars": {} - }, - "tag_Ticket_CO-645": { - "children": [], - "hosts": [ - "10.219.15.194", - "10.219.12.146", - "10.219.138.98", - "10.219.145.106", - "10.219.137.205", - "10.219.86.47", - "54.85.200.49", - "54.208.45.55", - "54.85.95.0", - "54.85.119.67" - ], - "vars": {} - }, - "tag_Ticket_CO-646": { - "children": [], - "hosts": [ - "10.219.2.224", - "10.219.48.124", - "10.219.154.12", - "10.219.92.64", - "10.219.85.31", - "10.219.89.30", - "54.209.204.12", - "54.85.223.164", - "54.209.14.115", - "54.209.203.222" - ], - "vars": {} - }, - "tag_Ticket_CO-647": { - "children": [], - "hosts": [ - "10.219.14.143", - "10.219.4.55", - "10.219.130.1", - "10.219.169.68", - "10.219.180.244", - "10.219.122.228", - "54.84.54.49", - "54.85.166.231", - "54.84.245.162", - "54.85.249.26" - ], - "vars": {} - }, - "tag_Ticket_CO-648": { - "children": [], - "hosts": [ - "10.219.60.118", - "10.219.41.191", - "10.219.41.230", - "10.219.147.63", - "10.219.173.37", - "10.219.64.87", - "54.86.53.153", - "54.86.74.37", - "54.86.81.21", - "54.86.89.186" - ], - "vars": {} - }, - "tag_Ticket_CO-649": { - "children": [], - "hosts": [ - "10.219.56.83", - "10.219.36.162", - "10.219.45.70", - "10.219.177.41", - "10.219.154.211", - "10.219.96.145", - "54.86.117.161", - "54.86.117.163", - "54.86.117.162", - "54.86.111.80" - ], - "vars": {} - }, - "tag_Ticket_CO-650": { - "children": [], - "hosts": [ - "10.219.48.23", - "10.219.54.28", - "10.219.143.130", - "10.219.109.92", - "10.219.121.80", - "10.219.109.28", - "54.85.135.14", - "54.208.12.112", - "54.84.103.10", - "54.209.76.22" - ], - "vars": {} - }, - "tag_Ticket_CO-651": { - "children": [], - "hosts": [ - "10.219.47.118", - "10.219.143.228", - "10.219.187.178", - "10.219.154.203", - "10.219.88.75", - "10.219.97.207", - "54.209.74.106", - "54.85.85.59", - "54.85.48.70", - "54.208.187.98" - ], - "vars": {} - }, - "tag_Ticket_CO-652": { - "children": [], - "hosts": [ - "10.219.43.2", - "10.219.39.144", - "10.219.63.67", - "10.219.184.234", - "10.219.163.166", - "10.219.68.47", - "54.209.127.172", - "54.85.84.167", - "54.85.47.154", - "54.209.108.176" - ], - "vars": {} - }, - "tag_Ticket_CO-653": { - "children": [], - "hosts": [ - "10.219.39.139", - "10.219.37.47", - "10.219.25.26", - "10.219.136.13", - "10.219.146.42", - "10.219.78.42", - "54.85.61.212", - "54.84.190.144", - "54.85.255.219", - "54.85.173.90" - ], - "vars": {} - }, - "tag_Ticket_CO-654": { - "children": [], - "hosts": [ - "54.84.174.209", - "54.85.44.185", - "54.208.89.118", - "54.85.160.181" - ], - "vars": {} - }, - "tag_Ticket_CO-655": { - "children": [], - "hosts": [ - "10.219.36.26", - "10.219.37.213", - "10.219.142.152", - "10.219.169.135", - "10.219.138.185", - "10.219.111.126", - "54.86.117.236", - "54.86.117.237", - "54.86.116.105", - "54.86.116.199" - ], - "vars": {} - }, - "tag_Ticket_CO-666": { - "children": [], - "hosts": [ - "10.219.29.108", - "10.219.3.208", - "10.219.56.12", - "10.219.184.152", - "10.219.93.172", - "10.219.103.216", - "54.85.42.61", - "54.208.87.90", - "54.85.102.208", - "54.209.139.239" - ], - "vars": {} - }, - "tag_Ticket_CO-682": { - "children": [], - "hosts": [ - "10.219.8.78", - "10.219.59.221", - "10.219.38.61", - "10.219.62.128", - "10.219.167.28", - "10.219.165.216", - "10.219.156.153", - "10.219.67.44", - "10.219.82.113", - "54.209.162.114", - "54.209.183.210", - "54.85.80.156", - "54.84.31.76", - "54.85.52.37", - "54.85.47.190", - "54.209.177.56" - ], - "vars": {} - }, - "tag_Ticket_CO-739": { - "children": [], - "hosts": [ - "10.219.17.109", - "10.219.51.115", - "10.219.55.210", - "10.219.41.127", - "10.219.4.113", - "10.219.189.219", - "10.219.152.17", - "10.219.169.240", - "10.219.112.253", - "10.219.64.207", - "10.219.97.164", - "10.219.118.126", - "54.86.85.22", - "54.84.193.141", - "54.84.18.13", - "54.85.193.109", - "54.86.84.64", - "54.85.167.62", - "54.85.126.177", - "54.86.75.79", - "54.86.14.157", - "54.84.0.249" - ], - "vars": {} - }, - "tag_Ticket_CO-749": { - "children": [], - "hosts": [ - "10.219.59.159", - "10.219.24.179", - "10.219.9.203", - "10.219.173.38", - "10.219.77.13", - "10.219.66.9", - "54.86.71.155", - "54.86.82.149", - "54.86.77.91", - "54.86.87.25" - ], - "vars": {} - }, - "tag_Ticket_CO-750": { - "children": [], - "hosts": [ - "10.219.53.83", - "10.219.25.150", - "10.219.128.18", - "10.219.119.127", - "10.219.118.148", - "10.219.109.144", - "54.86.97.227", - "54.85.75.4", - "54.86.97.181", - "54.86.97.144" - ], - "vars": {} - }, - "tag_Ticket_CO-751": { - "children": [], - "hosts": [ - "10.219.27.75", - "10.219.129.154", - "10.219.155.112", - "10.219.123.229", - "10.219.73.211", - "10.219.114.130", - "54.86.90.204", - "54.86.78.51", - "54.86.92.153", - "54.86.91.120" - ], - "vars": {} - }, - "tag_Ticket_CO-752": { - "children": [], - "hosts": [ - "10.219.2.72", - "10.219.32.78", - "10.219.63.214", - "10.219.161.92", - "10.219.152.253", - "10.219.75.209", - "54.86.97.67", - "54.86.97.73", - "54.85.196.193", - "54.86.60.192" - ], - "vars": {} - }, - "tag_Ticket_CO-753": { - "children": [], - "hosts": [ - "10.219.10.200", - "10.219.185.101", - "10.219.163.151", - "10.219.150.33", - "10.219.114.210", - "10.219.75.150", - "54.85.193.223", - "54.84.199.152", - "54.86.55.72", - "54.86.76.239" - ], - "vars": {} - }, - "tag_Ticket_CO-754": { - "children": [], - "hosts": [ - "10.219.53.235", - "10.219.20.248", - "10.219.27.228", - "10.219.142.223", - "10.219.68.180", - "10.219.78.250", - "54.86.97.174", - "54.85.149.164", - "54.85.207.233", - "54.86.8.229" - ], - "vars": {} - }, - "tag_Ticket_CO-755": { - "children": [], - "hosts": [ - "10.219.47.66", - "10.219.52.205", - "10.219.137.67", - "10.219.185.140", - "10.219.137.49", - "10.219.110.47", - "54.86.94.149", - "54.86.88.52", - "54.84.81.3", - "54.86.93.172" - ], - "vars": {} - }, - "tag_Ticket_CO-756": { - "children": [], - "hosts": [ - "10.219.13.250", - "10.219.40.153", - "10.219.5.136", - "10.219.191.53", - "10.219.119.27", - "10.219.68.40", - "54.86.98.67", - "54.86.96.151", - "54.86.99.19", - "54.86.97.99" - ], - "vars": {} - }, - "tag_Ticket_CO-757": { - "children": [], - "hosts": [ - "10.219.20.163", - "10.219.11.33", - "10.219.136.200", - "10.219.183.41", - "10.219.187.219", - "10.219.97.127", - "54.86.100.62", - "54.85.11.117", - "54.86.98.158", - "54.86.99.25" - ], - "vars": {} - }, - "tag_Ticket_CO-758": { - "children": [], - "hosts": [ - "10.219.5.238", - "10.219.183.205", - "10.219.134.176", - "10.219.166.38", - "10.219.127.169", - "10.219.91.109", - "54.86.112.96", - "54.86.111.172", - "54.86.111.175", - "54.86.111.203" - ], - "vars": {} - }, - "tag_Ticket_CO-759": { - "children": [], - "hosts": [ - "10.219.49.11", - "10.219.138.5", - "10.219.153.9", - "10.219.165.155", - "10.219.79.157", - "10.219.121.158", - "54.86.50.215", - "54.85.248.82", - "54.85.170.154", - "54.85.148.231" - ], - "vars": {} - }, - "tag_Ticket_CO-760": { - "children": [], - "hosts": [ - "10.219.32.235", - "10.219.36.177", - "10.219.159.21", - "10.219.162.164", - "10.219.167.0", - "10.219.115.61", - "54.86.112.106", - "54.86.112.102", - "54.86.3.216", - "54.86.112.135" - ], - "vars": {} - }, - "tag_Ticket_CO-807": { - "children": [], - "hosts": [ - "10.219.35.86", - "10.219.9.213", - "10.219.141.55", - "10.219.134.179", - "10.219.155.57", - "10.219.83.87", - "54.84.156.195", - "54.86.54.174", - "54.85.37.235", - "54.85.175.102" - ], - "vars": {} - }, - "tag_Ticket_CO-810": { - "children": [], - "hosts": [ - "10.219.56.91", - "10.219.56.44", - "10.219.36.235", - "10.219.39.194", - "10.219.154.60", - "10.219.175.103", - "10.219.150.186", - "10.219.84.189", - "10.219.71.223", - "54.86.48.214", - "54.86.80.199", - "54.86.10.255", - "54.86.56.174", - "54.86.89.139", - "54.86.81.117", - "54.86.88.208" - ], - "vars": {} - }, - "tag_Ticket_CO-813": { - "children": [], - "hosts": [ - "10.219.26.152", - "10.219.6.136", - "10.219.63.95", - "10.219.130.129", - "10.219.92.4", - "10.219.68.254", - "54.86.80.163", - "54.86.78.119", - "54.86.80.36", - "54.86.80.208" - ], - "vars": {} - }, - "tag_Ticket_CO-814": { - "children": [], - "hosts": [ - "10.219.3.22", - "10.219.12.138", - "10.219.18.43", - "10.219.133.98", - "10.219.179.156", - "10.219.119.78", - "54.86.87.183", - "54.86.67.89", - "54.86.104.169", - "54.86.84.127" - ], - "vars": {} - }, - "tag_Ticket_CO-815": { - "children": [], - "hosts": [ - "10.219.22.111", - "10.219.28.211", - "10.219.142.23", - "10.219.165.247", - "10.219.177.177", - "10.219.78.180", - "54.86.99.249", - "54.86.90.71", - "54.86.101.141", - "54.86.94.238" - ], - "vars": {} - }, - "tag_Ticket_CO-816": { - "children": [], - "hosts": [ - "10.219.10.83", - "10.219.128.183", - "10.219.158.35", - "10.219.74.178", - "10.219.71.164", - "10.219.66.5", - "54.84.167.146", - "54.84.241.208", - "54.86.61.31", - "54.86.64.168" - ], - "vars": {} - }, - "tag_Ticket_CO-817": { - "children": [], - "hosts": [ - "10.219.42.72", - "10.219.49.157", - "10.219.9.24", - "10.219.131.26", - "10.219.75.107", - "10.219.77.162", - "54.86.81.225", - "54.86.65.171", - "54.86.60.175", - "54.86.81.213" - ], - "vars": {} - }, - "tag_Ticket_CO-818": { - "children": [], - "hosts": [ - "10.219.30.9", - "10.219.24.227", - "10.219.175.97", - "10.219.151.162", - "10.219.132.1", - "10.219.97.123", - "54.86.79.232", - "54.85.127.222", - "54.86.45.250", - "54.86.53.77" - ], - "vars": {} - }, - "tag_Ticket_CO-819": { - "children": [], - "hosts": [ - "10.219.41.239", - "10.219.32.15", - "10.219.175.162", - "10.219.64.58", - "10.219.124.145", - "10.219.125.7", - "54.86.106.242", - "54.86.106.241", - "54.86.106.244", - "54.86.106.243" - ], - "vars": {} - }, - "tag_Ticket_CO-820": { - "children": [], - "hosts": [ - "10.219.31.244", - "10.219.143.239", - "10.219.140.250", - "10.219.147.25", - "10.219.93.219", - "10.219.101.155", - "54.86.98.77", - "54.86.98.21", - "54.86.38.49", - "54.85.98.144" - ], - "vars": {} - }, - "tag_Ticket_CO-821": { - "children": [], - "hosts": [ - "10.219.50.231", - "10.219.18.88", - "10.219.62.182", - "10.219.135.107", - "10.219.168.254", - "10.219.89.22", - "54.86.85.33", - "54.85.77.167", - "54.85.251.175", - "54.86.80.182" - ], - "vars": {} - }, - "tag_Ticket_CO-822": { - "children": [], - "hosts": [ - "10.219.9.54", - "10.219.61.3", - "10.219.156.2", - "10.219.102.143", - "10.219.87.56", - "10.219.67.205", - "54.86.108.101", - "54.86.108.102", - "54.86.108.119", - "54.86.108.117" - ], - "vars": {} - }, - "tag_Ticket_CO-853": { - "children": [], - "hosts": [ - "10.219.51.0", - "10.219.165.236", - "10.219.136.115", - "10.219.72.12", - "10.219.69.7", - "10.219.101.208", - "54.86.119.45", - "54.86.109.129", - "54.86.109.121", - "54.86.112.246" - ], - "vars": {} - }, - "tag_Ticket_CO-854": { - "children": [], - "hosts": [ - "10.219.1.219", - "10.219.49.160", - "10.219.184.95", - "10.219.92.107", - "10.219.117.146", - "10.219.70.210", - "54.86.107.51", - "54.86.125.136", - "54.86.94.44", - "54.86.128.114" - ], - "vars": {} - }, - "tag_Ticket_CO-865": { - "children": [], - "hosts": [ - "10.219.43.48", - "10.219.132.76", - "10.219.147.27", - "10.219.95.221", - "10.219.64.89", - "10.219.85.120", - "54.86.141.183", - "54.86.141.184", - "54.86.141.187", - "54.86.103.185" - ], - "vars": {} - }, - "tag_Ticket_CO-874": { - "children": [], - "hosts": [ - "10.219.129.226", - "54.86.101.162" - ], - "vars": {} - }, - "tag_Ticket_CO-895": { - "children": [], - "hosts": [ - "10.219.152.142" - ], - "vars": {} - }, - "tag_Ticket_CO-915": { - "children": [], - "hosts": [ - "10.219.29.254", - "10.219.25.147", - "10.219.161.118", - "10.219.152.52", - "10.219.188.151", - "10.219.114.174" - ], - "vars": {} - }, - "tag_Ticket_CO-920": { - "children": [], - "hosts": [ - "10.219.62.215", - "10.219.45.160", - "10.219.10.116", - "10.219.164.5", - "10.219.147.76", - "10.219.87.108" - ], - "vars": {} - }, - "tag_customer_type_Customer": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.208.10.193", - "54.84.15.178", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.191.190", - "54.85.42.39", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.84.245.20", - "54.84.149.162", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.84.148.213", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.10.98", - "54.85.54.254", - "54.84.46.105", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.219.90.31", - "10.219.127.168", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.94.77", - "10.219.72.134", - "10.219.107.101", - "10.219.112.202", - "10.219.157.181", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.183.156", - "10.219.131.132", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.136.115", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.152.142", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.49.237", - "10.219.63.105", - "10.219.60.213", - "10.219.5.111", - "10.219.40.115", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.83.87", - "10.219.174.165", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.9.213", - "10.219.35.86" - ], - "vars": {} - }, - "tag_customer_type_Dev": { - "children": [], - "hosts": [ - "10.219.62.215", - "10.219.45.160", - "10.219.10.116", - "10.219.43.57", - "10.219.47.1", - "10.219.63.147", - "10.219.12.85", - "10.219.130.240", - "10.219.169.253", - "10.219.130.190", - "10.219.137.198", - "10.219.150.111", - "10.219.177.243", - "10.219.125.232", - "10.219.72.93", - "10.219.164.5", - "10.219.147.76", - "10.219.87.108" - ], - "vars": {} - }, - "tag_customer_type_Ops": { - "children": [], - "hosts": [ - "10.219.43.120", - "54.84.42.12" - ], - "vars": {} - }, - "tag_customer_type_POC": { - "children": [], - "hosts": [ - "54.84.65.195", - "54.84.87.73", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.252.121", - "54.85.28.140", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.199.140", - "54.209.108.61", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.88.208", - "54.86.81.117", - "54.84.84.233", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.85.37.235", - "54.86.54.174", - "54.86.89.139", - "54.86.56.174", - "54.84.92.185", - "54.84.99.227", - "54.84.125.108", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.85.69.157", - "10.219.92.102", - "10.219.86.78", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.100.34", - "10.219.85.37", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.67.120", - "10.219.103.150", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.118.126", - "10.219.97.164", - "10.219.81.29", - "10.219.108.141", - "10.219.90.205", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.71.223", - "10.219.84.189", - "10.219.134.206", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.174.165", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.43.57", - "10.219.114.174", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254" - ], - "vars": {} - }, - "tag_customer_type_Test": { - "children": [], - "hosts": [ - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.120.23", - "10.219.118.52", - "10.219.177.150", - "10.219.144.224", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.16.214", - "10.219.80.212", - "10.219.91.91", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_customer_type_Trial": { - "children": [], - "hosts": [ - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.77.91", - "54.86.99.19", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.173.38", - "10.219.191.53", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.67.120", - "10.219.103.150", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.90.205", - "10.219.121.158", - "10.219.79.157", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.136.13", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.17.208", - "10.219.54.28", - "10.219.48.23", - "10.219.25.26", - "10.219.37.47", - "10.219.47.118", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11" - ], - "vars": {} - }, - "tag_customer_type_dev": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_stack_version_SR_8_HF1": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_stackmakr_version_9109": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_stackmakr_version_SEC-1553-20140326T1633-SR_8_HF1": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.65.195", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.84.92.185", - "54.84.148.213", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.92.102", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.118.126", - "10.219.97.164", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.134.206", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.136.115", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.144.224", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.152.142", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.91.91", - "10.219.147.76", - "10.219.164.5", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_whisper_version_99": { - "children": [], - "hosts": [ - "10.219.41.51", - "10.219.59.57", - "10.219.26.121", - "10.219.179.119", - "10.219.160.142", - "10.219.119.218" - ], - "vars": {} - }, - "tag_whisper_version_SEC-1318-20130212T1441-WR_16_HF2": { - "children": [], - "hosts": [ - "10.219.61.154", - "10.219.47.252", - "10.219.53.81", - "10.219.134.206", - "10.219.86.78", - "10.219.92.102", - "54.84.92.185", - "54.84.84.233", - "54.84.87.73", - "54.84.65.195" - ], - "vars": {} - }, - "tag_whisper_version_SEC-1518-20140319T1154-WR_17_HF2": { - "children": [], - "hosts": [ - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.84.148.213", - "54.84.99.227", - "54.84.125.108", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.85.69.157", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.144.224", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.16.214", - "10.219.80.212", - "10.219.91.91", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "tag_whisper_version_SEC-1639-20140414T1539-WR_17_HF3": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.189.117", - "54.84.80.225", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.189.190", - "54.84.122.210", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.219.127.143", - "10.219.98.174", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.145.78", - "10.219.173.93", - "10.219.136.115", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.152.142", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.114.174", - "10.219.87.108", - "10.219.147.76", - "10.219.164.5", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215" - ], - "vars": {} - }, - "tag_whisper_version____SEC-1639-20140414T1539-WR_17_HF3": { - "children": [], - "hosts": [ - "10.219.55.210", - "10.219.41.127", - "10.219.4.113", - "10.219.169.240", - "10.219.97.164", - "10.219.118.126", - "54.84.18.13", - "54.85.193.109", - "54.85.126.177", - "54.84.0.249" - ], - "vars": {} - }, - "type_c1_medium": { - "children": [], - "hosts": [ - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com" - ], - "vars": {} - }, - "type_c3_2xlarge": { - "children": [], - "hosts": [ - "54.86.141.187", - "54.84.65.195", - "54.85.28.140", - "54.84.166.253", - "54.85.65.51", - "54.84.245.20", - "54.84.240.188", - "54.209.76.22", - "54.208.89.118", - "54.209.14.115", - "54.86.52.195", - "54.86.94.75", - "54.86.91.120", - "54.86.97.144", - "54.86.61.31", - "54.86.106.244", - "54.86.108.117", - "54.84.164.51", - "54.84.97.29", - "54.85.52.64", - "54.85.69.123", - "54.85.72.146", - "54.84.190.109", - "54.208.210.176", - "54.208.45.55", - "54.85.48.70", - "54.84.245.162", - "54.84.114.2", - "54.85.170.154", - "54.86.116.105", - "54.86.55.72", - "54.86.88.52", - "54.86.98.158", - "54.86.111.172", - "54.86.112.102", - "54.86.101.141", - "54.86.45.250", - "54.86.98.21", - "54.85.90.7", - "54.208.87.90", - "54.84.190.144", - "54.209.127.172", - "54.85.87.129", - "54.84.21.94", - "54.86.57.201", - "54.86.74.37", - "54.86.117.161", - "54.86.71.155", - "54.86.97.67", - "54.86.97.174", - "54.86.98.67", - "54.86.90.15", - "54.86.78.119", - "54.86.65.171", - "54.86.67.89", - "54.86.85.33", - "10.219.95.221", - "10.219.92.102", - "10.219.85.37", - "10.219.85.245", - "10.219.81.130", - "10.219.107.101", - "10.219.109.28", - "10.219.85.31", - "10.219.79.196", - "10.219.117.252", - "10.219.114.130", - "10.219.109.144", - "10.219.74.178", - "10.219.64.58", - "10.219.67.205", - "10.219.147.195", - "10.219.154.184", - "10.219.182.240", - "10.219.150.111", - "10.219.169.253", - "10.219.154.94", - "10.219.154.115", - "10.219.138.98", - "10.219.154.203", - "10.219.169.68", - "10.219.155.123", - "10.219.153.9", - "10.219.138.185", - "10.219.163.151", - "10.219.185.140", - "10.219.183.41", - "10.219.134.176", - "10.219.159.21", - "10.219.177.177", - "10.219.132.1", - "10.219.143.239", - "10.219.154.235", - "10.219.56.12", - "10.219.25.26", - "10.219.39.144", - "10.219.5.147", - "10.219.56.242", - "10.219.39.9", - "10.219.41.230", - "10.219.56.83", - "10.219.59.159", - "10.219.2.72", - "10.219.53.235", - "10.219.13.250", - "10.219.62.192", - "10.219.63.95", - "10.219.49.157", - "10.219.18.43", - "10.219.50.231", - "10.219.161.188", - "10.219.161.118", - "10.219.10.116", - "10.219.152.208", - "10.219.167.181" - ], - "vars": {} - }, - "type_c3_4xlarge": { - "children": [], - "hosts": [ - "10.219.56.44", - "10.219.12.148", - "10.219.132.135", - "10.219.131.132", - "10.219.92.169", - "54.86.80.199", - "54.85.76.42" - ], - "vars": {} - }, - "type_c3_8xlarge": { - "children": [], - "hosts": [ - "10.219.4.79", - "10.219.68.240", - "54.84.152.213" - ], - "vars": {} - }, - "type_hs1_8xlarge": { - "children": [], - "hosts": [ - "54.86.128.114", - "54.84.189.117", - "54.84.80.225", - "54.84.0.249", - "54.86.14.157", - "54.86.75.79", - "54.84.189.190", - "54.85.126.177", - "54.85.167.62", - "54.86.84.64", - "54.86.125.136", - "54.84.180.204", - "54.84.103.231", - "54.84.18.13", - "54.84.193.141", - "54.86.85.22", - "54.86.107.51", - "10.219.70.210", - "10.219.127.143", - "10.219.98.174", - "10.219.118.126", - "10.219.64.207", - "10.219.112.253", - "10.219.145.78", - "10.219.169.240", - "10.219.152.17", - "10.219.189.219", - "10.219.184.95", - "10.219.62.184", - "10.219.36.226", - "10.219.55.210", - "10.219.51.115", - "10.219.17.109", - "10.219.1.219" - ], - "vars": {} - }, - "type_m1_large": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "54.84.206.192", - "54.84.222.7", - "54.84.122.210", - "54.86.39.175", - "54.86.101.162", - "54.208.96.71", - "54.84.156.145", - "54.84.23.79", - "10.219.72.12", - "10.219.92.107", - "10.219.85.120", - "10.219.100.237", - "10.219.115.245", - "10.219.98.192", - "10.219.91.14", - "10.219.84.105", - "10.219.118.63", - "10.219.107.232", - "10.219.94.77", - "10.219.115.77", - "10.219.103.150", - "10.219.93.172", - "10.219.121.80", - "10.219.97.207", - "10.219.92.64", - "10.219.111.113", - "10.219.112.202", - "10.219.97.164", - "10.219.108.141", - "10.219.118.52", - "10.219.79.157", - "10.219.85.43", - "10.219.66.9", - "10.219.81.201", - "10.219.123.229", - "10.219.75.150", - "10.219.68.180", - "10.219.119.127", - "10.219.119.27", - "10.219.127.169", - "10.219.68.254", - "10.219.77.162", - "10.219.71.164", - "10.219.124.145", - "10.219.87.56", - "10.219.101.155", - "10.219.171.92", - "10.219.179.164", - "10.219.173.93", - "10.219.168.89", - "10.219.190.234", - "10.219.128.227", - "10.219.183.156", - "10.219.181.82", - "10.219.146.30", - "10.219.137.198", - "10.219.130.240", - "10.219.160.142", - "10.219.130.229", - "10.219.137.105", - "10.219.136.115", - "10.219.155.180", - "10.219.137.205", - "10.219.143.228", - "10.219.136.13", - "10.219.184.234", - "10.219.180.244", - "10.219.158.176", - "10.219.165.216", - "10.219.140.138", - "10.219.165.155", - "10.219.134.179", - "10.219.173.37", - "10.219.142.242", - "10.219.154.211", - "10.219.169.135", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.187.219", - "10.219.137.67", - "10.219.185.71", - "10.219.162.164", - "10.219.183.205", - "10.219.165.247", - "10.219.128.183", - "10.219.151.162", - "10.219.133.98", - "10.219.135.107", - "10.219.147.25", - "10.219.154.60", - "10.219.164.210", - "10.219.161.181", - "10.219.144.224", - "10.219.132.76", - "10.219.129.226", - "10.219.142.198", - "10.219.177.248", - "10.219.14.89", - "10.219.53.81", - "10.219.47.252", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225", - "10.219.43.249", - "10.219.16.100", - "10.219.1.9", - "10.219.52.143", - "10.219.16.141", - "10.219.48.166", - "10.219.12.85", - "10.219.47.1", - "10.219.26.121", - "10.219.41.51", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.15.194", - "10.219.29.108", - "10.219.54.28", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.4.55", - "10.219.11.70", - "10.219.30.68", - "10.219.59.221", - "10.219.41.127", - "10.219.26.28", - "10.219.36.102", - "10.219.9.213", - "10.219.60.118", - "10.219.45.70", - "10.219.9.203", - "10.219.19.226", - "10.219.36.26", - "10.219.63.214", - "10.219.27.228", - "10.219.25.150", - "10.219.11.33", - "10.219.40.153", - "10.219.52.205", - "10.219.36.177", - "10.219.41.67", - "10.219.6.136", - "10.219.28.211", - "10.219.9.24", - "10.219.12.138", - "10.219.30.9", - "10.219.41.239", - "10.219.9.54", - "10.219.62.182", - "10.219.39.194", - "10.219.49.160", - "10.219.91.91", - "10.219.164.5", - "10.219.134.89", - "10.219.152.52", - "10.219.29.254", - "10.219.45.160", - "10.219.111.100", - "10.219.132.127", - "10.219.111.13", - "10.219.166.102" - ], - "vars": {} - }, - "type_m1_medium": { - "children": [], - "hosts": [ - "10.219.50.248", - "54.84.149.25", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com" - ], - "vars": {} - }, - "type_m1_small": { - "children": [], - "hosts": [ - "10.219.23.181", - "10.219.164.166", - "10.219.123.163", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "54.208.124.14", - "54.84.37.150", - "54.84.41.152", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com" - ], - "vars": {} - }, - "type_m1_xlarge": { - "children": [], - "hosts": [ - "54.86.103.185", - "54.84.142.102", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.170.133", - "54.84.74.125", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.199.140", - "54.209.108.61", - "54.84.192.78", - "54.85.119.67", - "54.209.139.239", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.209.203.222", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.80.182", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.155.209", - "54.85.34.98", - "54.84.116.38", - "54.85.66.59", - "54.85.71.17", - "54.85.45.216", - "54.84.47.238", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.208.59.237", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.85.102.208", - "54.208.12.112", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.75.200", - "54.86.75.36", - "54.85.248.82", - "54.86.77.91", - "54.86.99.19", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.60.175", - "54.86.80.36", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.89.139", - "54.86.56.174", - "54.86.141.184", - "54.84.42.12", - "54.84.99.227", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.84.84.30", - "54.85.80.174", - "54.85.10.98", - "54.85.54.254", - "54.84.46.105", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.48.128", - "54.85.14.238", - "54.85.53.185", - "54.86.50.215", - "54.86.53.153", - "54.86.117.163", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.103.5", - "54.86.97.73", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.81.225", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.10.255", - "54.86.48.214", - "54.86.141.183", - "54.85.69.157", - "10.219.64.89", - "10.219.64.217", - "10.219.78.69", - "10.219.68.99", - "10.219.65.35", - "10.219.107.166", - "10.219.81.15", - "10.219.126.78", - "10.219.72.93", - "10.219.125.232", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.72.134", - "10.219.67.120", - "10.219.86.47", - "10.219.103.216", - "10.219.109.92", - "10.219.68.47", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.122.228", - "10.219.100.175", - "10.219.89.90", - "10.219.81.29", - "10.219.120.23", - "10.219.90.205", - "10.219.121.158", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.94.27", - "10.219.111.126", - "10.219.77.13", - "10.219.73.211", - "10.219.75.209", - "10.219.78.250", - "10.219.114.210", - "10.219.110.47", - "10.219.118.148", - "10.219.68.40", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.98.173", - "10.219.92.4", - "10.219.78.180", - "10.219.66.5", - "10.219.75.107", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.89.22", - "10.219.102.143", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.132.7", - "10.219.173.45", - "10.219.174.165", - "10.219.189.153", - "10.219.166.184", - "10.219.177.243", - "10.219.130.190", - "10.219.179.119", - "10.219.153.220", - "10.219.168.41", - "10.219.188.5", - "10.219.185.186", - "10.219.145.106", - "10.219.184.152", - "10.219.143.130", - "10.219.187.178", - "10.219.146.42", - "10.219.163.166", - "10.219.154.12", - "10.219.130.1", - "10.219.142.79", - "10.219.133.48", - "10.219.177.150", - "10.219.178.85", - "10.219.178.84", - "10.219.138.5", - "10.219.173.38", - "10.219.191.53", - "10.219.147.63", - "10.219.149.40", - "10.219.177.41", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.142.223", - "10.219.185.101", - "10.219.137.49", - "10.219.128.18", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.131.26", - "10.219.130.129", - "10.219.142.23", - "10.219.158.35", - "10.219.179.156", - "10.219.175.97", - "10.219.175.162", - "10.219.168.254", - "10.219.140.250", - "10.219.156.2", - "10.219.150.186", - "10.219.175.103", - "10.219.147.27", - "10.219.182.219", - "10.219.43.120", - "10.219.4.181", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.49.54", - "10.219.63.147", - "10.219.49.237", - "10.219.63.105", - "10.219.59.57", - "10.219.60.213", - "10.219.17.208", - "10.219.12.146", - "10.219.3.208", - "10.219.48.23", - "10.219.63.67", - "10.219.37.47", - "10.219.47.118", - "10.219.2.224", - "10.219.14.143", - "10.219.16.66", - "10.219.57.108", - "10.219.60.102", - "10.219.11.190", - "10.219.49.11", - "10.219.41.191", - "10.219.36.162", - "10.219.16.89", - "10.219.37.213", - "10.219.24.179", - "10.219.18.12", - "10.219.32.78", - "10.219.27.75", - "10.219.10.200", - "10.219.20.248", - "10.219.5.136", - "10.219.53.83", - "10.219.20.163", - "10.219.47.66", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.26.152", - "10.219.22.111", - "10.219.10.83", - "10.219.42.72", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.61.3", - "10.219.31.244", - "10.219.18.88", - "10.219.36.235", - "10.219.56.91", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.147.76", - "10.219.148.67", - "10.219.188.151", - "10.219.25.147", - "10.219.62.215", - "10.219.4.252", - "10.219.120.83", - "10.219.130.19", - "10.219.2.175", - "10.219.114.9", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "type_m2_4xlarge": { - "children": [], - "hosts": [ - "54.86.112.246", - "54.86.109.121", - "54.86.94.44", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.185.247", - "54.84.222.25", - "54.84.252.121", - "54.84.242.116", - "54.85.157.183", - "54.209.177.56", - "54.85.47.190", - "54.86.51.77", - "54.85.175.102", - "54.84.84.233", - "54.84.149.162", - "54.84.164.99", - "54.84.199.223", - "54.84.137.179", - "54.85.32.12", - "54.84.189.79", - "54.85.52.37", - "54.84.31.76", - "54.84.75.99", - "54.85.37.235", - "54.86.54.174", - "54.86.109.129", - "54.84.92.185", - "54.84.148.213", - "54.84.125.108", - "54.85.13.176", - "54.85.53.103", - "54.85.146.9", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.86.23.145", - "54.84.156.195", - "54.86.119.45", - "10.219.101.208", - "10.219.69.7", - "10.219.117.146", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.105.247", - "10.219.113.16", - "10.219.100.34", - "10.219.127.193", - "10.219.90.109", - "10.219.82.113", - "10.219.67.44", - "10.219.103.178", - "10.219.83.87", - "10.219.134.206", - "10.219.157.181", - "10.219.136.17", - "10.219.136.66", - "10.219.186.145", - "10.219.131.134", - "10.219.186.171", - "10.219.156.153", - "10.219.167.28", - "10.219.173.21", - "10.219.155.57", - "10.219.141.55", - "10.219.165.236", - "10.219.152.142", - "10.219.61.154", - "10.219.6.165", - "10.219.11.12", - "10.219.28.78", - "10.219.32.233", - "10.219.1.1", - "10.219.62.128", - "10.219.38.61", - "10.219.8.78", - "10.219.4.113", - "10.219.2.93", - "10.219.35.86", - "10.219.51.0" - ], - "vars": {} - }, - "type_t1_micro": { - "children": [], - "hosts": [ - "10.217.79.144" - ], - "vars": {} - }, - "us-east-1": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-54-205-251-95.compute-1.amazonaws.com", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.41.152", - "54.84.65.195", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "54.84.37.150", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.86.101.162", - "54.208.124.14", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "54.208.96.71", - "54.84.92.185", - "54.84.42.12", - "54.84.148.213", - "54.84.149.25", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.217.79.144", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.123.163", - "10.219.92.102", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.118.126", - "10.219.97.164", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.164.166", - "10.219.134.206", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.160.142", - "10.219.179.119", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.136.115", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.164.210", - "10.219.161.181", - "10.219.144.224", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.129.226", - "10.219.142.198", - "10.219.152.142", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.23.181", - "10.219.14.89", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.43.120", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.50.248", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.26.121", - "10.219.59.57", - "10.219.41.51", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.91.91", - "10.219.147.76", - "10.219.164.5", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215", - "10.219.4.252", - "10.219.111.100", - "10.219.120.83", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.2.175", - "10.219.111.13", - "10.219.114.9", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231", - "10.219.58.233" - ], - "vars": {} - }, - "us-east-1a": { - "children": [], - "hosts": [ - "ec2-50-17-62-124.compute-1.amazonaws.com", - "ec2-54-221-223-232.compute-1.amazonaws.com", - "ec2-54-204-191-195.compute-1.amazonaws.com", - "54.208.124.14", - "ec2-54-197-167-3.compute-1.amazonaws.com", - "ec2-23-22-96-198.compute-1.amazonaws.com", - "ec2-54-204-188-107.compute-1.amazonaws.com", - "ec2-54-205-127-141.compute-1.amazonaws.com", - "ec2-54-198-214-42.compute-1.amazonaws.com", - "54.208.96.71", - "54.84.92.185", - "54.84.42.12", - "54.84.148.213", - "54.84.149.25", - "54.84.99.227", - "54.84.125.108", - "54.84.180.204", - "54.84.156.145", - "54.84.103.231", - "54.85.13.176", - "54.84.217.136", - "54.84.207.241", - "54.85.33.186", - "54.85.53.103", - "54.84.84.30", - "54.85.80.174", - "54.84.23.79", - "54.85.10.98", - "54.85.54.254", - "54.85.146.9", - "54.84.46.105", - "54.85.90.7", - "54.85.161.87", - "54.208.141.20", - "54.84.169.33", - "54.85.200.49", - "54.208.87.90", - "54.85.42.61", - "54.85.135.14", - "54.85.84.167", - "54.84.190.144", - "54.209.127.172", - "54.85.61.212", - "54.209.74.106", - "54.84.174.209", - "54.209.204.12", - "54.84.54.49", - "54.84.163.82", - "54.85.87.129", - "54.85.48.128", - "54.84.21.94", - "54.85.80.156", - "54.209.183.210", - "54.209.162.114", - "54.85.193.109", - "54.84.18.13", - "54.86.23.145", - "54.85.14.238", - "54.86.57.201", - "54.85.53.185", - "54.86.50.215", - "54.84.193.141", - "54.86.85.22", - "54.84.156.195", - "54.86.74.37", - "54.86.53.153", - "54.86.117.163", - "54.86.117.161", - "54.86.102.132", - "54.86.117.236", - "54.86.82.149", - "54.86.71.155", - "54.86.103.5", - "54.86.97.73", - "54.86.97.67", - "54.86.90.204", - "54.85.193.223", - "54.85.149.164", - "54.86.97.174", - "54.86.96.151", - "54.86.97.227", - "54.86.100.62", - "54.86.94.149", - "54.86.98.67", - "54.86.112.106", - "54.86.112.96", - "54.86.90.142", - "54.86.90.15", - "54.86.78.119", - "54.86.80.163", - "54.86.99.249", - "54.84.167.146", - "54.86.65.171", - "54.86.81.225", - "54.86.67.89", - "54.86.87.183", - "54.86.106.242", - "54.86.79.232", - "54.86.108.101", - "54.86.98.77", - "54.85.77.167", - "54.86.85.33", - "54.86.10.255", - "54.86.80.199", - "54.86.48.214", - "54.84.152.213", - "54.86.119.45", - "54.86.107.51", - "54.86.141.183", - "54.85.69.157", - "10.219.23.181", - "10.219.14.89", - "10.219.53.81", - "10.219.47.252", - "10.219.61.154", - "10.219.43.120", - "10.219.26.182", - "10.219.33.86", - "10.219.57.225", - "10.219.43.249", - "10.219.16.100", - "10.219.6.165", - "10.219.50.248", - "10.219.4.181", - "10.219.1.9", - "10.219.11.12", - "10.219.62.184", - "10.219.52.143", - "10.219.36.226", - "10.219.28.78", - "10.219.18.251", - "10.219.31.47", - "10.219.25.43", - "10.219.16.141", - "10.219.32.233", - "10.219.49.54", - "10.219.48.166", - "10.219.12.85", - "10.219.63.147", - "10.219.47.1", - "10.219.49.237", - "10.219.63.105", - "10.219.26.121", - "10.219.59.57", - "10.219.41.51", - "10.219.1.1", - "10.219.60.213", - "10.219.12.148", - "10.219.5.111", - "10.219.40.115", - "10.219.0.222", - "10.219.17.208", - "10.219.12.146", - "10.219.15.194", - "10.219.56.12", - "10.219.3.208", - "10.219.29.108", - "10.219.54.28", - "10.219.48.23", - "10.219.63.67", - "10.219.25.26", - "10.219.39.144", - "10.219.37.47", - "10.219.47.118", - "10.219.43.2", - "10.219.39.139", - "10.219.48.124", - "10.219.2.224", - "10.219.4.55", - "10.219.14.143", - "10.219.16.66", - "10.219.5.147", - "10.219.11.70", - "10.219.57.108", - "10.219.30.68", - "10.219.56.242", - "10.219.62.128", - "10.219.38.61", - "10.219.59.221", - "10.219.8.78", - "10.219.4.113", - "10.219.41.127", - "10.219.55.210", - "10.219.2.93", - "10.219.60.102", - "10.219.26.28", - "10.219.39.9", - "10.219.11.190", - "10.219.36.102", - "10.219.49.11", - "10.219.51.115", - "10.219.17.109", - "10.219.9.213", - "10.219.35.86", - "10.219.41.230", - "10.219.41.191", - "10.219.60.118", - "10.219.45.70", - "10.219.36.162", - "10.219.56.83", - "10.219.16.89", - "10.219.9.203", - "10.219.37.213", - "10.219.19.226", - "10.219.24.179", - "10.219.59.159", - "10.219.18.12", - "10.219.36.26", - "10.219.63.214", - "10.219.32.78", - "10.219.2.72", - "10.219.27.75", - "10.219.10.200", - "10.219.27.228", - "10.219.20.248", - "10.219.53.235", - "10.219.25.150", - "10.219.5.136", - "10.219.11.33", - "10.219.40.153", - "10.219.53.83", - "10.219.20.163", - "10.219.52.205", - "10.219.47.66", - "10.219.13.250", - "10.219.36.177", - "10.219.32.235", - "10.219.5.238", - "10.219.18.78", - "10.219.41.67", - "10.219.62.192", - "10.219.63.95", - "10.219.6.136", - "10.219.26.152", - "10.219.28.211", - "10.219.22.111", - "10.219.10.83", - "10.219.9.24", - "10.219.49.157", - "10.219.42.72", - "10.219.18.43", - "10.219.12.138", - "10.219.3.22", - "10.219.32.15", - "10.219.24.227", - "10.219.30.9", - "10.219.41.239", - "10.219.61.3", - "10.219.31.244", - "10.219.9.54", - "10.219.62.182", - "10.219.18.88", - "10.219.50.231", - "10.219.39.194", - "10.219.36.235", - "10.219.56.44", - "10.219.56.91", - "10.219.4.79", - "10.219.51.0", - "10.219.49.160", - "10.219.1.219", - "10.219.43.48", - "10.219.43.57", - "10.219.16.214", - "10.219.25.147", - "10.219.29.254", - "10.219.10.116", - "10.219.45.160", - "10.219.62.215", - "10.219.4.252", - "10.219.2.175", - "10.219.58.233" - ], - "vars": {} - }, - "us-east-1b": { - "children": [], - "hosts": [ - "ec2-54-205-251-95.compute-1.amazonaws.com", - "54.86.112.246", - "54.86.109.121", - "54.86.128.114", - "54.86.94.44", - "54.86.103.185", - "54.86.141.187", - "54.84.41.152", - "54.84.65.195", - "54.84.87.73", - "54.208.10.193", - "54.84.15.178", - "54.84.142.102", - "54.84.185.247", - "54.84.206.192", - "54.84.189.117", - "54.84.80.225", - "54.84.222.25", - "54.84.252.121", - "54.85.28.140", - "54.84.191.190", - "54.85.42.39", - "54.85.21.183", - "54.85.71.54", - "54.84.166.253", - "54.84.170.133", - "54.84.74.125", - "54.85.65.51", - "54.84.242.116", - "54.85.68.39", - "54.84.228.141", - "54.85.148.101", - "54.85.157.183", - "54.85.199.140", - "54.209.108.61", - "54.84.245.20", - "54.84.192.78", - "54.84.240.188", - "54.85.119.67", - "54.209.139.239", - "54.209.76.22", - "54.84.103.10", - "54.209.108.176", - "54.208.187.98", - "54.85.173.90", - "54.85.160.181", - "54.208.89.118", - "54.209.203.222", - "54.209.14.115", - "54.85.249.26", - "54.84.251.0", - "54.85.27.197", - "54.209.177.56", - "54.85.47.190", - "54.84.0.249", - "54.86.51.77", - "54.86.40.17", - "54.86.76.41", - "54.85.148.231", - "54.86.14.157", - "54.86.75.79", - "54.85.175.102", - "54.86.52.195", - "54.86.110.115", - "54.86.111.80", - "54.86.89.186", - "54.86.94.75", - "54.86.104.18", - "54.86.116.199", - "54.86.87.25", - "54.86.91.120", - "54.86.92.153", - "54.86.60.192", - "54.86.8.229", - "54.86.76.239", - "54.86.97.144", - "54.86.93.172", - "54.86.97.181", - "54.86.97.99", - "54.86.99.25", - "54.86.112.135", - "54.86.111.203", - "54.86.90.177", - "54.86.80.208", - "54.86.94.238", - "54.86.64.168", - "54.86.81.213", - "54.86.61.31", - "54.86.84.127", - "54.86.53.77", - "54.86.106.243", - "54.86.106.244", - "54.86.80.182", - "54.86.108.117", - "54.86.108.119", - "54.85.98.144", - "54.86.88.208", - "54.86.81.117", - "10.219.68.240", - "10.219.101.208", - "10.219.69.7", - "10.219.72.12", - "10.219.70.210", - "10.219.117.146", - "10.219.92.107", - "10.219.85.120", - "10.219.64.89", - "10.219.95.221", - "10.217.79.144", - "10.219.100.237", - "10.219.64.217", - "10.219.115.245", - "10.219.78.69", - "10.219.123.163", - "10.219.92.102", - "10.219.86.78", - "10.219.90.31", - "10.219.127.168", - "10.219.68.99", - "10.219.105.247", - "10.219.98.192", - "10.219.127.143", - "10.219.98.174", - "10.219.113.16", - "10.219.100.34", - "10.219.85.37", - "10.219.65.35", - "10.219.107.166", - "10.219.91.14", - "10.219.84.105", - "10.219.81.15", - "10.219.118.63", - "10.219.126.78", - "10.219.107.232", - "10.219.85.245", - "10.219.72.93", - "10.219.125.232", - "10.219.81.130", - "10.219.127.193", - "10.219.91.234", - "10.219.103.26", - "10.219.119.218", - "10.219.92.169", - "10.219.94.77", - "10.219.72.134", - "10.219.90.109", - "10.219.115.77", - "10.219.67.120", - "10.219.103.150", - "10.219.107.101", - "10.219.86.47", - "10.219.103.216", - "10.219.93.172", - "10.219.109.28", - "10.219.121.80", - "10.219.109.92", - "10.219.68.47", - "10.219.97.207", - "10.219.88.75", - "10.219.78.42", - "10.219.89.30", - "10.219.85.31", - "10.219.92.64", - "10.219.122.228", - "10.219.100.175", - "10.219.111.113", - "10.219.89.90", - "10.219.82.113", - "10.219.67.44", - "10.219.112.202", - "10.219.118.126", - "10.219.97.164", - "10.219.103.178", - "10.219.81.29", - "10.219.108.141", - "10.219.120.23", - "10.219.90.205", - "10.219.118.52", - "10.219.121.158", - "10.219.79.157", - "10.219.64.207", - "10.219.112.253", - "10.219.83.87", - "10.219.85.43", - "10.219.79.196", - "10.219.114.207", - "10.219.96.145", - "10.219.64.87", - "10.219.66.9", - "10.219.117.252", - "10.219.94.27", - "10.219.111.126", - "10.219.81.201", - "10.219.77.13", - "10.219.114.130", - "10.219.73.211", - "10.219.123.229", - "10.219.75.209", - "10.219.75.150", - "10.219.78.250", - "10.219.68.180", - "10.219.114.210", - "10.219.109.144", - "10.219.110.47", - "10.219.118.148", - "10.219.119.127", - "10.219.68.40", - "10.219.119.27", - "10.219.97.127", - "10.219.115.61", - "10.219.91.109", - "10.219.127.169", - "10.219.98.173", - "10.219.68.254", - "10.219.92.4", - "10.219.78.180", - "10.219.77.162", - "10.219.66.5", - "10.219.75.107", - "10.219.71.164", - "10.219.74.178", - "10.219.119.78", - "10.219.97.123", - "10.219.125.7", - "10.219.124.145", - "10.219.64.58", - "10.219.89.22", - "10.219.67.205", - "10.219.87.56", - "10.219.102.143", - "10.219.101.155", - "10.219.93.219", - "10.219.71.223", - "10.219.84.189", - "10.219.114.174", - "10.219.87.108", - "10.219.80.212", - "10.219.91.91", - "10.219.111.100", - "10.219.120.83", - "10.219.111.13", - "10.219.114.9" - ], - "vars": {} - }, - "us-east-1c": { - "children": [], - "hosts": [ - "ec2-54-242-229-223.compute-1.amazonaws.com", - "ec2-50-19-44-148.compute-1.amazonaws.com", - "ec2-54-80-236-42.compute-1.amazonaws.com", - "ec2-174-129-105-52.compute-1.amazonaws.com", - "ec2-23-20-41-80.compute-1.amazonaws.com", - "ec2-54-237-120-196.compute-1.amazonaws.com", - "ec2-50-16-237-144.compute-1.amazonaws.com", - "54.84.37.150", - "54.84.84.233", - "54.84.149.162", - "54.84.155.209", - "54.84.164.51", - "54.84.222.7", - "54.84.164.99", - "54.84.199.223", - "54.84.189.190", - "54.84.122.210", - "54.84.137.179", - "54.85.34.98", - "54.84.97.29", - "54.84.116.38", - "54.85.52.64", - "54.85.66.59", - "54.85.32.12", - "54.85.71.17", - "54.85.45.216", - "54.85.69.123", - "54.84.47.238", - "54.85.72.146", - "54.86.39.175", - "54.85.76.42", - "54.84.190.109", - "54.85.91.87", - "54.85.181.37", - "54.85.16.252", - "54.84.189.79", - "54.208.59.237", - "54.208.210.176", - "54.209.120.55", - "54.209.106.125", - "54.85.95.0", - "54.208.45.55", - "54.85.102.208", - "54.208.12.112", - "54.85.48.70", - "54.85.85.59", - "54.85.255.219", - "54.85.47.154", - "54.85.44.185", - "54.85.223.164", - "54.84.245.162", - "54.85.166.231", - "54.208.228.127", - "54.85.208.32", - "54.85.52.37", - "54.84.31.76", - "54.85.126.177", - "54.84.75.99", - "54.85.75.200", - "54.84.114.2", - "54.86.75.36", - "54.85.170.154", - "54.85.248.82", - "54.85.167.62", - "54.86.84.64", - "54.86.77.91", - "54.86.99.19", - "54.85.37.235", - "54.86.54.174", - "54.86.81.21", - "54.86.110.180", - "54.86.117.162", - "54.86.116.105", - "54.86.117.237", - "54.86.105.40", - "54.86.78.51", - "54.85.196.193", - "54.86.55.72", - "54.85.207.233", - "54.84.199.152", - "54.84.81.3", - "54.86.88.52", - "54.86.98.158", - "54.85.75.4", - "54.85.11.117", - "54.86.3.216", - "54.86.111.175", - "54.86.90.152", - "54.86.111.172", - "54.86.112.102", - "54.86.60.175", - "54.86.80.36", - "54.86.101.141", - "54.86.90.71", - "54.84.241.208", - "54.86.104.169", - "54.86.45.250", - "54.85.127.222", - "54.86.106.241", - "54.85.251.175", - "54.86.38.49", - "54.86.108.102", - "54.86.98.21", - "54.86.89.139", - "54.86.56.174", - "54.86.109.129", - "54.86.125.136", - "54.86.141.184", - "54.86.101.162", - "10.219.164.166", - "10.219.134.206", - "10.219.157.181", - "10.219.171.92", - "10.219.132.7", - "10.219.147.195", - "10.219.179.164", - "10.219.136.17", - "10.219.136.66", - "10.219.145.78", - "10.219.173.93", - "10.219.168.89", - "10.219.186.145", - "10.219.190.234", - "10.219.173.45", - "10.219.128.227", - "10.219.154.184", - "10.219.174.165", - "10.219.183.156", - "10.219.181.82", - "10.219.182.240", - "10.219.189.153", - "10.219.146.30", - "10.219.131.134", - "10.219.166.184", - "10.219.177.243", - "10.219.150.111", - "10.219.137.198", - "10.219.130.190", - "10.219.169.253", - "10.219.130.240", - "10.219.131.132", - "10.219.160.142", - "10.219.179.119", - "10.219.130.229", - "10.219.154.94", - "10.219.153.220", - "10.219.168.41", - "10.219.137.105", - "10.219.188.5", - "10.219.186.171", - "10.219.136.115", - "10.219.155.180", - "10.219.154.115", - "10.219.185.186", - "10.219.137.205", - "10.219.145.106", - "10.219.138.98", - "10.219.184.152", - "10.219.143.130", - "10.219.154.203", - "10.219.187.178", - "10.219.146.42", - "10.219.143.228", - "10.219.163.166", - "10.219.136.13", - "10.219.184.234", - "10.219.154.12", - "10.219.180.244", - "10.219.169.68", - "10.219.130.1", - "10.219.142.79", - "10.219.158.176", - "10.219.133.48", - "10.219.132.135", - "10.219.156.153", - "10.219.165.216", - "10.219.167.28", - "10.219.169.240", - "10.219.177.150", - "10.219.173.21", - "10.219.178.85", - "10.219.155.123", - "10.219.178.84", - "10.219.140.138", - "10.219.165.155", - "10.219.153.9", - "10.219.138.5", - "10.219.152.17", - "10.219.189.219", - "10.219.173.38", - "10.219.191.53", - "10.219.155.57", - "10.219.134.179", - "10.219.141.55", - "10.219.173.37", - "10.219.147.63", - "10.219.142.242", - "10.219.149.40", - "10.219.154.211", - "10.219.177.41", - "10.219.138.185", - "10.219.169.135", - "10.219.142.152", - "10.219.180.178", - "10.219.155.112", - "10.219.152.253", - "10.219.161.92", - "10.219.129.154", - "10.219.150.33", - "10.219.163.151", - "10.219.142.223", - "10.219.185.101", - "10.219.187.219", - "10.219.137.49", - "10.219.185.140", - "10.219.183.41", - "10.219.128.18", - "10.219.137.67", - "10.219.136.200", - "10.219.167.0", - "10.219.166.38", - "10.219.147.74", - "10.219.134.176", - "10.219.185.71", - "10.219.162.164", - "10.219.159.21", - "10.219.183.205", - "10.219.131.26", - "10.219.130.129", - "10.219.177.177", - "10.219.165.247", - "10.219.142.23", - "10.219.158.35", - "10.219.128.183", - "10.219.179.156", - "10.219.132.1", - "10.219.151.162", - "10.219.175.97", - "10.219.133.98", - "10.219.175.162", - "10.219.168.254", - "10.219.135.107", - "10.219.147.25", - "10.219.140.250", - "10.219.156.2", - "10.219.143.239", - "10.219.150.186", - "10.219.175.103", - "10.219.154.60", - "10.219.164.210", - "10.219.161.181", - "10.219.144.224", - "10.219.165.236", - "10.219.184.95", - "10.219.147.27", - "10.219.132.76", - "10.219.129.226", - "10.219.142.198", - "10.219.152.142", - "10.219.182.219", - "10.219.154.235", - "10.219.177.248", - "10.219.147.76", - "10.219.164.5", - "10.219.134.89", - "10.219.148.67", - "10.219.161.188", - "10.219.188.151", - "10.219.152.52", - "10.219.161.118", - "10.219.132.127", - "10.219.130.19", - "10.219.152.208", - "10.219.167.181", - "10.219.166.102", - "10.219.174.231" - ], - "vars": {} - } -} - -host_vars = {} - -if __name__ == '__main__': - parser = optparse.OptionParser() - parser.add_option('--list', action='store_true', dest='list') - parser.add_option('--host', dest='hostname', default='') - options, args = parser.parse_args() - if options.list: - json.dump(inventory_dict, sys.stdout, indent=4) - elif options.hostname: - json.dump(host_vars, sys.stdout, indent=4) - else: - json.dump({}, sys.stdout, indent=4) diff --git a/awx/main/tests/data/ssh.py b/awx/main/tests/data/ssh.py new file mode 100644 index 0000000000..c2a9a29223 --- /dev/null +++ b/awx/main/tests/data/ssh.py @@ -0,0 +1,167 @@ +TEST_SSH_KEY_DATA = '''-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAyQ8F5bbgjHvk4SZJsKI9OmJKMFxZqRhvx4LaqjLTKbBwRBsY +1/C00NPiZn70dKbeyV7RNVZxuzM6yd3D3lwTdbDu/eJ0x72t3ch+TdLt/aenyy10 +IvZyhSlxCLDkDaVVPFYJOQzVS8TkdOi6ZHc+R0c0A+4ZE8OQ8C0zIKtUTHqRk4/v +gYK5guhNS0DdgWkBj6K+r/9D4bqdPTJPt4S7H75vb1tBgseiqftEkLYOhTK2gsCi +5uJgpG4zPQY4Kk/97dbW7pwcvPkr1rKkAwEJ27Bfo+DBv3oEx3SinpXQtOrH1aEO +RHSXldBaymdBtVLUhjxDlnnQ7Ps+fNX04R7N4QIDAQABAoIBAQClEDxbNyRqsVxa +q8BbzxZNVFxsD6Vceb9rIDa8/DT4SO4iO8zNm8QWnZ2FYDz5d/X3hGxlSa7dbVWa +XQJtD1K6kKPks4IEaejP58Ypxj20vWu4Fnz+Jy4lvLwb0n2n5lBv1IKF389NATw9 +7sL3sB3lDsPZZiQYYbogNDuBWqc+kP0zD84bONsM/B2HMRm9BRv2UsZf+zKU4pTA +UqHffyjmw7LqHmbtVjwVcUsC+xcE4kCuWLvabFnTWOSnWECyIw2+trxKdwCXbfzG +s5rn4Dj+aEKimzFaRpTSVx6w4yw9xw/EjsSaZ88jKSpTP8ocCut6zv+P/JwlukEX +4A4FxqyxAoGBAOp3G9EIAAWijcIgO5OdiZNEqVyqd3yyPzT6d/q7bf4dpVCZiLNA +bRmge83aMc4g2Dpkn/++It3bDmnXXGg+BZSX5KT9JLklXchaw9phv9J0diZEUvYS +mSQafbUGIqYnYzns3TU0cbgITs1iVIEstHYjGr3J88nDG+HFCHboxa93AoGBANuG +cDFgyvm79+haK2fHhUCZgaFFYBpkpuz+zjDjzIytOzymWa2gD9jIa7mvdvoH2ge3 +AVG0vy+n9cJaqJMuLkhdI01wVlqY9wvDHFyZCXyIvKVPMljKeTvCNGCupsG4R171 +gSKT5ryOx58MGbE7knAZC+QWpwxFpdpbfej6g7NnAoGBAMz6ipAJbXN/tG0FnvAj +pxXfzizcPw/+CTI40tGaMMQbiN5ZC+CiL39bBUFnQ2mQ31jVheegg3zvuL8hb4EW +z+wjitoPEZ7nowC5EUaHdJr6BBzaWKkWg1nD6yhqj7ow7xfCE3YjPlQEt1fpYjV4 +LuClOgi4WPCIKYUMq6TBRaprAoGAVrEjs0xPPApQH5EkXQp9BALbH23/Qs0G4sbJ +dKMxT0jGAPCMr7VrLKgRarXxXVImdy99NOAVNGO2+PbGZcEyA9/MJjO71nFb9mgp +1iOVjHmPThUVg90JvWC3QIsYTZ5RiR2Yzqfr0gDsslGb/9LPxLcPbBbKB12l3rKM +6amswvcCgYEAvgcSlTfAkI3ac8rB70HuDmSdqKblIiQjtPtT/ixXaFkZOmHRr4AE +KepMRDnaO/ldPDPEWCGqPzEM0t/0jS8/hCu3zLHHpZ+0LnHq+EXkOI0/GB4P+z5l +Vz3kouC0BTav0rCEnDop/cWMTiAp/XhKXfrTTTOra/F8l2xD8n/mnzY= +-----END RSA PRIVATE KEY-----''' + +TEST_SSH_KEY_DATA_LOCKED = '''-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,6B4E92AF4C29DE26FD8535D81825BDE6 + +pg8YplxPpfzgEGUiko34DGaYklyGyYKXjOrGFGyLoquNAVNFyewT34dDrZi0IAaE +79wMVcdlHbrJfZz8ML8I/ft6zM6BdlwZExH4y9DRAaktY3yIXxSvowBQ6ljh3wUy +M6m0afOfVjT22V8hLFgX0yTQ6P9zTG1cmj6+JQWTsMJ5EP3rnFK5CyrJXP48B3GI +GgE66rkXDvcKlVeIrbrpcTyfmEpafPgVRJYCDFXxeO/BfKgUFVxFq1PgFbvGQMmD +wA6EsyRrN+aoub1sqzj8tM8e4nwEi0EifdRShkFeqH4GUOKypanTXfCqwFBgYi5a +i3YwSnniZZPwCniGR5cl8oetrc5dubq/IR0txsGi2lO6zJEWdSer/EadS0QAll4S +yXrSc/lFaez1VmVe/8aoBKDOHhe7jV3YXAuqCeB4o/SThB/9Gad44MTbqFH3d7cD +k+F0Cjup7LZqZpXeB7ZHRG/Yt9MtBzwDVmEWaxA1WIN5a8xyZEVzRswSi4lZX69z +Va7eTKcrCbHOQmIbLZGRiZbAbfgriwwxQCJWELv80h+A754Bhi23n3WzcT094fRi +cqK//HcHHXxYGmrfUbHYcj+GCQ07Uk2ZR3qglmPISUCgfZwM9k0LpXudWE8vmF2S +pAnbgxgrfUMtpu5EAO+d8Sn5wQLVD7YzPBUhM4PYfYUbJnRoZQryuR4lqCzcg0te +BM8x1LzSXyBEbQaonuMzSz1hCQ9hZpUwUEqDWAT3cPNmgyWkXQ1P8ehJhTmryGJw +/GHxNzMZDGj+bBKo7ic3r1g3ZmmlSU1EVxMLvRBKhdc1XicBVqepDma6/LEpj+5X +oplR+3Q0QSQ8CchcSxYtOpI3UBCatpyu09GtfzS+7bI5I7FVYUccR83+oQlKpPHC +5O2irB8JeXqAY679fx2N4i0E6l5Xr5AjUtOBCNil0Y70eOf9ER6i7kGakR7bUtk5 +fQn8Em9pLsYYalnekn4sxyHpGq59KgNPjQiJRByYidSJ/oyNbmtPlxfXLwpuicd2 +8HLm1e0UeGidfF/bSlySwDzy1ZlSr/Apdcn9ou5hfhaGuQvjr9SvJwxQFNRMPdHj +ukBSDGuxyyU+qBrWJhFsymiZAWDofY/4GzgMu4hh0PwN5arzoTxnLHmc/VFttyMx +nP7bTaa9Sr54TlMr7NuKTzz5biXKjqJ9AZKIUF2+ERebjV0hMpJ5NPsLwPUnA9kx +R3tl1JL2Ia82ovS81Ghff/cBZsx/+LQYa+ac4eDTyXxyg4ei5tPwOlzz7pDKJAr9 +XEh2X6rywCNghEMZPaOQLiEDLJ2is6P4OarSa/yoU4OMetpFfwZ0oJSCmGlEa+CF +zeJ80yXhU1Ru2eqiUjCAUg25BFPwoiMJDc6jWWow7OrXCQsw7Ddo2ncy1p9QeWjM +2R4ojPHWuXKYxvwVSc8NZHASlycBCaxHLDAEyH4avOSDPWOB1H5t+RrNmo0qgush +0aRo6F7BjzB2rA4E+xu2u11TBfF8iB3PC919/vxnkXF97NqezsaCz6VbRlsU0A+B +wwoi+P4JlJF6ZuhuDv6mhmBCSdXdc1bvimvdpOljhThr+cG5mM08iqWGKdA665cw +-----END RSA PRIVATE KEY----- +''' + +TEST_OPENSSH_KEY_DATA = '''-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEA1AZAwUJUiLmOXjbO5q2ZE5DF+gMpPKe8NEr12FpvOaJr1Nz/DNpf +FE/VbssOJ4CRD/6MItlPSG2pC1Cv3AYSL7NBc0YCMlBR/P/nLI8pLAzU3p3KRYvR+R6cMW +3nMcxyB1UUgzXY9dTVFIyejOsm7stGuNfdDTTLBE2vTDz6CyzxxSALEOdYut5cfeTUuG7d +nP01K3JiaHjHaXDmwraRR/JlitylaZUnSZ+/b9WCMX5FyeJ6CnGdvcCuvMK0iNjZ8R+PxP +xJBM5AlJC5J6qa8YmeaQ6lA/2S+/wGuhJmocmiXiLFy9IzIPnQiR+h8DqStp4xp245UQxe +TIGSMmq8DQAAA9A4FMRSOBTEUgAAAAdzc2gtcnNhAAABAQDUBkDBQlSIuY5eNs7mrZkTkM +X6Ayk8p7w0SvXYWm85omvU3P8M2l8UT9Vuyw4ngJEP/owi2U9IbakLUK/cBhIvs0FzRgIy +UFH8/+csjyksDNTencpFi9H5HpwxbecxzHIHVRSDNdj11NUUjJ6M6ybuy0a4190NNMsETa +9MPPoLLPHFIAsQ51i63lx95NS4bt2c/TUrcmJoeMdpcObCtpFH8mWK3KVplSdJn79v1YIx +fkXJ4noKcZ29wK68wrSI2NnxH4/E/EkEzkCUkLknqprxiZ5pDqUD/ZL7/Aa6EmahyaJeIs +XL0jMg+dCJH6HwOpK2njGnbjlRDF5MgZIyarwNAAAAAwEAAQAAAQAp8orBMYRUAJIgJavN +i67rZgslKZbw/yaHGgWFpm628mFvHcIAIvwIorrRTq8gNZl9lpjXFDNRWxDEwlPorfLPKS +Hb0pAAsE9oRKDR+gjlRCyhVop8M+t45At25A2HlrFArh5+zxp7mH4HsMJ1ktiDCgiV7W84 +e6dm1I/H/5BgwUlTNoVOGPrU183gqRsHIICjfmnjl2ObJoly+MTrAy7E9rSmsO+pHKl8z0 +XODWh3mo+EkCoYrK6kP96Jy3BepSmbZMROEsctS7Mkzu6QdnfTY3QqIzENYtTGJuAGktGj +su4MHP8hbj+TznNkFeZdmIC0uTnIKu1uquwuFF1HPZiBAAAAgACX9xPKS2J04WXpQag+JS +06n2zSuBHW7Kq4q/LMydoTRd8Quf6u6eivSBrl7H779LCtGCIZqJAslvWOyPyz2CohcCBU +emubiHcUA+aN7R9E0tyitwWraJjMIwpQ7+AbgdsLsuxozNeccSrr0tva2c5y9x7YGBcIdC +UJDt4xnBi7AAAAgQDz771v8Mb18kq5W+inDcYPFUNXGtNfeYZEOhYFpxunFnYwTEAG0Xnh +YpQXOAFZ2q5mkFQHMl4cOKwoAlaP0dM4v0JKPjFDLvGisEu95fnivj4YAMP/UHgKKxBbqW +HPUhg3adAmIJ9z9u/VmTErbVklcKWlyZuTUkxeQ/BJmSIRUQAAAIEA3oKAzdDURjy8zxLX +gBLCPdi8AxCiqQJBCsGxXCgKtZewset1XJHIN9ryfb4QSZFkSOlm/LgdeGtS8Or0GNPRYd +hgnUCF0LkEsDQ7HzPZYujLrAwjumvGQH6ORp5vRh0tQb93o4e1/A2vpdSKeH7gCe/jfUSY +h7dFGNoAI4cF7/0AAAAUcm9vdEBwaWxsb3cuaXhtbS5uZXQBAgMEBQYH +-----END OPENSSH PRIVATE KEY-----''' + +TEST_OPENSSH_KEY_DATA_LOCKED = '''-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABALaWMfjc +hSvC7aXxQs1ZDiAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDEDWKwZD8+ +h+2gZZKna8dy2QL4jJxM1eLGDcQDnuip1ixhaf5MT5T6BMploXXHs1pfuwx8yTQ6Ts/VJp +WX6cuHQg8sPGM3P7HNGUqs9q/EQfrrRxz555uL08CRaS6FjM/6x9iolNhHU910Wlg+R+ZS +xiMrrY/s03EiEChsAWTbwBGqTopGC2xMFgIxINoQtTFXv7MtCbDfl8aWKQRDmzkLvwT07N +ycj2kqADqoukD/2bQvPrW6FIZPJPpAdeAe2SZbf/y92NgVz/glOdtjaJp3oqn1QHrOA9/k +XgXOjgVQUbzX7qyLWenxM138VsRKUJZeROaHt1MWApLrLtKQ36SrAAAD0A+PODJjfeKm3U +JknlSYD7fFh6bVZGwG6LnLMtobs0elOfj2+sdg+hOVqyrA0rPOHES5yGKslTc/wRkRQ95m +dBleAyTDIOQ90IqDxT3lsNQwpscsFKPYKGmaUvZLLk4aNY1GeANtByXwTsjetVqn8Uo59A +zu6phX8Aagn2h0qxQwBnDjlzsXf6g5H7UPZd/t1dYr1NfVP6KWJrg0jivAI8tzO2HcM9W2 +cyOaodBw/6TsJNKvDV714Z+apvrNDEufBUsovKjAna2BDVZIhTCg5mYm0Dks8JStQrG2S1 +Yk8EM3+fpo8uMoHVz1jbYC8UX12pwIU67MhUn24KBxqulCYaTMsrLFkNWk6vKgwib+sIa4 +i1Bij1Zd0rdJWypQqTc2Oj3bBSYM47AksMXcKVpuNnFLh4+eokpQzbtIYpRqhOTh1Fky7z +xkhTgWVvf/F19M9t1bz3Rm1/t5I75Ag9qfKWs06j+VVfXnDt5v5hYAEhoJjMzSjgKaqc5g +YndeWeUwO6Vijt4XpkB8+0R7Kptsh9L0UUsNIcRoGcqrM8IUVb3D8vPWppPlj9d6LB+FCo +Cy1JlscnpBb8AQy9QMvrJTHKOyjRcenVxILPiN8PypIC008jvqpDzKimAxM4IMuA7AWE6w +j5+CzfUhDAJGdl2qH/nVc7GFUtz8bVA/v9Zkawg2MLcafgGollbLcTbKwDFcenQuyHT+Hj +uDm2f0oV/EDKFqLijlV8vcLBNUZoxY/L62Vora1jlqnapq2Z/AM9NicoELYNe21ReJ5dxM +7Pk/QdSrZjQzxoHf8uBDpb7x/KyfnSdf8GmdGCxoJ5mcepwD4tROMFC104tN0STJpdGVSm +Q5ZG1JDN7F9iJCCAwyulWH/XxTzFYnQ84199cQeV/M9rXXgbXa8ApAung6X9j8y1fcw9Lw +wV1aP06bCNgM0U50PiZ54HXwzVt+Ghs06TEF4/ZQiIgNJxdw0HFxAJj8qHqUCHuSmvBgnN +qRW/uruItwpXLaL00EHu7rAFlBi1BnnetI+D12ls04mlyTUFFM5v520B5zPV+5If2hx91w +C6Oxl1Wsp3gPkK2yiuy8qcrvoEoJ25TeEhUGEAPWx2OuQJO/Lpq9aF/JJoqGwnBaXdCsi+ +5ig+ZMq5GKQtyydzyXImjlNEUH1w2prRDiGVEufANA5LSLCtqOLgDzXS62WUBjJBrQJVAM +YpWz1tiZQoyv1RT3Y0O0Vwe2Z5AK3fVM0I5jWdiLrIErtcR4ULa6T56QtA52DufhKzINTR +Vg9TtUBqfKIpRQikPSjm7vpY/Xnbc= +-----END OPENSSH PRIVATE KEY-----''' + +TEST_SSH_CERT_KEY = """-----BEGIN CERTIFICATE----- +MIIDNTCCAh2gAwIBAgIBATALBgkqhkiG9w0BAQswSTEWMBQGA1UEAwwNV2luZG93 +cyBBenVyZTELMAkGA1UEBhMCVVMxIjAgBgkqhkiG9w0BCQEWE2x1a2VAc25lZXJp +bmdlci5jb20wHhcNMTQwNzI4MTQzMjExWhcNMTUwNzI4MTQzMjExWjBJMRYwFAYD +VQQDDA1XaW5kb3dzIEF6dXJlMQswCQYDVQQGEwJVUzEiMCAGCSqGSIb3DQEJARYT +bHVrZUBzbmVlcmluZ2VyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL9UHMhmAkbEJtg7jxAYjRbyTILDkNG5X/5UDpReIBD3VZfIrrXKX/groKbE +uiH9vdHkhdbOV1WkINuz+12Hdfk7irRXPRNC6SQVNeCy/DuCIEX+pQCAn60pc3eT +ctQG4oCiwQrlFMjoV9S5kbKoUavtuEt7Huo4YIVJK1/McEYq8mIM1W6MGOwXQI0b +rKsp1zRviiQWU5zijQYxepSpBNJcGS1lNhD1m5ycy7+0Zm7FqBa6nlf/2kLadREF +4o3bHljfrLTa+czV9lI9HjwpeLCfccx0T7etpv+u/JzSlt1MlAnlCNtz2wo1oNdi +scyRdRlb00AWQMneQfSYgwGHyQ8CAwEAAaMqMCgwDgYDVR0PAQH/BAQDAgeAMBYG +A1UdJQEB/wQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQCc064W0uk3 +hVVYtHuOBPSag9TvyqJrnvHsPgWiwFTh7t4CGF2TiH6myxkboAN0BGZqIj0zorT+ +VORmZ4PrDqV29q8M77n4aTmDmqXXcCAMOtyC87xlK+YvsVtrvu2zYXnZV+BJ+UtT +FpDqgMLrE0ecnkDClAK4vPx3TqSzU3v//lgUG1o3VibJbzMptggMVA4Hl9AXGLnU +FNpK5B4mm/PQHQC1Ma/nweMoDcVlQUne8XgnwEf0ixGkViFLm6FmI7DfKUpq3zXb +vWKu8qiBmz4tju6LT2n+q66MNEMmS1qhuJJYZrORJgQkCVbo1RRwW6UNZSIjD8D6 +8QJhq7hCxteN +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAv1QcyGYCRsQm2DuPEBiNFvJMgsOQ0blf/lQOlF4gEPdVl8iu +tcpf+CugpsS6If290eSF1s5XVaQg27P7XYd1+TuKtFc9E0LpJBU14LL8O4IgRf6l +AICfrSlzd5Ny1AbigKLBCuUUyOhX1LmRsqhRq+24S3se6jhghUkrX8xwRiryYgzV +bowY7BdAjRusqynXNG+KJBZTnOKNBjF6lKkE0lwZLWU2EPWbnJzLv7RmbsWoFrqe +V//aQtp1EQXijdseWN+stNr5zNX2Uj0ePCl4sJ9xzHRPt62m/678nNKW3UyUCeUI +23PbCjWg12KxzJF1GVvTQBZAyd5B9JiDAYfJDwIDAQABAoIBACNozL7l6ivwp4PD +WhHPiWUiyLg2u3mlBjgKlHwvA15AeC3ULUllv+ctI9lZdV1PGa9bzM1ZeN5XtuES +aUYBCPtsYppHvvzumDleV49TcM0OoyxxGVaDd4nTrxQFTO4irA7EkFeU2Ajqvz6W +bXmUHzFjmIUXrzwH3Q0t4oIjUvAZNhNY63G3XZ264pNckvtuRArgn0r7e+trplII +qDYPwOLPhorwG6a0HIsSWbECA+NbzC5wBIr4CMfDRiHDQ5g4cGstpbBAUkAs2LSU +2QcGp3AIqOnzMDxLTMqKcKQ9YXOMqTpVoyll+jkgdHLCqHjo+O51/E5AsjBcabmi +4LpeVsECgYEA+7g2y8J54GWhNOpJ+RQ6IvoUuA9YmEe3byIglat5b+AWuy7Miq4u +VSiIjEqDf8Ci1LxHrkRCe4S/9VZSNJdfbv5I1LW3Wx4JRZ1JFR5Z9B0XI5SdkokM +O9DXIJHgxSzC9kCKgBpH5KxqMpEdMMv70C7gbMpnONEL1zIOZJxAwq8CgYEAwpUB +Dp5l8Wpma5SnUAJiTU9XdgtPr1M8WFde9jP3e2VK2O4DmnZkLN5aLbMfnftUNAl1 +mP4CTxtkkEwNtkol+rZAy6wwzQA/TP2yC0Wfw+xeDTKJ+JDDoWM+4FAhjBpns/gx +Ehfqj76jRjBW9DtARaHgrIHHFUn2p6wMZq4Sd6ECgYEA4jlNrdQrGnvb5KWHM750 +/UhJ5J2OHtWdStid9kU0j1ISu8k0dJJT+57BEWxKQD9NV+madkjMgxvsNL6OhMti +LmuD4v8pOU+GP7U6oCs15slaKVUARFi80OlA3fmcyzgOQ6f/kV+NKzu0+ZsnY9p/ +hjsK4VsKZ6qgfJd1DgDLxusCgYArXCDcLRfycA9ascmG3sEhESkgOO0M2LN9zBpx +KqtfZ/cB2CgdZ3xzMylNPbkx7yuYXPNDoHbLQgNq1EfJ80P7VlmiCUDmrcNtWKsw +L9emRSnALx7nsPqnIAKG4dRX8Bpj1E67BXFTjtu7bFI0Im/0FFqIlnLSn6TDQGeT +Cf87gQKBgCgW/kFaQAhP5Pdb7oOQcaF4/dq50QNDyQMFOPKWHY/5IrsIrDVI5V/D +o1npLPB+YE3baQqo58JX1UuO83F4zlwzS3Q4lS3dxg+gdvgzFHvQd/SV5IDhmLWL +L5Hj+B02+FAiz8zVGumbVykvPtzgTb0E+0rJKNO0/EgGqWsk/oC0 +-----END RSA PRIVATE KEY----- +""" + +TEST_SSH_KEY_DATA_UNLOCK = 'unlockme' diff --git a/awx/main/tests/fact/__init__.py b/awx/main/tests/fact/__init__.py deleted file mode 100644 index 234499d6e9..0000000000 --- a/awx/main/tests/fact/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .fact_api import * # noqa diff --git a/awx/main/tests/fact/fact_api.py b/awx/main/tests/fact/fact_api.py deleted file mode 100644 index 157cec3757..0000000000 --- a/awx/main/tests/fact/fact_api.py +++ /dev/null @@ -1,242 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -import unittest2 as unittest - -# Django -from django.core.urlresolvers import reverse - -# AWX -from awx.main.utils import timestamp_apiformat -from awx.main.models import * # noqa -from awx.main.tests.base import BaseLiveServerTest -from awx.fact.models import * # noqa -from awx.fact.tests.base import BaseFactTestMixin, FactScanBuilder, TEST_FACT_ANSIBLE, TEST_FACT_PACKAGES, TEST_FACT_SERVICES -from awx.main.utils import build_url - -__all__ = ['FactVersionApiTest', 'FactViewApiTest', 'SingleFactApiTest',] - -class FactApiBaseTest(BaseLiveServerTest, BaseFactTestMixin): - def setUp(self): - super(FactApiBaseTest, self).setUp() - self.create_test_license_file() - self.setup_instances() - self.setup_users() - self.organization = self.make_organization(self.super_django_user) - self.organization.admins.add(self.normal_django_user) - self.inventory = self.organization.inventories.create(name='test-inventory', description='description for test-inventory') - self.host = self.inventory.hosts.create(name='host.example.com') - self.host2 = self.inventory.hosts.create(name='host2.example.com') - self.host3 = self.inventory.hosts.create(name='host3.example.com') - - def setup_facts(self, scan_count): - self.builder = FactScanBuilder() - self.builder.set_inventory_id(self.inventory.pk) - self.builder.add_fact('ansible', TEST_FACT_ANSIBLE) - self.builder.add_fact('packages', TEST_FACT_PACKAGES) - self.builder.add_fact('services', TEST_FACT_SERVICES) - self.builder.add_hostname('host.example.com') - self.builder.add_hostname('host2.example.com') - self.builder.add_hostname('host3.example.com') - self.builder.build(scan_count=scan_count, host_count=3) - - self.fact_host = FactHost.objects.get(hostname=self.host.name) - -class FactVersionApiTest(FactApiBaseTest): - def check_equal(self, fact_versions, results): - def find(element, set1): - for e in set1: - if all([ e.get(field) == element.get(field) for field in element.keys()]): - return e - return None - - self.assertEqual(len(results), len(fact_versions)) - for v in fact_versions: - v_dict = { - 'timestamp': timestamp_apiformat(v.timestamp), - 'module': v.module - } - e = find(v_dict, results) - self.assertIsNotNone(e, "%s not found in %s" % (v_dict, results)) - - def get_list(self, fact_versions, params=None): - url = build_url('api:host_fact_versions_list', args=(self.host.pk,), get=params) - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - - self.check_equal(fact_versions, response['results']) - return response - - def test_permission_list(self): - url = reverse('api:host_fact_versions_list', args=(self.host.pk,)) - with self.current_user('admin'): - self.get(url, expect=200) - with self.current_user('normal'): - self.get(url, expect=200) - with self.current_user('other'): - self.get(url, expect=403) - with self.current_user('nobody'): - self.get(url, expect=403) - with self.current_user(None): - self.get(url, expect=401) - - def test_list_empty(self): - url = reverse('api:host_fact_versions_list', args=(self.host.pk,)) - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - self.assertIn('results', response) - self.assertIsInstance(response['results'], list) - self.assertEqual(len(response['results']), 0) - - def test_list_related_fact_view(self): - self.setup_facts(2) - url = reverse('api:host_fact_versions_list', args=(self.host.pk,)) - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - for entry in response['results']: - self.assertIn('fact_view', entry['related']) - self.get(entry['related']['fact_view'], expect=200) - - def test_list(self): - self.setup_facts(2) - self.get_list(FactVersion.objects.filter(host=self.fact_host)) - - def test_list_module(self): - self.setup_facts(10) - self.get_list(FactVersion.objects.filter(host=self.fact_host, module='packages'), dict(module='packages')) - - def test_list_time_from(self): - self.setup_facts(10) - - params = { - 'from': timestamp_apiformat(self.builder.get_timestamp(1)), - } - # 'to': timestamp_apiformat(self.builder.get_timestamp(3)) - fact_versions = FactVersion.objects.filter(host=self.fact_host, timestamp__gt=params['from']) - self.get_list(fact_versions, params) - - def test_list_time_to(self): - self.setup_facts(10) - - params = { - 'to': timestamp_apiformat(self.builder.get_timestamp(3)) - } - fact_versions = FactVersion.objects.filter(host=self.fact_host, timestamp__lte=params['to']) - self.get_list(fact_versions, params) - - def test_list_time_from_to(self): - self.setup_facts(10) - - params = { - 'from': timestamp_apiformat(self.builder.get_timestamp(1)), - 'to': timestamp_apiformat(self.builder.get_timestamp(3)) - } - fact_versions = FactVersion.objects.filter(host=self.fact_host, timestamp__gt=params['from'], timestamp__lte=params['to']) - self.get_list(fact_versions, params) - - -class FactViewApiTest(FactApiBaseTest): - def check_equal(self, fact_obj, results): - fact_dict = { - 'timestamp': timestamp_apiformat(fact_obj.timestamp), - 'module': fact_obj.module, - 'host': { - 'hostname': fact_obj.host.hostname, - 'inventory_id': fact_obj.host.inventory_id, - 'id': str(fact_obj.host.id) - }, - 'fact': fact_obj.fact - } - self.assertEqual(fact_dict, results) - - def test_permission_view(self): - url = reverse('api:host_fact_compare_view', args=(self.host.pk,)) - with self.current_user('admin'): - self.get(url, expect=200) - with self.current_user('normal'): - self.get(url, expect=200) - with self.current_user('other'): - self.get(url, expect=403) - with self.current_user('nobody'): - self.get(url, expect=403) - with self.current_user(None): - self.get(url, expect=401) - - def get_fact(self, fact_obj, params=None): - url = build_url('api:host_fact_compare_view', args=(self.host.pk,), get=params) - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - - self.check_equal(fact_obj, response) - - def test_view(self): - self.setup_facts(2) - self.get_fact(Fact.objects.filter(host=self.fact_host, module='ansible').order_by('-timestamp')[0]) - - def test_view_module_filter(self): - self.setup_facts(2) - self.get_fact(Fact.objects.filter(host=self.fact_host, module='services').order_by('-timestamp')[0], dict(module='services')) - - def test_view_time_filter(self): - self.setup_facts(6) - ts = self.builder.get_timestamp(3) - self.get_fact(Fact.objects.filter(host=self.fact_host, module='ansible', timestamp__lte=ts).order_by('-timestamp')[0], - dict(datetime=ts)) - - -@unittest.skip("single fact query needs to be updated to use inventory_id attribute on host document") -class SingleFactApiTest(FactApiBaseTest): - def setUp(self): - super(SingleFactApiTest, self).setUp() - - self.group = self.inventory.groups.create(name='test-group') - self.group.hosts.add(self.host, self.host2, self.host3) - - def test_permission_list(self): - url = reverse('api:host_fact_versions_list', args=(self.host.pk,)) - with self.current_user('admin'): - self.get(url, expect=200) - with self.current_user('normal'): - self.get(url, expect=200) - with self.current_user('other'): - self.get(url, expect=403) - with self.current_user('nobody'): - self.get(url, expect=403) - with self.current_user(None): - self.get(url, expect=401) - - def _test_related(self, url): - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - self.assertTrue(len(response['results']) > 0) - for entry in response['results']: - self.assertIn('single_fact', entry['related']) - # Requires fields - self.get(entry['related']['single_fact'], expect=400) - - def test_related_host_list(self): - self.setup_facts(2) - self._test_related(reverse('api:host_list')) - - def test_related_group_list(self): - self.setup_facts(2) - self._test_related(reverse('api:group_list')) - - def test_related_inventory_list(self): - self.setup_facts(2) - self._test_related(reverse('api:inventory_list')) - - def test_params(self): - self.setup_facts(2) - params = { - 'module': 'packages', - 'fact_key': 'name', - 'fact_value': 'acpid', - } - url = build_url('api:inventory_single_fact_view', args=(self.inventory.pk,), get=params) - with self.current_user(self.super_django_user): - response = self.get(url, expect=200) - self.assertEqual(len(response['results']), 3) - for entry in response['results']: - self.assertEqual(entry['fact'][0]['name'], 'acpid') diff --git a/awx/main/tests/factories/README.md b/awx/main/tests/factories/README.md new file mode 100644 index 0000000000..c451c02598 --- /dev/null +++ b/awx/main/tests/factories/README.md @@ -0,0 +1,65 @@ +factories +========= + +This is a module for defining stand-alone factories and fixtures. Ideally a fixture will implement a single item. +DO NOT decorate fixtures in this module with the @pytest.fixture. These fixtures are to be combined +with fixture factories and composition using the `conftest.py` convention. Those composed fixtures +will be decorated for usage and discovery. + +Use the fixtures directly in factory methods to build up the desired set of components and relationships. +Each fixture should create exactly one object and should support the option for that object to be persisted +or not. + +A factory should create at a minimum a single object for that factory type. The creation of any +associated objects should be explicit. For example, the `create_organization` factory when given only +a `name` parameter will create an Organization but it will not implicitly create any other objects. + +teams +----- + +There is some special handling for users when adding teams. There is a short hand that allows you to +assign a user to the member\_role of a team using the string notation of `team_name:user_name`. There is +no shortcut for adding a user to the admin\_role of a team. See the roles section for more information +about how to do that. + +roles +----- + +The roles helper allows you pass in roles to a factory. These roles assignments will happen after +the objects are created. Using the roles parameter required that persisted=True (default). + +You can use a string notation of `object_name.role_name:user` OR `object_name.role_name:object_name.child_role` + + obj.parent_role:user # This will make the user a member of parent_role + obj1.role:obj2.role # This will make obj2 a child role of obj1 + + team1.admin_role:joe + team1.admin_role:project1.admin_role + +examples +-------- + + objects = create_organization('test-org') + assert objects.organization.name == 'test-org' + + objects = create_organization('test-org', projects=['test-proj']) + assert objects.projects.test-proj.organization == objects.organization + + objects = create_organization('test-org', persisted=False) + assert not objects.organization.pk + +patterns +-------- + +`mk` functions are single object fixtures. They should create only a single object with the minimum deps. +They should also accept a `persited` flag, if they must be persisted to work, they raise an error if persisted=False + +`generate` and `apply` functions are helpers that build up the various parts of a `create` functions objects. These +should be useful for more than one create function to use and should explicitly accept all of the values needed +to execute. These functions should also be robust and have very speciifc error reporting about constraints and/or +bad values. + +`create` functions compose many of the `mk` and `generate` functions to make different object +factories. These functions when giving the minimum set of arguments should only produce a +single artifact (or the minimum needed for that object). These should be wrapped by discoverable +fixtures in various conftest.py files. diff --git a/awx/main/tests/factories/__init__.py b/awx/main/tests/factories/__init__.py new file mode 100644 index 0000000000..81a1144a52 --- /dev/null +++ b/awx/main/tests/factories/__init__.py @@ -0,0 +1,18 @@ +from .tower import ( + create_organization, + create_job_template, + create_notification_template, + create_survey_spec, +) + +from .exc import ( + NotUnique, +) + +__all__ = [ + 'create_organization', + 'create_job_template', + 'create_notification_template', + 'create_survey_spec', + 'NotUnique', +] diff --git a/awx/main/tests/factories/exc.py b/awx/main/tests/factories/exc.py new file mode 100644 index 0000000000..aa51de5bd3 --- /dev/null +++ b/awx/main/tests/factories/exc.py @@ -0,0 +1,5 @@ +class NotUnique(Exception): + def __init__(self, name, objects): + msg = '{} is not a unique key, found {}={}'.format(name, name, objects[name]) + super(Exception, self).__init__(msg) + diff --git a/awx/main/tests/factories/fixtures.py b/awx/main/tests/factories/fixtures.py new file mode 100644 index 0000000000..feca114410 --- /dev/null +++ b/awx/main/tests/factories/fixtures.py @@ -0,0 +1,154 @@ +import json + +from django.contrib.auth.models import User + +from awx.main.models import ( + Organization, + Project, + Team, + Instance, + JobTemplate, + Job, + NotificationTemplate, + Credential, + Inventory, + Label, +) + +# mk methods should create only a single object of a single type. +# they should also have the option of being persisted or not. +# if the object must be persisted an error should be raised when +# persisted=False +# + +def mk_instance(persisted=True): + if not persisted: + raise RuntimeError('creating an Instance requires persisted=True') + from django.conf import settings + return Instance.objects.get_or_create(uuid=settings.SYSTEM_UUID, primary=True, hostname="instance.example.org") + + +def mk_organization(name, description=None, persisted=True): + description = description or '{}-description'.format(name) + org = Organization(name=name, description=description) + if persisted: + mk_instance(persisted) + org.save() + return org + + +def mk_label(name, organization=None, description=None, persisted=True): + description = description or '{}-description'.format(name) + label = Label(name=name, description=description) + if organization is not None: + label.organization = organization + if persisted: + label.save() + return label + + +def mk_team(name, organization=None, persisted=True): + team = Team(name=name) + if organization is not None: + team.organization = organization + if persisted: + mk_instance(persisted) + team.save() + return team + + +def mk_user(name, is_superuser=False, organization=None, team=None, persisted=True): + user = User(username=name, is_superuser=is_superuser) + if persisted: + user.save() + if organization is not None: + organization.member_role.members.add(user) + if team is not None: + team.member_role.members.add(user) + return user + + +def mk_project(name, organization=None, description=None, persisted=True): + description = description or '{}-description'.format(name) + project = Project(name=name, description=description) + if organization is not None: + project.organization = organization + if persisted: + project.save() + return project + + +def mk_credential(name, cloud=False, kind='ssh', persisted=True): + cred = Credential(name=name, cloud=cloud, kind=kind) + if persisted: + cred.save() + return cred + + +def mk_notification_template(name, notification_type='webhook', configuration=None, organization=None, persisted=True): + nt = NotificationTemplate(name=name) + nt.notification_type = notification_type + nt.notification_configuration = configuration or dict(url="http://localhost", headers={"Test": "Header"}) + + if organization is not None: + nt.organization = organization + if persisted: + nt.save() + return nt + + +def mk_inventory(name, organization=None, persisted=True): + inv = Inventory(name=name) + if organization is not None: + inv.organization = organization + if persisted: + inv.save() + return inv + + +def mk_job(job_type='run', status='new', job_template=None, inventory=None, + credential=None, project=None, extra_vars={}, + persisted=True): + job = Job(job_type=job_type, status=status, extra_vars=json.dumps(extra_vars)) + + job.job_template = job_template + job.inventory = inventory + job.credential = credential + job.project = project + + if persisted: + job.save() + return job + + +def mk_job_template(name, job_type='run', + organization=None, inventory=None, + credential=None, network_credential=None, + cloud_credential=None, persisted=True, extra_vars='', + project=None, spec=None): + if extra_vars: + extra_vars = json.dumps(extra_vars) + + jt = JobTemplate(name=name, job_type=job_type, extra_vars=extra_vars, + playbook='mocked') + + jt.inventory = inventory + if jt.inventory is None: + jt.ask_inventory_on_launch = True + + jt.credential = credential + if jt.credential is None: + jt.ask_credential_on_launch = True + + jt.network_credential = network_credential + jt.cloud_credential = cloud_credential + + jt.project = project + + jt.survey_spec = spec + if jt.survey_spec is not None: + jt.survey_enabled = True + + if persisted: + jt.save() + return jt diff --git a/awx/main/tests/factories/objects.py b/awx/main/tests/factories/objects.py new file mode 100644 index 0000000000..9f739cc9cf --- /dev/null +++ b/awx/main/tests/factories/objects.py @@ -0,0 +1,59 @@ +from collections import namedtuple + +from .exc import NotUnique + +def generate_objects(artifacts, kwargs): + '''generate_objects takes a list of artifacts that are supported by + a create function and compares it to the kwargs passed in to the create + function. If a kwarg is found that is not in the artifacts list a RuntimeError + is raised. + ''' + for k in kwargs.keys(): + if k not in artifacts: + raise RuntimeError('{} is not a valid argument'.format(k)) + return namedtuple("Objects", ",".join(artifacts)) + + +def generate_role_objects(objects): + '''generate_role_objects assembles a dictionary of all possible objects by name. + It will raise an exception if any of the objects share a name due to the fact that + it is to be used with apply_roles, which expects unique object names. + + roles share a common name e.g. admin_role, member_role. This ensures that the + roles short hand used for mapping Roles and Users in apply_roles will function as desired. + ''' + combined_objects = {} + for o in objects: + if type(o) is dict: + for k,v in o.iteritems(): + if combined_objects.get(k) is not None: + raise NotUnique(k, combined_objects) + combined_objects[k] = v + elif hasattr(o, 'name'): + if combined_objects.get(o.name) is not None: + raise NotUnique(o.name, combined_objects) + combined_objects[o.name] = o + else: + if o is not None: + raise RuntimeError('expected a list of dict or list of list, got a type {}'.format(type(o))) + return combined_objects + + +class _Mapped(object): + '''_Mapped is a helper class that replaces spaces and dashes + in the name of an object and assigns the object as an attribute + + input: {'my org': Organization} + output: instance.my_org = Organization + ''' + def __init__(self, d): + self.d = d + for k,v in d.items(): + k = k.replace(' ', '_') + k = k.replace('-', '_') + + setattr(self, k.replace(' ','_'), v) + + def all(self): + return self.d.values() + diff --git a/awx/main/tests/factories/tower.py b/awx/main/tests/factories/tower.py new file mode 100644 index 0000000000..8116ec83bf --- /dev/null +++ b/awx/main/tests/factories/tower.py @@ -0,0 +1,345 @@ +from django.contrib.auth.models import User + +from awx.main.models import ( + Organization, + Project, + Team, + NotificationTemplate, + Credential, + Inventory, + Job, + Label, +) + +from .objects import ( + generate_objects, + generate_role_objects, + _Mapped, +) + +from .fixtures import ( + mk_organization, + mk_team, + mk_user, + mk_job_template, + mk_job, + mk_credential, + mk_inventory, + mk_project, + mk_label, + mk_notification_template, +) + + +def apply_roles(roles, objects, persisted): + '''apply_roles evaluates a list of Role relationships represented as strings. + The format of this string is 'role:[user|role]'. When a user is provided, they will be + made a member of the role on the LHS. When a role is provided that role will be added to + the children of the role on the LHS. + + This function assumes that objects is a dictionary that contains a unique set of key to value + mappings for all possible "Role objects". See the example below: + + Mapping Users + ------------- + roles = ['org1.admin_role:user1', 'team1.admin_role:user1'] + objects = {'org1': Organization, 'team1': Team, 'user1': User] + + Mapping Roles + ------------- + roles = ['org1.admin_role:team1.admin_role'] + objects = {'org1': Organization, 'team1': Team} + + Invalid Mapping + --------------- + roles = ['org1.admin_role:team1.admin_role'] + objects = {'org1': Organization', 'user1': User} # Exception, no team1 entry + ''' + if roles is None: + return None + + if not persisted: + raise RuntimeError('roles can not be used when persisted=False') + + for role in roles: + obj_role, sep, member_role = role.partition(':') + if not member_role: + raise RuntimeError('you must provide an assignment role, got None') + + obj_str, o_role_str = obj_role.split('.') + member_str, m_sep, m_role_str = member_role.partition('.') + + obj = objects[obj_str] + obj_role = getattr(obj, o_role_str) + + member = objects[member_str] + if m_role_str: + if hasattr(member, m_role_str): + member_role = getattr(member, m_role_str) + obj_role.children.add(member_role) + else: + raise RuntimeError('unable to find {} role for {}'.format(m_role_str, member_str)) + else: + if type(member) is User: + obj_role.members.add(member) + else: + raise RuntimeError('unable to add non-user {} for members list of {}'.format(member_str, obj_str)) + +def generate_users(organization, teams, superuser, persisted, **kwargs): + '''generate_users evaluates a mixed list of User objects and strings. + If a string is encountered a user with that username is created and added to the lookup dict. + If a User object is encountered the User.username is used as a key for the lookup dict. + + A short hand for assigning a user to a team is available in the following format: "team_name:username". + If a string in that format is encounted an attempt to lookup the team by the key team_name from the teams + argumnent is made, a KeyError will be thrown if the team does not exist in the dict. The teams argument should + be a dict of {Team.name:Team} + ''' + users = {} + key = 'superusers' if superuser else 'users' + if key in kwargs and kwargs.get(key) is not None: + for u in kwargs[key]: + if type(u) is User: + users[u.username] = u + else: + p1, sep, p2 = u.partition(':') + if p2: + t = teams[p1] + users[p2] = mk_user(p2, organization=organization, team=t, is_superuser=superuser, persisted=persisted) + else: + users[p1] = mk_user(p1, organization=organization, team=None, is_superuser=superuser, persisted=persisted) + return users + +def generate_teams(organization, persisted, **kwargs): + '''generate_teams evalutes a mixed list of Team objects and strings. + If a string is encountered a team with that string name is created and added to the lookup dict. + If a Team object is encounted the Team.name is used as a key for the lookup dict. + ''' + teams = {} + if 'teams' in kwargs and kwargs.get('teams') is not None: + for t in kwargs['teams']: + if type(t) is Team: + teams[t.name] = t + else: + teams[t] = mk_team(t, organization=organization, persisted=persisted) + return teams + +def create_survey_spec(variables=None, default_type='integer', required=True): + ''' + Returns a valid survey spec for a job template, based on the input + argument specifying variable name(s) + ''' + if isinstance(variables, list): + name = "%s survey" % variables[0] + description = "A survey that starts with %s." % variables[0] + vars_list = variables + else: + name = "%s survey" % variables + description = "A survey about %s." % variables + vars_list = [variables] + + spec = [] + index = 0 + for var in vars_list: + spec_item = {} + spec_item['index'] = index + index += 1 + spec_item['required'] = required + spec_item['choices'] = '' + spec_item['type'] = default_type + if isinstance(var, dict): + spec_item.update(var) + var_name = spec_item.get('variable', 'variable') + else: + var_name = var + spec_item.setdefault('variable', var_name) + spec_item.setdefault('question_name', "Enter a value for %s." % var_name) + spec_item.setdefault('question_description', "A question about %s." % var_name) + if spec_item['type'] == 'integer': + spec_item.setdefault('default', 0) + spec_item.setdefault('max', spec_item['default'] + 100) + spec_item.setdefault('min', spec_item['default'] - 100) + else: + spec_item.setdefault('default', '') + spec.append(spec_item) + + survey_spec = {} + survey_spec['spec'] = spec + survey_spec['name'] = name + survey_spec['description'] = description + return survey_spec + + +# create methods are intended to be called directly as needed +# or encapsulated by specific factory fixtures in a conftest +# + +def create_job_template(name, roles=None, persisted=True, **kwargs): + Objects = generate_objects(["job_template", "jobs", + "organization", + "inventory", + "project", + "credential", "cloud_credential", "network_credential", + "job_type", + "survey",], kwargs) + + org = None + proj = None + inv = None + cred = None + cloud_cred = None + net_cred = None + spec = None + jobs = {} + job_type = kwargs.get('job_type', 'run') + extra_vars = kwargs.get('extra_vars', '') + + if 'organization' in kwargs: + org = kwargs['organization'] + if type(org) is not Organization: + org = mk_organization(org, '%s-desc'.format(org), persisted=persisted) + + if 'credential' in kwargs: + cred = kwargs['credential'] + if type(cred) is not Credential: + cred = mk_credential(cred, persisted=persisted) + + if 'cloud_credential' in kwargs: + cloud_cred = kwargs['cloud_credential'] + if type(cloud_cred) is not Credential: + cloud_cred = mk_credential(cloud_cred, kind='aws', persisted=persisted) + + if 'network_credential' in kwargs: + net_cred = kwargs['network_credential'] + if type(net_cred) is not Credential: + net_cred = mk_credential(net_cred, kind='net', persisted=persisted) + + if 'project' in kwargs: + proj = kwargs['project'] + if type(proj) is not Project: + proj = mk_project(proj, organization=org, persisted=persisted) + + if 'inventory' in kwargs: + inv = kwargs['inventory'] + if type(inv) is not Inventory: + inv = mk_inventory(inv, organization=org, persisted=persisted) + + if 'survey' in kwargs: + spec = create_survey_spec(kwargs['survey']) + + jt = mk_job_template(name, project=proj, + inventory=inv, credential=cred, + network_credential=net_cred, cloud_credential=cloud_cred, + job_type=job_type, spec=spec, extra_vars=extra_vars, + persisted=persisted) + + if 'jobs' in kwargs: + for i in kwargs['jobs']: + if type(i) is Job: + jobs[i.pk] = i + else: + # Fill in default survey answers + job_extra_vars = {} + for question in spec['spec']: + job_extra_vars[question['variable']] = question['default'] + jobs[i] = mk_job(job_template=jt, project=proj, inventory=inv, credential=cred, + extra_vars=job_extra_vars, + job_type=job_type, persisted=persisted) + + role_objects = generate_role_objects([org, proj, inv, cred]) + apply_roles(roles, role_objects, persisted) + + return Objects(job_template=jt, + jobs=jobs, + project=proj, + inventory=inv, + credential=cred, cloud_credential=cloud_cred, network_credential=net_cred, + job_type=job_type, + organization=org, + survey=spec,) + +def create_organization(name, roles=None, persisted=True, **kwargs): + Objects = generate_objects(["organization", + "teams", "users", + "superusers", + "projects", + "labels", + "notification_templates", + "inventories",], kwargs) + + projects = {} + inventories = {} + labels = {} + notification_templates = {} + + org = mk_organization(name, '%s-desc'.format(name), persisted=persisted) + + if 'inventories' in kwargs: + for i in kwargs['inventories']: + if type(i) is Inventory: + inventories[i.name] = i + else: + inventories[i] = mk_inventory(i, organization=org, persisted=persisted) + + if 'projects' in kwargs: + for p in kwargs['projects']: + if type(p) is Project: + projects[p.name] = p + else: + projects[p] = mk_project(p, organization=org, persisted=persisted) + + teams = generate_teams(org, persisted, teams=kwargs.get('teams')) + superusers = generate_users(org, teams, True, persisted, superusers=kwargs.get('superusers')) + users = generate_users(org, teams, False, persisted, users=kwargs.get('users')) + + if 'labels' in kwargs: + for l in kwargs['labels']: + if type(l) is Label: + labels[l.name] = l + else: + labels[l] = mk_label(l, organization=org, persisted=persisted) + + if 'notification_templates' in kwargs: + for nt in kwargs['notification_templates']: + if type(nt) is NotificationTemplate: + notification_templates[nt.name] = nt + else: + notification_templates[nt] = mk_notification_template(nt, organization=org, persisted=persisted) + + role_objects = generate_role_objects([org, superusers, users, teams, projects, labels, notification_templates]) + apply_roles(roles, role_objects, persisted) + return Objects(organization=org, + superusers=_Mapped(superusers), + users=_Mapped(users), + teams=_Mapped(teams), + projects=_Mapped(projects), + labels=_Mapped(labels), + notification_templates=_Mapped(notification_templates), + inventories=_Mapped(inventories)) + +def create_notification_template(name, roles=None, persisted=True, **kwargs): + Objects = generate_objects(["notification_template", + "organization", + "users", + "superusers", + "teams",], kwargs) + + organization = None + + if 'organization' in kwargs: + org = kwargs['organization'] + organization = mk_organization(org, '{}-desc'.format(org), persisted=persisted) + + notification_template = mk_notification_template(name, organization=organization, persisted=persisted) + + teams = generate_teams(organization, persisted, teams=kwargs.get('teams')) + superusers = generate_users(organization, teams, True, persisted, superusers=kwargs.get('superusers')) + users = generate_users(organization, teams, False, persisted, users=kwargs.get('users')) + + role_objects = generate_role_objects([organization, notification_template]) + apply_roles(roles, role_objects, persisted) + return Objects(notification_template=notification_template, + organization=organization, + users=_Mapped(users), + superusers=_Mapped(superusers), + teams=teams) diff --git a/awx/main/tests/functional/ansible.json b/awx/main/tests/functional/ansible.json new file mode 100644 index 0000000000..e877df2ad1 --- /dev/null +++ b/awx/main/tests/functional/ansible.json @@ -0,0 +1,283 @@ +{ + "ansible_all_ipv4_addresses": [ + "172.17.0.7" + ], + "ansible_all_ipv6_addresses": [ + "fe80::42:acff:fe11:7" + ], + "ansible_architecture": "x86_64", + "ansible_bios_date": "12/01/2006", + "ansible_bios_version": "VirtualBox", + "ansible_cmdline": { + "BOOT_IMAGE": "/boot/vmlinuz64", + "base": true, + "console": "tty0", + "initrd": "/boot/initrd.img", + "loglevel": "3", + "noembed": true, + "nomodeset": true, + "norestore": true, + "user": "docker", + "waitusb": "10:LABEL=boot2docker-data" + }, + "ansible_date_time": { + "date": "2016-02-02", + "day": "02", + "epoch": "1454424257", + "hour": "14", + "iso8601": "2016-02-02T14:44:17Z", + "iso8601_basic": "20160202T144417348424", + "iso8601_basic_short": "20160202T144417", + "iso8601_micro": "2016-02-02T14:44:17.348496Z", + "minute": "44", + "month": "02", + "second": "17", + "time": "14:44:17", + "tz": "UTC", + "tz_offset": "+0000", + "weekday": "Tuesday", + "weekday_number": "2", + "weeknumber": "05", + "year": "2016" + }, + "ansible_default_ipv4": { + "address": "172.17.0.7", + "alias": "eth0", + "broadcast": "global", + "gateway": "172.17.0.1", + "interface": "eth0", + "macaddress": "02:42:ac:11:00:07", + "mtu": 1500, + "netmask": "255.255.0.0", + "network": "172.17.0.0", + "type": "ether" + }, + "ansible_default_ipv6": {}, + "ansible_devices": { + "sda": { + "holders": [], + "host": "", + "model": "VBOX HARDDISK", + "partitions": { + "sda1": { + "sectors": "510015555", + "sectorsize": 512, + "size": "243.19 GB", + "start": "1975995" + }, + "sda2": { + "sectors": "1975932", + "sectorsize": 512, + "size": "964.81 MB", + "start": "63" + } + }, + "removable": "0", + "rotational": "0", + "scheduler_mode": "deadline", + "sectors": "512000000", + "sectorsize": "512", + "size": "244.14 GB", + "support_discard": "0", + "vendor": "ATA" + }, + "sr0": { + "holders": [], + "host": "", + "model": "CD-ROM", + "partitions": {}, + "removable": "1", + "rotational": "1", + "scheduler_mode": "deadline", + "sectors": "61440", + "sectorsize": "2048", + "size": "120.00 MB", + "support_discard": "0", + "vendor": "VBOX" + } + }, + "ansible_distribution": "Ubuntu", + "ansible_distribution_major_version": "14", + "ansible_distribution_release": "trusty", + "ansible_distribution_version": "14.04", + "ansible_dns": { + "nameservers": [ + "8.8.8.8" + ] + }, + "ansible_domain": "", + "ansible_env": { + "HOME": "/root", + "HOSTNAME": "ede894599989", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US.UTF-8", + "LC_MESSAGES": "en_US.UTF-8", + "LESSCLOSE": "/usr/bin/lesspipe %s %s", + "LESSOPEN": "| /usr/bin/lesspipe %s", + "LS_COLORS": "", + "OLDPWD": "/ansible", + "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "PWD": "/ansible/examples", + "SHLVL": "1", + "_": "/usr/local/bin/ansible", + "container": "docker" + }, + "ansible_eth0": { + "active": true, + "device": "eth0", + "ipv4": { + "address": "172.17.0.7", + "broadcast": "global", + "netmask": "255.255.0.0", + "network": "172.17.0.0" + }, + "ipv6": [ + { + "address": "fe80::42:acff:fe11:7", + "prefix": "64", + "scope": "link" + } + ], + "macaddress": "02:42:ac:11:00:07", + "mtu": 1500, + "promisc": false, + "type": "ether" + }, + "ansible_fips": false, + "ansible_form_factor": "Other", + "ansible_fqdn": "ede894599989", + "ansible_hostname": "ede894599989", + "ansible_interfaces": [ + "lo", + "eth0" + ], + "ansible_kernel": "4.1.12-boot2docker", + "ansible_lo": { + "active": true, + "device": "lo", + "ipv4": { + "address": "127.0.0.1", + "broadcast": "host", + "netmask": "255.0.0.0", + "network": "127.0.0.0" + }, + "ipv6": [ + { + "address": "::1", + "prefix": "128", + "scope": "host" + } + ], + "mtu": 65536, + "promisc": false, + "type": "loopback" + }, + "ansible_lsb": { + "codename": "trusty", + "description": "Ubuntu 14.04.3 LTS", + "id": "Ubuntu", + "major_release": "14", + "release": "14.04" + }, + "ansible_machine": "x86_64", + "ansible_memfree_mb": 3746, + "ansible_memory_mb": { + "nocache": { + "free": 8896, + "used": 3638 + }, + "real": { + "free": 3746, + "total": 12534, + "used": 8788 + }, + "swap": { + "cached": 0, + "free": 4048, + "total": 4048, + "used": 0 + } + }, + "ansible_memtotal_mb": 12534, + "ansible_mounts": [ + { + "device": "/dev/sda1", + "fstype": "ext4", + "mount": "/etc/resolv.conf", + "options": "rw,relatime,data=ordered", + "size_available": 201281392640, + "size_total": 256895700992, + "uuid": "NA" + }, + { + "device": "/dev/sda1", + "fstype": "ext4", + "mount": "/etc/hostname", + "options": "rw,relatime,data=ordered", + "size_available": 201281392640, + "size_total": 256895700992, + "uuid": "NA" + }, + { + "device": "/dev/sda1", + "fstype": "ext4", + "mount": "/etc/hosts", + "options": "rw,relatime,data=ordered", + "size_available": 201281392640, + "size_total": 256895700992, + "uuid": "NA" + } + ], + "ansible_nodename": "ede894599989", + "ansible_os_family": "Debian", + "ansible_pkg_mgr": "apt", + "ansible_processor": [ + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz", + "GenuineIntel", + "Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz" + ], + "ansible_processor_cores": 8, + "ansible_processor_count": 1, + "ansible_processor_threads_per_core": 1, + "ansible_processor_vcpus": 8, + "ansible_product_name": "VirtualBox", + "ansible_product_serial": "0", + "ansible_product_uuid": "25C5EA5A-1DF1-48D9-A2C6-81227DA153C0", + "ansible_product_version": "1.2", + "ansible_python_version": "2.7.6", + "ansible_selinux": false, + "ansible_service_mgr": "upstart", + "ansible_ssh_host_key_dsa_public": "AAAAB3NzaC1kc3MAAACBALF0xsM8UMXgSKiWNw4t19wxbxLnxQX742t/dIM0O8YLx+/lIP+Q69Dv5uoVt0zKV39eFziRlCh96qj2KYkGEJ6XfVZFnhpculL2Pv2CPpSwKuQ1vTbDO/xxUrvY+bHpfNJf9Rh69bFEE2pTsjomFPCgp8M0qGaFtwg6czSaeBONAAAAFQCGEfVtj97JiexTVRqgQITYlFp/eQAAAIEAg+S9qWn+AIb3amwVoLL/usQYOPCmZY9RVPzpkjJ6OG+HI4B7cXeauPtNTJwT0f9vGEqzf4mPpmS+aCShj6iwdmJ+cOwR5+SJlNalab3CMBoXKVLbT1J2XWFlK0szKKnoReP96IDbkAkGQ3fkm4jz0z6Wy0u6wOQVNcd4G5cwLZ4AAACAFvBm+H1LwNrwWBjWio+ayhglZ4Y25mLMEn2+dqBz0gLK5szEbft1HMPOWIVHvl6vi3v34pAJHKpxXpkLlNliTn8iw9BzCOrgP4V8sp2/85mxEuCdI1w/QERj9cHu5iS2pZ0cUwDE3pfuuGBB3IEliaJyaapowdrM8lN12jQl11E=", + "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHiYp4e9RfXpxDcEWpK4EuXPHW9++xcFI9hiB0TYAZgxEF9RIgwfucpPawFk7HIFoNc7EXQMlryilLSbg155KWM=", + "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAILclD2JaC654azEsAfcHRIOA2Ig9/Qk6MX80i/VCEdSH", + "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDeSUGxZaZsgBsezld0mj3HcbAwx6aykGnejceBjcs6lVwSGMHevofzSXIQDPYBhZoyWNl0PYAHv6AsQ8+3khd2SitUMJAuHSz1ZjgHCCGQP9ijXTKHn+lWCKA8rhLG/dwYwiouoOPZfn1G+erbKO6XiVbELrrf2RadnMGuMinESIOKVj3IunXsaGRMsDOQferOnUf7MvH7xpQnoySyQ1+p4rGruaohWG+Y2cDo7+B2FylPVbrpRDDJkfbt4J96WHx0KOdD0qzOicQP8JqDflqQPJJCWcgrvjQOSe4gXdPB6GZDtBl2qgQRwt1IgizPMm+b7Bwbd2VDe1TeWV2gT/7H", + "ansible_swapfree_mb": 4048, + "ansible_swaptotal_mb": 4048, + "ansible_system": "Linux", + "ansible_system_vendor": "innotek GmbH", + "ansible_uptime_seconds": 178398, + "ansible_user_dir": "/root", + "ansible_user_gecos": "root", + "ansible_user_gid": 0, + "ansible_user_id": "root", + "ansible_user_shell": "/bin/bash", + "ansible_user_uid": 0, + "ansible_userspace_architecture": "x86_64", + "ansible_userspace_bits": "64", + "ansible_virtualization_role": "guest", + "ansible_virtualization_type": "docker", + "module_setup": true +} diff --git a/awx/main/tests/functional/api/test_activity_streams.py b/awx/main/tests/functional/api/test_activity_streams.py new file mode 100644 index 0000000000..f1c42cdd9d --- /dev/null +++ b/awx/main/tests/functional/api/test_activity_streams.py @@ -0,0 +1,154 @@ +import mock +import pytest + +from awx.main.middleware import ActivityStreamMiddleware +from awx.main.models.activity_stream import ActivityStream +from awx.main.access import ActivityStreamAccess + +from django.core.urlresolvers import reverse +from django.conf import settings + +def mock_feature_enabled(feature, bypass_database=None): + return True + +@pytest.fixture +def activity_stream_entry(organization, org_admin): + return ActivityStream.objects.filter(organization__pk=organization.pk, user=org_admin, operation='associate').first() + +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_get_activity_stream_list(monkeypatch, organization, get, user): + url = reverse('api:activity_stream_list') + response = get(url, user('admin', True)) + + assert response.status_code == 200 + +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_basic_fields(monkeypatch, organization, get, user): + u = user('admin', True) + activity_stream = ActivityStream.objects.filter(organization=organization).latest('pk') + activity_stream.actor = u + activity_stream.save() + + aspk = activity_stream.pk + url = reverse('api:activity_stream_detail', args=(aspk,)) + response = get(url, user('admin', True)) + + assert response.status_code == 200 + assert 'related' in response.data + assert 'organization' in response.data['related'] + assert 'summary_fields' in response.data + assert 'organization' in response.data['summary_fields'] + assert response.data['summary_fields']['organization'][0]['name'] == 'test-org' + +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_middleware_actor_added(monkeypatch, post, get, user): + u = user('admin-poster', True) + + url = reverse('api:organization_list') + response = post(url, + dict(name='test-org', description='test-desc'), + u, + middleware=ActivityStreamMiddleware()) + assert response.status_code == 201 + + org_id = response.data['id'] + activity_stream = ActivityStream.objects.filter(organization__pk=org_id).first() + + url = reverse('api:activity_stream_detail', args=(activity_stream.pk,)) + response = get(url, u) + + assert response.status_code == 200 + assert response.data['summary_fields']['actor']['username'] == 'admin-poster' + +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_rbac_stream_resource_roles(activity_stream_entry, organization, org_admin): + + assert activity_stream_entry.user.first() == org_admin + assert activity_stream_entry.organization.first() == organization + assert activity_stream_entry.role.first() == organization.admin_role + assert activity_stream_entry.object_relationship_type == 'awx.main.models.organization.Organization.admin_role' + +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_rbac_stream_user_roles(activity_stream_entry, organization, org_admin): + + assert activity_stream_entry.user.first() == org_admin + assert activity_stream_entry.organization.first() == organization + assert activity_stream_entry.role.first() == organization.admin_role + assert activity_stream_entry.object_relationship_type == 'awx.main.models.organization.Organization.admin_role' + +@pytest.mark.django_db +@pytest.mark.activity_stream_access +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +def test_stream_access_cant_change(activity_stream_entry, organization, org_admin): + access = ActivityStreamAccess(org_admin) + # These should always return false because the activity stream can not be edited + assert not access.can_add(activity_stream_entry) + assert not access.can_change(activity_stream_entry, {'organization': None}) + assert not access.can_delete(activity_stream_entry) + +@pytest.mark.django_db +@pytest.mark.activity_stream_access +@pytest.mark.skipif(not getattr(settings, 'ACTIVITY_STREAM_ENABLED', True), reason="Activity stream not enabled") +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +def test_stream_queryset_hides_shows_items( + activity_stream_entry, organization, user, org_admin, + project, org_credential, inventory, label, deploy_jobtemplate, + notification_template, group, host, team): + # this user is not in any organizations and should not see any resource activity + no_access_user = user('no-access-user', False) + queryset = ActivityStreamAccess(no_access_user).get_queryset() + + assert not queryset.filter(project__pk=project.pk) + assert not queryset.filter(credential__pk=org_credential.pk) + assert not queryset.filter(inventory__pk=inventory.pk) + assert not queryset.filter(label__pk=label.pk) + assert not queryset.filter(job_template__pk=deploy_jobtemplate.pk) + assert not queryset.filter(group__pk=group.pk) + assert not queryset.filter(host__pk=host.pk) + assert not queryset.filter(team__pk=team.pk) + assert not queryset.filter(notification_template__pk=notification_template.pk) + + # Organization admin should be able to see most things in the ActivityStream + queryset = ActivityStreamAccess(org_admin).get_queryset() + + assert queryset.filter(project__pk=project.pk, operation='create').count() == 1 + assert queryset.filter(credential__pk=org_credential.pk, operation='create').count() == 1 + assert queryset.filter(inventory__pk=inventory.pk, operation='create').count() == 1 + assert queryset.filter(label__pk=label.pk, operation='create').count() == 1 + assert queryset.filter(job_template__pk=deploy_jobtemplate.pk, operation='create').count() == 1 + assert queryset.filter(group__pk=group.pk, operation='create').count() == 1 + assert queryset.filter(host__pk=host.pk, operation='create').count() == 1 + assert queryset.filter(team__pk=team.pk, operation='create').count() == 1 + assert queryset.filter(notification_template__pk=notification_template.pk, operation='create').count() == 1 + +@pytest.mark.django_db +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +def test_stream_user_direct_role_updates(get, post, organization_factory): + objects = organization_factory('test_org', + superusers=['admin'], + users=['test'], + inventories=['inv1']) + + url = reverse('api:user_roles_list', args=(objects.users.test.pk,)) + post(url, dict(id=objects.inventories.inv1.read_role.pk), objects.superusers.admin) + + activity_stream = ActivityStream.objects.filter( + inventory__pk=objects.inventories.inv1.pk, + user__pk=objects.users.test.pk, + role__pk=objects.inventories.inv1.read_role.pk).first() + url = reverse('api:activity_stream_detail', args=(activity_stream.pk,)) + response = get(url, objects.users.test) + + assert response.data['object1'] == 'user' + assert response.data['object2'] == 'inventory' diff --git a/awx/main/tests/functional/api/test_adhoc.py b/awx/main/tests/functional/api/test_adhoc.py new file mode 100644 index 0000000000..e7029b0c79 --- /dev/null +++ b/awx/main/tests/functional/api/test_adhoc.py @@ -0,0 +1,148 @@ +import mock # noqa +import pytest + +from django.core.urlresolvers import reverse + + + +""" + def run_test_ad_hoc_command(self, **kwargs): + # Post to list to start a new ad hoc command. + expect = kwargs.pop('expect', 201) + url = kwargs.pop('url', reverse('api:ad_hoc_command_list')) + data = { + 'inventory': self.inventory.pk, + 'credential': self.credential.pk, + 'module_name': 'command', + 'module_args': 'uptime', + } + data.update(kwargs) + for k,v in data.items(): + if v is None: + del data[k] + return self.post(url, data, expect=expect) +""" + +@pytest.fixture +def post_adhoc(post, inventory, machine_credential): + def f(url, data, user, expect=201): + if not url: + url = reverse('api:ad_hoc_command_list') + + if 'module_name' not in data: + data['module_name'] = 'command' + if 'module_args' not in data: + data['module_args'] = 'uptime' + if 'inventory' not in data: + data['inventory'] = inventory.id + if 'credential' not in data: + data['credential'] = machine_credential.id + + for k,v in data.items(): + if v is None: + del data[k] + + return post(url, data, user, expect=expect) + return f + + + +@pytest.mark.django_db +def test_admin_post_ad_hoc_command_list(admin, post_adhoc, inventory, machine_credential): + res = post_adhoc(reverse('api:ad_hoc_command_list'), {}, admin, expect=201) + assert res.data['job_type'] == 'run' + assert res.data['inventory'], inventory.id + assert res.data['credential'] == machine_credential.id + assert res.data['module_name'] == 'command' + assert res.data['module_args'] == 'uptime' + assert res.data['limit'] == '' + assert res.data['forks'] == 0 + assert res.data['verbosity'] == 0 + assert res.data['become_enabled'] is False + + +@pytest.mark.django_db +def test_empty_post_403(admin, post): + post(reverse('api:ad_hoc_command_list'), {}, admin, expect=400) + +@pytest.mark.django_db +def test_empty_put_405(admin, put): + put(reverse('api:ad_hoc_command_list'), {}, admin, expect=405) + +@pytest.mark.django_db +def test_empty_patch_405(admin, patch): + patch(reverse('api:ad_hoc_command_list'), {}, admin, expect=405) + +@pytest.mark.django_db +def test_empty_delete_405(admin, delete): + delete(reverse('api:ad_hoc_command_list'), admin, expect=405) + +@pytest.mark.django_db +def test_user_post_ad_hoc_command_list(alice, post_adhoc, inventory, machine_credential): + inventory.adhoc_role.members.add(alice) + machine_credential.use_role.members.add(alice) + post_adhoc(reverse('api:ad_hoc_command_list'), {}, alice, expect=201) + +@pytest.mark.django_db +def test_user_post_ad_hoc_command_list_xfail(alice, post_adhoc, inventory, machine_credential): + inventory.read_role.members.add(alice) # just read access? no dice. + machine_credential.use_role.members.add(alice) + post_adhoc(reverse('api:ad_hoc_command_list'), {}, alice, expect=403) + +@pytest.mark.django_db +def test_user_post_ad_hoc_command_list_without_creds(alice, post_adhoc, inventory, machine_credential): + inventory.adhoc_role.members.add(alice) + post_adhoc(reverse('api:ad_hoc_command_list'), {}, alice, expect=403) + +@pytest.mark.django_db +def test_user_post_ad_hoc_command_list_without_inventory(alice, post_adhoc, inventory, machine_credential): + machine_credential.use_role.members.add(alice) + post_adhoc(reverse('api:ad_hoc_command_list'), {}, alice, expect=403) + + +@pytest.mark.django_db +def test_admin_post_inventory_ad_hoc_command_list(admin, post_adhoc, inventory): + post_adhoc(reverse('api:inventory_ad_hoc_commands_list', args=(inventory.id,)), {'inventory': None}, admin, expect=201) + post_adhoc(reverse('api:inventory_ad_hoc_commands_list', args=(inventory.id,)), {}, admin, expect=201) + + +@pytest.mark.django_db +def test_get_inventory_ad_hoc_command_list(admin, alice, post_adhoc, get, inventory_factory, machine_credential): + inv1 = inventory_factory('inv1') + inv2 = inventory_factory('inv2') + + post_adhoc(reverse('api:ad_hoc_command_list'), {'inventory': inv1.id}, admin, expect=201) + post_adhoc(reverse('api:ad_hoc_command_list'), {'inventory': inv2.id}, admin, expect=201) + res = get(reverse('api:ad_hoc_command_list'), admin, expect=200) + assert res.data['count'] == 2 + res = get(reverse('api:inventory_ad_hoc_commands_list', args=(inv1.id,)), admin, expect=200) + assert res.data['count'] == 1 + res = get(reverse('api:inventory_ad_hoc_commands_list', args=(inv2.id,)), admin, expect=200) + assert res.data['count'] == 1 + + inv1.adhoc_role.members.add(alice) + res = get(reverse('api:inventory_ad_hoc_commands_list', args=(inv1.id,)), alice, expect=200) + assert res.data['count'] == 1 + + machine_credential.use_role.members.add(alice) + res = get(reverse('api:inventory_ad_hoc_commands_list', args=(inv1.id,)), alice, expect=200) + assert res.data['count'] == 1 + res = get(reverse('api:inventory_ad_hoc_commands_list', args=(inv2.id,)), alice, expect=403) + + +@pytest.mark.django_db +def test_bad_data1(admin, post_adhoc): + post_adhoc(reverse('api:ad_hoc_command_list'), {'module_name': 'command', 'module_args': None}, admin, expect=400) + +@pytest.mark.django_db +def test_bad_data2(admin, post_adhoc): + post_adhoc(reverse('api:ad_hoc_command_list'), {'job_type': 'baddata'}, admin, expect=400) + +@pytest.mark.django_db +def test_bad_data3(admin, post_adhoc): + post_adhoc(reverse('api:ad_hoc_command_list'), {'verbosity': -1}, admin, expect=400) + +@pytest.mark.django_db +def test_bad_data4(admin, post_adhoc): + post_adhoc(reverse('api:ad_hoc_command_list'), {'forks': -1}, admin, expect=400) + diff --git a/awx/main/tests/functional/api/test_create_attach_views.py b/awx/main/tests/functional/api/test_create_attach_views.py new file mode 100644 index 0000000000..5399356a21 --- /dev/null +++ b/awx/main/tests/functional/api/test_create_attach_views.py @@ -0,0 +1,45 @@ +import pytest + +from django.core.urlresolvers import reverse + + +@pytest.mark.django_db +def test_user_role_view_access(rando, inventory, mocker, post): + "Assure correct access method is called when assigning users new roles" + role_pk = inventory.admin_role.pk + data = {"id": role_pk} + mock_access = mocker.MagicMock(can_attach=mocker.MagicMock(return_value=False)) + with mocker.patch('awx.main.access.RoleAccess', return_value=mock_access): + post(url=reverse('api:user_roles_list', args=(rando.pk,)), + data=data, user=rando, expect=403) + mock_access.can_attach.assert_called_once_with( + inventory.admin_role, rando, 'members', data, + skip_sub_obj_read_check=False) + +@pytest.mark.django_db +def test_team_role_view_access(rando, team, inventory, mocker, post): + "Assure correct access method is called when assigning teams new roles" + team.admin_role.members.add(rando) + role_pk = inventory.admin_role.pk + data = {"id": role_pk} + mock_access = mocker.MagicMock(can_attach=mocker.MagicMock(return_value=False)) + with mocker.patch('awx.main.access.RoleAccess', return_value=mock_access): + post(url=reverse('api:team_roles_list', args=(team.pk,)), + data=data, user=rando, expect=403) + mock_access.can_attach.assert_called_once_with( + inventory.admin_role, team, 'member_role.parents', data, + skip_sub_obj_read_check=False) + +@pytest.mark.django_db +def test_role_team_view_access(rando, team, inventory, mocker, post): + """Assure that /role/N/teams/ enforces the same permission restrictions + that /teams/N/roles/ does when assigning teams new roles""" + role_pk = inventory.admin_role.pk + data = {"id": team.pk} + mock_access = mocker.MagicMock(return_value=False, __name__='mocked') + with mocker.patch('awx.main.access.RoleAccess.can_attach', mock_access): + post(url=reverse('api:role_teams_list', args=(role_pk,)), + data=data, user=rando, expect=403) + mock_access.assert_called_once_with( + inventory.admin_role, team, 'member_role.parents', data, + skip_sub_obj_read_check=False) diff --git a/awx/main/tests/functional/api/test_credential.py b/awx/main/tests/functional/api/test_credential.py new file mode 100644 index 0000000000..eb6391ba05 --- /dev/null +++ b/awx/main/tests/functional/api/test_credential.py @@ -0,0 +1,256 @@ +import mock # noqa +import pytest + +from django.core.urlresolvers import reverse + + +# +# user credential creation +# + +@pytest.mark.django_db +def test_create_user_credential_via_credentials_list(post, get, alice): + response = post(reverse('api:credential_list'), { + 'user': alice.id, + 'name': 'Some name', + 'username': 'someusername' + }, alice) + assert response.status_code == 201 + + response = get(reverse('api:credential_list'), alice) + assert response.status_code == 200 + assert response.data['count'] == 1 + +@pytest.mark.django_db +def test_credential_validation_error_with_bad_user(post, admin): + response = post(reverse('api:credential_list'), { + 'user': 'asdf', + 'name': 'Some name', + 'username': 'someusername' + }, admin) + assert response.status_code == 400 + assert response.data['user'][0] == 'Incorrect type. Expected pk value, received unicode.' + +@pytest.mark.django_db +def test_create_user_credential_via_user_credentials_list(post, get, alice): + response = post(reverse('api:user_credentials_list', args=(alice.pk,)), { + 'user': alice.pk, + 'name': 'Some name', + 'username': 'someusername', + }, alice) + assert response.status_code == 201 + + response = get(reverse('api:user_credentials_list', args=(alice.pk,)), alice) + assert response.status_code == 200 + assert response.data['count'] == 1 + +@pytest.mark.django_db +def test_create_user_credential_via_credentials_list_xfail(post, alice, bob): + response = post(reverse('api:credential_list'), { + 'user': bob.id, + 'name': 'Some name', + 'username': 'someusername' + }, alice) + assert response.status_code == 403 + +@pytest.mark.django_db +def test_create_user_credential_via_user_credentials_list_xfail(post, alice, bob): + response = post(reverse('api:user_credentials_list', args=(bob.pk,)), { + 'user': bob.pk, + 'name': 'Some name', + 'username': 'someusername' + }, alice) + assert response.status_code == 403 + + +# +# team credential creation +# + +@pytest.mark.django_db +def test_create_team_credential(post, get, team, org_admin, team_member): + response = post(reverse('api:credential_list'), { + 'team': team.id, + 'name': 'Some name', + 'username': 'someusername' + }, org_admin) + assert response.status_code == 201 + + response = get(reverse('api:team_credentials_list', args=(team.pk,)), team_member) + assert response.status_code == 200 + assert response.data['count'] == 1 + +@pytest.mark.django_db +def test_create_team_credential_via_team_credentials_list(post, get, team, org_admin, team_member): + response = post(reverse('api:team_credentials_list', args=(team.pk,)), { + 'team': team.pk, + 'name': 'Some name', + 'username': 'someusername', + }, org_admin) + assert response.status_code == 201 + + response = get(reverse('api:team_credentials_list', args=(team.pk,)), team_member) + assert response.status_code == 200 + assert response.data['count'] == 1 + +@pytest.mark.django_db +def test_create_team_credential_by_urelated_user_xfail(post, team, alice, team_member): + response = post(reverse('api:credential_list'), { + 'team': team.id, + 'name': 'Some name', + 'username': 'someusername' + }, alice) + assert response.status_code == 403 + +@pytest.mark.django_db +def test_create_team_credential_by_team_member_xfail(post, team, alice, team_member): + # Members can't add credentials, only org admins.. for now? + response = post(reverse('api:credential_list'), { + 'team': team.id, + 'name': 'Some name', + 'username': 'someusername' + }, team_member) + assert response.status_code == 403 + + + +# +# organization credentials +# + +@pytest.mark.django_db +def test_create_org_credential_as_not_admin(post, organization, org_member): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'organization': organization.id, + }, org_member) + assert response.status_code == 403 + +@pytest.mark.django_db +def test_create_org_credential_as_admin(post, organization, org_admin): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'organization': organization.id, + }, org_admin) + assert response.status_code == 201 + +@pytest.mark.django_db +def test_credential_detail(post, get, organization, org_admin): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'organization': organization.id, + }, org_admin) + assert response.status_code == 201 + response = get(reverse('api:credential_detail', args=(response.data['id'],)), org_admin) + assert response.status_code == 200 + summary_fields = response.data['summary_fields'] + assert 'organization' in summary_fields + related_fields = response.data['related'] + assert 'organization' in related_fields + +@pytest.mark.django_db +def test_list_created_org_credentials(post, get, organization, org_admin, org_member): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'organization': organization.id, + }, org_admin) + assert response.status_code == 201 + + response = get(reverse('api:credential_list'), org_admin) + assert response.status_code == 200 + assert response.data['count'] == 1 + + response = get(reverse('api:credential_list'), org_member) + assert response.status_code == 200 + assert response.data['count'] == 0 + + response = get(reverse('api:organization_credential_list', args=(organization.pk,)), org_admin) + assert response.status_code == 200 + assert response.data['count'] == 1 + + response = get(reverse('api:organization_credential_list', args=(organization.pk,)), org_member) + assert response.status_code == 200 + assert response.data['count'] == 0 + + + +# +# Openstack Credentials +# + +@pytest.mark.django_db +def test_openstack_create_ok(post, organization, admin): + data = { + 'kind': 'openstack', + 'name': 'Best credential ever', + 'username': 'some_user', + 'password': 'some_password', + 'project': 'some_project', + 'host': 'some_host', + 'organization': organization.id, + } + response = post(reverse('api:credential_list'), data, admin) + assert response.status_code == 201 + +@pytest.mark.django_db +def test_openstack_create_fail_required_fields(post, organization, admin): + data = { + 'kind': 'openstack', + 'name': 'Best credential ever', + 'organization': organization.id, + } + response = post(reverse('api:credential_list'), data, admin) + assert response.status_code == 400 + assert 'username' in response.data + assert 'password' in response.data + assert 'host' in response.data + assert 'project' in response.data + + +# +# misc xfail conditions +# + +@pytest.mark.django_db +def test_create_credential_missing_user_team_org_xfail(post, admin): + # Must specify one of user, team, or organization + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + }, admin) + assert response.status_code == 400 + +@pytest.mark.django_db +def test_create_credential_with_user_and_org_xfail(post, organization, admin): + # Can only specify one of user, team, or organization + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'user': admin.id, + 'organization': organization.id, + }, admin) + assert response.status_code == 400 + +@pytest.mark.django_db +def test_create_credential_with_team_and_org_xfail(post, organization, team, admin): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'organization': organization.id, + 'team': team.id, + }, admin) + assert response.status_code == 400 + +@pytest.mark.django_db +def test_create_credential_with_user_and_team_xfail(post, team, admin): + response = post(reverse('api:credential_list'), { + 'name': 'Some name', + 'username': 'someusername', + 'user': admin.id, + 'team': team.id, + }, admin) + assert response.status_code == 400 diff --git a/awx/main/tests/functional/api/test_fact_versions.py b/awx/main/tests/functional/api/test_fact_versions.py new file mode 100644 index 0000000000..fa42802077 --- /dev/null +++ b/awx/main/tests/functional/api/test_fact_versions.py @@ -0,0 +1,255 @@ +# Python +import mock +import pytest +from datetime import timedelta +import urlparse +import urllib + +# AWX +from awx.main.models.fact import Fact +from awx.main.utils import timestamp_apiformat + +# Django +from django.core.urlresolvers import reverse +from django.utils import timezone + +def mock_feature_enabled(feature, bypass_database=None): + return True + +def mock_feature_disabled(feature, bypass_database=None): + return False + +def setup_common(hosts, fact_scans, get, user, epoch=timezone.now(), get_params={}, host_count=1): + hosts = hosts(host_count=host_count) + fact_scans(fact_scans=3, timestamp_epoch=epoch) + + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = get(url, user('admin', True), data=get_params) + + return (hosts[0], response) + +def check_url(url1_full, fact_known, module): + url1_split = urlparse.urlsplit(url1_full) + url1 = url1_split.path + url1_params = urlparse.parse_qsl(url1_split.query) + + url2 = reverse('api:host_fact_compare_view', args=(fact_known.host.pk,)) + url2_params = [('module', module), ('datetime', timestamp_apiformat(fact_known.timestamp))] + + assert url1 == url2 + assert urllib.urlencode(url1_params) == urllib.urlencode(url2_params) + +def check_response_facts(facts_known, response): + for i, fact_known in enumerate(facts_known): + assert fact_known.module == response.data['results'][i]['module'] + assert timestamp_apiformat(fact_known.timestamp) == response.data['results'][i]['timestamp'] + check_url(response.data['results'][i]['related']['fact_view'], fact_known, fact_known.module) + +def check_system_tracking_feature_forbidden(response): + assert 402 == response.status_code + assert 'Your license does not permit use of system tracking.' == response.data['detail'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_disabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_system_tracking_license_get(hosts, get, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + check_system_tracking_feature_forbidden(response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_disabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_system_tracking_license_options(hosts, options, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = options(url, None, user('admin', True)) + + check_system_tracking_feature_forbidden(response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_no_facts_db(hosts, get, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + response_expected = { + 'results': [] + } + assert response_expected == response.data + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_basic_fields(hosts, fact_scans, get, user): + epoch = timezone.now() + search = { + 'from': epoch, + 'to': epoch, + } + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, get_params=search) + + results = response.data['results'] + assert 'related' in results[0] + assert 'timestamp' in results[0] + assert 'module' in results[0] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_basic_options_fields(hosts, fact_scans, options, user): + hosts = hosts(host_count=1) + fact_scans(fact_scans=1) + + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = options(url, None, user('admin', True), pk=hosts[0].id) + + assert 'related' in response.data['actions']['GET'] + assert 'module' in response.data['actions']['GET'] + assert ("ansible", "Ansible") in response.data['actions']['GET']['module']['choices'] + assert ("services", "Services") in response.data['actions']['GET']['module']['choices'] + assert ("packages", "Packages") in response.data['actions']['GET']['module']['choices'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_related_fact_view(hosts, fact_scans, get, user): + epoch = timezone.now() + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch) + facts_known = Fact.get_timeline(host.id) + assert 9 == len(facts_known) + assert 9 == len(response.data['results']) + + for i, fact_known in enumerate(facts_known): + check_url(response.data['results'][i]['related']['fact_view'], fact_known, fact_known.module) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_multiple_hosts(hosts, fact_scans, get, user): + epoch = timezone.now() + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, host_count=3) + facts_known = Fact.get_timeline(host.id) + assert 9 == len(facts_known) + assert 9 == len(response.data['results']) + + for i, fact_known in enumerate(facts_known): + check_url(response.data['results'][i]['related']['fact_view'], fact_known, fact_known.module) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_param_to_from(hosts, fact_scans, get, user): + epoch = timezone.now() + search = { + 'from': epoch - timedelta(days=10), + 'to': epoch + timedelta(days=10), + } + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, get_params=search) + facts_known = Fact.get_timeline(host.id, ts_from=search['from'], ts_to=search['to']) + assert 9 == len(facts_known) + assert 9 == len(response.data['results']) + + check_response_facts(facts_known, response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_param_module(hosts, fact_scans, get, user): + epoch = timezone.now() + search = { + 'module': 'packages', + } + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, get_params=search) + facts_known = Fact.get_timeline(host.id, module=search['module']) + assert 3 == len(facts_known) + assert 3 == len(response.data['results']) + + check_response_facts(facts_known, response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_param_from(hosts, fact_scans, get, user): + epoch = timezone.now() + search = { + 'from': epoch + timedelta(days=1), + } + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, get_params=search) + facts_known = Fact.get_timeline(host.id, ts_from=search['from']) + assert 3 == len(facts_known) + assert 3 == len(response.data['results']) + + check_response_facts(facts_known, response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_param_to(hosts, fact_scans, get, user): + epoch = timezone.now() + search = { + 'to': epoch + timedelta(days=1), + } + + (host, response) = setup_common(hosts, fact_scans, get, user, epoch=epoch, get_params=search) + facts_known = Fact.get_timeline(host.id, ts_to=search['to']) + assert 6 == len(facts_known) + assert 6 == len(response.data['results']) + + check_response_facts(facts_known, response) + +def _test_user_access_control(hosts, fact_scans, get, user_obj, team_obj): + hosts = hosts(host_count=1) + fact_scans(fact_scans=1) + + team_obj.member_role.members.add(user_obj) + + url = reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) + response = get(url, user_obj) + return response + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_normal_user_403(hosts, fact_scans, get, user, team): + user_bob = user('bob', False) + response = _test_user_access_control(hosts, fact_scans, get, user_bob, team) + + assert 403 == response.status_code + assert "You do not have permission to perform this action." == response.data['detail'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_super_user_ok(hosts, fact_scans, get, user, team): + user_super = user('bob', True) + response = _test_user_access_control(hosts, fact_scans, get, user_super, team) + + assert 200 == response.status_code + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_user_admin_ok(organization, hosts, fact_scans, get, user, team): + user_admin = user('johnson', False) + organization.admin_role.members.add(user_admin) + + response = _test_user_access_control(hosts, fact_scans, get, user_admin, team) + + assert 200 == response.status_code + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_user_admin_403(organization, organizations, hosts, fact_scans, get, user, team): + user_admin = user('johnson', False) + org2 = organizations(1) + org2[0].admin_role.members.add(user_admin) + + response = _test_user_access_control(hosts, fact_scans, get, user_admin, team) + + assert 403 == response.status_code + diff --git a/awx/main/tests/functional/api/test_fact_view.py b/awx/main/tests/functional/api/test_fact_view.py new file mode 100644 index 0000000000..be5367ba52 --- /dev/null +++ b/awx/main/tests/functional/api/test_fact_view.py @@ -0,0 +1,182 @@ +import mock +import pytest +import json + +from awx.main.utils import timestamp_apiformat +from django.core.urlresolvers import reverse +from django.utils import timezone + +def mock_feature_enabled(feature, bypass_database=None): + return True + +def mock_feature_disabled(feature, bypass_database=None): + return False + +# TODO: Consider making the fact_scan() fixture a Class, instead of a function, and move this method into it +def find_fact(facts, host_id, module_name, timestamp): + for f in facts: + if f.host_id == host_id and f.module == module_name and f.timestamp == timestamp: + return f + raise RuntimeError('fact <%s, %s, %s> not found in %s', (host_id, module_name, timestamp, facts)) + +def setup_common(hosts, fact_scans, get, user, epoch=timezone.now(), module_name='ansible', get_params={}): + hosts = hosts(host_count=1) + facts = fact_scans(fact_scans=1, timestamp_epoch=epoch) + + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = get(url, user('admin', True), data=get_params) + + fact_known = find_fact(facts, hosts[0].id, module_name, epoch) + return (fact_known, response) + +def check_system_tracking_feature_forbidden(response): + assert 402 == response.status_code + assert 'Your license does not permit use of system tracking.' == response.data['detail'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_disabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_system_tracking_license_get(hosts, get, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + check_system_tracking_feature_forbidden(response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_disabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_system_tracking_license_options(hosts, options, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = options(url, None, user('admin', True)) + + check_system_tracking_feature_forbidden(response) + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_no_fact_found(hosts, get, user): + hosts = hosts(host_count=1) + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + expected_response = { + "detail": "Fact not found." + } + assert 404 == response.status_code + assert expected_response == response.data + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_basic_fields(hosts, fact_scans, get, user): + hosts = hosts(host_count=1) + fact_scans(fact_scans=1) + + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + assert 'related' in response.data + assert 'id' in response.data + assert 'facts' in response.data + assert 'module' in response.data + assert 'host' in response.data + assert isinstance(response.data['host'], int) + assert 'summary_fields' in response.data + assert 'host' in response.data['summary_fields'] + assert 'name' in response.data['summary_fields']['host'] + assert 'description' in response.data['summary_fields']['host'] + assert 'host' in response.data['related'] + assert reverse('api:host_detail', args=(hosts[0].pk,)) == response.data['related']['host'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_content(hosts, fact_scans, get, user, fact_ansible_json): + (fact_known, response) = setup_common(hosts, fact_scans, get, user) + + assert fact_known.host_id == response.data['host'] + assert fact_ansible_json == (json.loads(response.data['facts']) if isinstance(response.data['facts'], unicode) else response.data['facts']) # TODO: Just make response.data['facts'] when we're only dealing with postgres, or if jsonfields ever fixes this bug + assert timestamp_apiformat(fact_known.timestamp) == response.data['timestamp'] + assert fact_known.module == response.data['module'] + +def _test_search_by_module(hosts, fact_scans, get, user, fact_json, module_name): + params = { + 'module': module_name + } + (fact_known, response) = setup_common(hosts, fact_scans, get, user, module_name=module_name, get_params=params) + + assert fact_json == (json.loads(response.data['facts']) if isinstance(response.data['facts'], unicode) else response.data['facts']) # TODO: Just make response.data['facts'] when we're only dealing with postgres, or if jsonfields ever fixes this bug + assert timestamp_apiformat(fact_known.timestamp) == response.data['timestamp'] + assert module_name == response.data['module'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_search_by_module_packages(hosts, fact_scans, get, user, fact_packages_json): + _test_search_by_module(hosts, fact_scans, get, user, fact_packages_json, 'packages') + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_search_by_module_services(hosts, fact_scans, get, user, fact_services_json): + _test_search_by_module(hosts, fact_scans, get, user, fact_services_json, 'services') + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_search_by_timestamp_and_module(hosts, fact_scans, get, user, fact_packages_json): + epoch = timezone.now() + module_name = 'packages' + + (fact_known, response) = setup_common(hosts, fact_scans, get, user, module_name=module_name, epoch=epoch, get_params=dict(module=module_name, datetime=epoch)) + + assert fact_known.id == response.data['id'] + +def _test_user_access_control(hosts, fact_scans, get, user_obj, team_obj): + hosts = hosts(host_count=1) + fact_scans(fact_scans=1) + + team_obj.member_role.members.add(user_obj) + + url = reverse('api:host_fact_compare_view', args=(hosts[0].pk,)) + response = get(url, user_obj) + return response + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_normal_user_403(hosts, fact_scans, get, user, team): + user_bob = user('bob', False) + response = _test_user_access_control(hosts, fact_scans, get, user_bob, team) + + assert 403 == response.status_code + assert "You do not have permission to perform this action." == response.data['detail'] + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_super_user_ok(hosts, fact_scans, get, user, team): + user_super = user('bob', True) + response = _test_user_access_control(hosts, fact_scans, get, user_super, team) + + assert 200 == response.status_code + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_user_admin_ok(organization, hosts, fact_scans, get, user, team): + user_admin = user('johnson', False) + organization.admin_role.members.add(user_admin) + + response = _test_user_access_control(hosts, fact_scans, get, user_admin, team) + + assert 200 == response.status_code + +@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) +@pytest.mark.ac +@pytest.mark.django_db +def test_user_admin_403(organization, organizations, hosts, fact_scans, get, user, team): + user_admin = user('johnson', False) + org2 = organizations(1) + org2[0].admin_role.members.add(user_admin) + + response = _test_user_access_control(hosts, fact_scans, get, user_admin, team) + + assert 403 == response.status_code + diff --git a/awx/main/tests/functional/api/test_host_detail.py b/awx/main/tests/functional/api/test_host_detail.py new file mode 100644 index 0000000000..79213490b0 --- /dev/null +++ b/awx/main/tests/functional/api/test_host_detail.py @@ -0,0 +1,17 @@ +# TODO: As of writing this our only concern is ensuring that the fact feature is reflected in the Host endpoint. +# Other host tests should live here to make this test suite more complete. +import pytest + +from django.core.urlresolvers import reverse + +@pytest.mark.django_db +def test_basic_fields(hosts, fact_scans, get, user): + hosts = hosts(host_count=1) + + url = reverse('api:host_detail', args=(hosts[0].pk,)) + response = get(url, user('admin', True)) + + assert 'related' in response.data + assert 'fact_versions' in response.data['related'] + assert reverse('api:host_fact_versions_list', args=(hosts[0].pk,)) == response.data['related']['fact_versions'] + diff --git a/awx/main/tests/functional/api/test_inventory.py b/awx/main/tests/functional/api/test_inventory.py new file mode 100644 index 0000000000..38e06dad07 --- /dev/null +++ b/awx/main/tests/functional/api/test_inventory.py @@ -0,0 +1,163 @@ +import pytest + +from django.core.urlresolvers import reverse + +@pytest.mark.django_db +def test_inventory_source_notification_on_cloud_only(get, post, group_factory, user, notification_template): + u = user('admin', True) + g_cloud = group_factory('cloud') + g_not = group_factory('not_cloud') + cloud_is = g_cloud.inventory_source + not_is = g_not.inventory_source + cloud_is.source = 'ec2' + cloud_is.save() + url = reverse('api:inventory_source_notification_templates_any_list', args=(cloud_is.id,)) + response = post(url, dict(id=notification_template.id), u) + assert response.status_code == 204 + url = reverse('api:inventory_source_notification_templates_success_list', args=(not_is.id,)) + response = post(url, dict(id=notification_template.id), u) + assert response.status_code == 400 + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 200), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_edit_inventory(put, inventory, alice, role_field, expected_status_code): + data = { 'organization': inventory.organization.id, 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(inventory, role_field).members.add(alice) + put(reverse('api:inventory_detail', args=(inventory.id,)), data, alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 201), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_create_inventory_group(post, inventory, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(inventory, role_field).members.add(alice) + post(reverse('api:inventory_groups_list', args=(inventory.id,)), data, alice, expect=expected_status_code) + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 201), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_create_inventory_group_child(post, group, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(group.inventory, role_field).members.add(alice) + post(reverse('api:group_children_list', args=(group.id,)), data, alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 200), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_edit_inventory_group(put, group, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(group.inventory, role_field).members.add(alice) + put(reverse('api:group_detail', args=(group.id,)), data, alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 204), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_delete_inventory_group(delete, group, alice, role_field, expected_status_code): + if role_field: + getattr(group.inventory, role_field).members.add(alice) + delete(reverse('api:group_detail', args=(group.id,)), alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 201), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_create_inventory_host(post, inventory, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(inventory, role_field).members.add(alice) + post(reverse('api:inventory_hosts_list', args=(inventory.id,)), data, alice, expect=expected_status_code) + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 201), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_create_inventory_group_host(post, group, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(group.inventory, role_field).members.add(alice) + post(reverse('api:group_hosts_list', args=(group.id,)), data, alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 200), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_edit_inventory_host(put, host, alice, role_field, expected_status_code): + data = { 'name': 'New name', 'description': 'Hello world', } + if role_field: + getattr(host.inventory, role_field).members.add(alice) + put(reverse('api:host_detail', args=(host.id,)), data, alice, expect=expected_status_code) + + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 204), + ('update_role', 403), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_delete_inventory_host(delete, host, alice, role_field, expected_status_code): + if role_field: + getattr(host.inventory, role_field).members.add(alice) + delete(reverse('api:host_detail', args=(host.id,)), alice, expect=expected_status_code) + +@pytest.mark.parametrize("role_field,expected_status_code", [ + (None, 403), + ('admin_role', 202), + ('update_role', 202), + ('adhoc_role', 403), + ('use_role', 403) +]) +@pytest.mark.django_db +def test_inventory_source_update(post, inventory_source, alice, role_field, expected_status_code): + if role_field: + getattr(inventory_source.group.inventory, role_field).members.add(alice) + post(reverse('api:inventory_source_update_view', args=(inventory_source.id,)), {}, alice, expect=expected_status_code) diff --git a/awx/main/tests/functional/api/test_job_runtime_params.py b/awx/main/tests/functional/api/test_job_runtime_params.py new file mode 100644 index 0000000000..46aeadb6d0 --- /dev/null +++ b/awx/main/tests/functional/api/test_job_runtime_params.py @@ -0,0 +1,299 @@ +import pytest +import yaml + +from awx.api.serializers import JobLaunchSerializer +from awx.main.models.credential import Credential +from awx.main.models.inventory import Inventory +from awx.main.models.jobs import Job, JobTemplate + +from django.core.urlresolvers import reverse + +@pytest.fixture +def runtime_data(organization): + cred_obj = Credential.objects.create(name='runtime-cred', kind='ssh', username='test_user2', password='pas4word2') + inv_obj = organization.inventories.create(name="runtime-inv") + return dict( + extra_vars='{"job_launch_var": 4}', + limit='test-servers', + job_type='check', + job_tags='provision', + skip_tags='restart', + inventory=inv_obj.pk, + credential=cred_obj.pk, + ) + +@pytest.fixture +def job_with_links(machine_credential, inventory): + return Job.objects.create(name='existing-job', credential=machine_credential, inventory=inventory) + +@pytest.fixture +def job_template_prompts(project, inventory, machine_credential): + def rf(on_off): + return JobTemplate.objects.create( + job_type='run', + project=project, + inventory=inventory, + credential=machine_credential, + name='deploy-job-template', + ask_variables_on_launch=on_off, + ask_tags_on_launch=on_off, + ask_job_type_on_launch=on_off, + ask_inventory_on_launch=on_off, + ask_limit_on_launch=on_off, + ask_credential_on_launch=on_off, + ) + return rf + +@pytest.fixture +def job_template_prompts_null(project): + return JobTemplate.objects.create( + job_type='run', + project=project, + inventory=None, + credential=None, + name='deploy-job-template', + ask_variables_on_launch=True, + ask_tags_on_launch=True, + ask_job_type_on_launch=True, + ask_inventory_on_launch=True, + ask_limit_on_launch=True, + ask_credential_on_launch=True, + ) + +@pytest.fixture +def bad_scan_JT(job_template_prompts): + job_template = job_template_prompts(True) + job_template.job_type = 'scan' + job_template.save() + return job_template + +# End of setup, tests start here +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_ignore_unprompted_vars(runtime_data, job_template_prompts, post, admin_user, mocker): + job_template = job_template_prompts(False) + + mock_job = mocker.MagicMock(spec=Job, id=968, **runtime_data) + + with mocker.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', return_value=mock_job): + with mocker.patch('awx.api.serializers.JobSerializer.to_representation'): + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + runtime_data, admin_user, expect=201) + + # Check that job is serialized correctly + job_id = response.data['job'] + assert job_id == 968 + + # If job is created with no arguments, it will inherit JT attributes + mock_job.signal_start.assert_called_once_with(extra_vars={}) + + # Check that response tells us what things were ignored + assert 'job_launch_var' in response.data['ignored_fields']['extra_vars'] + assert 'job_type' in response.data['ignored_fields'] + assert 'limit' in response.data['ignored_fields'] + assert 'inventory' in response.data['ignored_fields'] + assert 'credential' in response.data['ignored_fields'] + assert 'job_tags' in response.data['ignored_fields'] + assert 'skip_tags' in response.data['ignored_fields'] + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_accept_prompted_vars(runtime_data, job_template_prompts, post, admin_user, mocker): + job_template = job_template_prompts(True) + + mock_job = mocker.MagicMock(spec=Job, id=968, **runtime_data) + + with mocker.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', return_value=mock_job): + with mocker.patch('awx.api.serializers.JobSerializer.to_representation'): + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + runtime_data, admin_user, expect=201) + + job_id = response.data['job'] + assert job_id == 968 + + mock_job.signal_start.assert_called_once_with(**runtime_data) + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_accept_prompted_vars_null(runtime_data, job_template_prompts_null, post, rando, mocker): + job_template = job_template_prompts_null + + # Give user permission to execute the job template + job_template.execute_role.members.add(rando) + + # Give user permission to use inventory and credential at runtime + credential = Credential.objects.get(pk=runtime_data['credential']) + credential.use_role.members.add(rando) + inventory = Inventory.objects.get(pk=runtime_data['inventory']) + inventory.use_role.members.add(rando) + + mock_job = mocker.MagicMock(spec=Job, id=968, **runtime_data) + + with mocker.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', return_value=mock_job): + with mocker.patch('awx.api.serializers.JobSerializer.to_representation'): + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + runtime_data, rando, expect=201) + + job_id = response.data['job'] + assert job_id == 968 + mock_job.signal_start.assert_called_once_with(**runtime_data) + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_reject_invalid_prompted_vars(runtime_data, job_template_prompts, post, admin_user): + job_template = job_template_prompts(True) + + response = post( + reverse('api:job_template_launch', args=[job_template.pk]), + dict(job_type='foobicate', # foobicate is not a valid job type + inventory=87865, credential=48474), admin_user, expect=400) + + assert response.data['job_type'] == [u'"foobicate" is not a valid choice.'] + assert response.data['inventory'] == [u'Invalid pk "87865" - object does not exist.'] + assert response.data['credential'] == [u'Invalid pk "48474" - object does not exist.'] + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_reject_invalid_prompted_extra_vars(runtime_data, job_template_prompts, post, admin_user): + job_template = job_template_prompts(True) + + response = post( + reverse('api:job_template_launch', args=[job_template.pk]), + dict(extra_vars='{"unbalanced brackets":'), admin_user, expect=400) + + assert response.data['extra_vars'] == ['Must be a valid JSON or YAML dictionary.'] + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_launch_fails_without_inventory(deploy_jobtemplate, post, admin_user): + deploy_jobtemplate.inventory = None + deploy_jobtemplate.save() + + response = post(reverse('api:job_template_launch', + args=[deploy_jobtemplate.pk]), {}, admin_user, expect=400) + + assert response.data['inventory'] == ["Job Template 'inventory' is missing or undefined."] + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_launch_fails_without_inventory_access(job_template_prompts, runtime_data, post, rando): + job_template = job_template_prompts(True) + job_template.execute_role.members.add(rando) + + # Assure that giving an inventory without access to the inventory blocks the launch + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + dict(inventory=runtime_data['inventory']), rando, expect=403) + + assert response.data['detail'] == u'You do not have permission to perform this action.' + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_launch_fails_without_credential_access(job_template_prompts, runtime_data, post, rando): + job_template = job_template_prompts(True) + job_template.execute_role.members.add(rando) + + # Assure that giving a credential without access blocks the launch + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + dict(credential=runtime_data['credential']), rando, expect=403) + + assert response.data['detail'] == u'You do not have permission to perform this action.' + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_block_scan_job_type_change(job_template_prompts, post, admin_user): + job_template = job_template_prompts(True) + + # Assure that changing the type of a scan job blocks the launch + response = post(reverse('api:job_template_launch', args=[job_template.pk]), + dict(job_type='scan'), admin_user, expect=400) + + assert 'job_type' in response.data + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_block_scan_job_inv_change(mocker, bad_scan_JT, runtime_data, post, admin_user): + # Assure that giving a new inventory for a scan job blocks the launch + with mocker.patch('awx.main.access.BaseAccess.check_license'): + response = post(reverse('api:job_template_launch', args=[bad_scan_JT.pk]), + dict(inventory=runtime_data['inventory']), admin_user, + expect=400) + + assert 'inventory' in response.data + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_relaunch_copy_vars(job_with_links, machine_credential, inventory, + deploy_jobtemplate, post, mocker): + job_with_links.job_template = deploy_jobtemplate + job_with_links.limit = "my_server" + with mocker.patch('awx.main.models.unified_jobs.UnifiedJobTemplate._get_unified_job_field_names', + return_value=['inventory', 'credential', 'limit']): + second_job = job_with_links.copy() + + # Check that job data matches the original variables + assert second_job.credential == job_with_links.credential + assert second_job.inventory == job_with_links.inventory + assert second_job.limit == 'my_server' + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_relaunch_resource_access(job_with_links, user): + inventory_user = user('user1', False) + credential_user = user('user2', False) + both_user = user('user3', False) + + # Confirm that a user with inventory & credential access can launch + job_with_links.credential.use_role.members.add(both_user) + job_with_links.inventory.use_role.members.add(both_user) + assert both_user.can_access(Job, 'start', job_with_links) + + # Confirm that a user with credential access alone can not launch + job_with_links.credential.use_role.members.add(credential_user) + assert not credential_user.can_access(Job, 'start', job_with_links) + + # Confirm that a user with inventory access alone can not launch + job_with_links.inventory.use_role.members.add(inventory_user) + assert not inventory_user.can_access(Job, 'start', job_with_links) + +@pytest.mark.django_db +def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate): + deploy_jobtemplate.extra_vars = '{"job_template_var": 3}' + deploy_jobtemplate.ask_credential_on_launch = True + deploy_jobtemplate.save() + + kv = dict(extra_vars={"job_launch_var": 4}, credential=machine_credential.id) + serializer = JobLaunchSerializer( + instance=deploy_jobtemplate, data=kv, + context={'obj': deploy_jobtemplate, 'data': kv, 'passwords': {}}) + validated = serializer.is_valid() + assert validated + + job_obj = deploy_jobtemplate.create_unified_job(**kv) + + final_job_extra_vars = yaml.load(job_obj.extra_vars) + assert 'job_template_var' in final_job_extra_vars + assert 'job_launch_var' in final_job_extra_vars + assert job_obj.credential.id == machine_credential.id + +@pytest.mark.django_db +@pytest.mark.job_runtime_vars +def test_job_launch_unprompted_vars_with_survey(mocker, survey_spec_factory, job_template_prompts, post, admin_user): + job_template = job_template_prompts(False) + job_template.survey_enabled = True + job_template.survey_spec = survey_spec_factory('survey_var') + job_template.save() + + with mocker.patch('awx.main.access.BaseAccess.check_license'): + mock_job = mocker.MagicMock(spec=Job, id=968, extra_vars={"job_launch_var": 3, "survey_var": 4}) + with mocker.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', return_value=mock_job): + with mocker.patch('awx.api.serializers.JobSerializer.to_representation', return_value={}): + response = post( + reverse('api:job_template_launch', args=[job_template.pk]), + dict(extra_vars={"job_launch_var": 3, "survey_var": 4}), + admin_user, expect=201) + + job_id = response.data['job'] + assert job_id == 968 + + # Check that the survey variable is accepted and the job variable isn't + mock_job.signal_start.assert_called_once_with(extra_vars={"survey_var": 4}) diff --git a/awx/main/tests/functional/api/test_job_template.py b/awx/main/tests/functional/api/test_job_template.py new file mode 100644 index 0000000000..cab2e53731 --- /dev/null +++ b/awx/main/tests/functional/api/test_job_template.py @@ -0,0 +1,349 @@ +import pytest +import mock + +# AWX +from awx.api.serializers import JobTemplateSerializer, JobLaunchSerializer +from awx.main.models.jobs import JobTemplate +from awx.main.models.projects import ProjectOptions + +# Django +from django.test.client import RequestFactory +from django.core.urlresolvers import reverse + +@property +def project_playbooks(self): + return ['mocked', 'mocked.yml', 'alt-mocked.yml'] + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +@pytest.mark.parametrize( + "grant_project, grant_credential, grant_inventory, expect", [ + (True, True, True, 201), + (True, True, False, 403), + (True, False, True, 403), + (False, True, True, 403), + ] +) +def test_create(post, project, machine_credential, inventory, alice, grant_project, grant_credential, grant_inventory, expect): + if grant_project: + project.use_role.members.add(alice) + if grant_credential: + machine_credential.use_role.members.add(alice) + if grant_inventory: + inventory.use_role.members.add(alice) + + post(reverse('api:job_template_list'), { + 'name': 'Some name', + 'project': project.id, + 'credential': machine_credential.id, + 'inventory': inventory.id, + 'playbook': 'mocked.yml', + }, alice, expect=expect) + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +@pytest.mark.parametrize( + "grant_project, grant_credential, grant_inventory, expect", [ + (True, True, True, 200), + (True, True, False, 403), + (True, False, True, 403), + (False, True, True, 403), + ] +) +def test_edit_sensitive_fields(patch, job_template_factory, alice, grant_project, grant_credential, grant_inventory, expect): + objs = job_template_factory('jt', organization='org1', project='prj', inventory='inv', credential='cred') + objs.job_template.admin_role.members.add(alice) + + if grant_project: + objs.project.use_role.members.add(alice) + if grant_credential: + objs.credential.use_role.members.add(alice) + if grant_inventory: + objs.inventory.use_role.members.add(alice) + + patch(reverse('api:job_template_detail', args=(objs.job_template.id,)), { + 'name': 'Some name', + 'project': objs.project.id, + 'credential': objs.credential.id, + 'inventory': objs.inventory.id, + 'playbook': 'alt-mocked.yml', + }, alice, expect=expect) + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +def test_edit_playbook(patch, job_template_factory, alice): + objs = job_template_factory('jt', organization='org1', project='prj', inventory='inv', credential='cred') + objs.job_template.admin_role.members.add(alice) + objs.project.use_role.members.add(alice) + objs.credential.use_role.members.add(alice) + objs.inventory.use_role.members.add(alice) + + patch(reverse('api:job_template_detail', args=(objs.job_template.id,)), { + 'playbook': 'alt-mocked.yml', + }, alice, expect=200) + + objs.inventory.use_role.members.remove(alice) + patch(reverse('api:job_template_detail', args=(objs.job_template.id,)), { + 'playbook': 'mocked.yml', + }, alice, expect=403) + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +def test_edit_nonsenstive(patch, job_template_factory, alice): + objs = job_template_factory('jt', organization='org1', project='prj', inventory='inv', credential='cred') + jt = objs.job_template + jt.admin_role.members.add(alice) + + res = patch(reverse('api:job_template_detail', args=(jt.id,)), { + 'name': 'updated', + 'description': 'bar', + 'forks': 14, + 'limit': 'something', + 'verbosity': 5, + 'extra_vars': '--', + 'job_tags': 'sometags', + 'force_handlers': True, + 'skip_tags': True, + 'ask_variables_on_launch':True, + 'ask_tags_on_launch':True, + 'ask_job_type_on_launch':True, + 'ask_inventory_on_launch':True, + 'ask_credential_on_launch': True, + }, alice, expect=200) + print(res.data) + assert res.data['name'] == 'updated' +@pytest.fixture +def jt_copy_edit(job_template_factory, project): + objects = job_template_factory( + 'copy-edit-job-template', + project=project) + return objects.job_template + +@property +def project_playbooks(self): + return ['mocked', 'mocked.yml', 'alt-mocked.yml'] + +@pytest.mark.django_db +def test_job_template_role_user(post, organization_factory, job_template_factory): + objects = organization_factory("org", + superusers=['admin'], + users=['test']) + + jt_objects = job_template_factory("jt", + organization=objects.organization, + inventory='test_inv', + project='test_proj') + + url = reverse('api:user_roles_list', args=(objects.users.test.pk,)) + response = post(url, dict(id=jt_objects.job_template.execute_role.pk), objects.superusers.admin) + assert response.status_code == 204 + +# Test protection against limited set of validation problems + +@pytest.mark.django_db +def test_bad_data_copy_edit(admin_user, project): + """ + If a required resource (inventory here) was deleted, copying not allowed + because doing so would caues a validation error + """ + + jt_res = JobTemplate.objects.create( + job_type='run', + project=project, + inventory=None, ask_inventory_on_launch=False, # not allowed + credential=None, ask_credential_on_launch=True, + name='deploy-job-template' + ) + serializer = JobTemplateSerializer(jt_res) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = admin_user + serializer.context['request'] = request + response = serializer.to_representation(jt_res) + assert not response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +# Tests for correspondence between view info and actual access + +@pytest.mark.django_db +def test_admin_copy_edit(jt_copy_edit, admin_user): + "Absent a validation error, system admins can do everything" + + # Serializer can_copy/can_edit fields + serializer = JobTemplateSerializer(jt_copy_edit) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = admin_user + serializer.context['request'] = request + response = serializer.to_representation(jt_copy_edit) + assert response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +@pytest.mark.django_db +def test_org_admin_copy_edit(jt_copy_edit, org_admin): + "Organization admins SHOULD be able to copy a JT firmly in their org" + + # Serializer can_copy/can_edit fields + serializer = JobTemplateSerializer(jt_copy_edit) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = org_admin + serializer.context['request'] = request + response = serializer.to_representation(jt_copy_edit) + assert response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +@pytest.mark.django_db +def test_org_admin_foreign_cred_no_copy_edit(jt_copy_edit, org_admin, machine_credential): + """ + Organization admins without access to the 3 related resources: + SHOULD NOT be able to copy JT + SHOULD be able to edit that job template, for nonsensitive changes + """ + + # Attach credential to JT that org admin can not use + jt_copy_edit.credential = machine_credential + jt_copy_edit.save() + + # Serializer can_copy/can_edit fields + serializer = JobTemplateSerializer(jt_copy_edit) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = org_admin + serializer.context['request'] = request + response = serializer.to_representation(jt_copy_edit) + assert not response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +@pytest.mark.django_db +def test_jt_admin_copy_edit(jt_copy_edit, rando): + """ + JT admins wihout access to associated resources SHOULD NOT be able to copy + SHOULD be able to make nonsensitive changes""" + + # random user given JT admin access only + jt_copy_edit.admin_role.members.add(rando) + jt_copy_edit.save() + + # Serializer can_copy/can_edit fields + serializer = JobTemplateSerializer(jt_copy_edit) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = rando + serializer.context['request'] = request + response = serializer.to_representation(jt_copy_edit) + assert not response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +@pytest.mark.django_db +def test_proj_jt_admin_copy_edit(jt_copy_edit, rando): + "JT admins with access to associated resources SHOULD be able to copy" + + # random user given JT and project admin abilities + jt_copy_edit.admin_role.members.add(rando) + jt_copy_edit.save() + jt_copy_edit.project.admin_role.members.add(rando) + jt_copy_edit.project.save() + + # Serializer can_copy/can_edit fields + serializer = JobTemplateSerializer(jt_copy_edit) + request = RequestFactory().get('/api/v1/job_templates/12/') + request.user = rando + serializer.context['request'] = request + response = serializer.to_representation(jt_copy_edit) + assert response['summary_fields']['can_copy'] + assert response['summary_fields']['can_edit'] + +# Functional tests - create new JT with all returned fields, as the UI does + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +def test_org_admin_copy_edit_functional(jt_copy_edit, org_admin, get, post): + get_response = get(reverse('api:job_template_detail', args=[jt_copy_edit.pk]), user=org_admin) + assert get_response.status_code == 200 + assert get_response.data['summary_fields']['can_copy'] + + post_data = get_response.data + post_data['name'] = '%s @ 12:19:47 pm' % post_data['name'] + post_response = post(reverse('api:job_template_list', args=[]), user=org_admin, data=post_data) + assert post_response.status_code == 201 + assert post_response.data['name'] == 'copy-edit-job-template @ 12:19:47 pm' + +@pytest.mark.django_db +@mock.patch.object(ProjectOptions, "playbooks", project_playbooks) +def test_jt_admin_copy_edit_functional(jt_copy_edit, rando, get, post): + + # Grant random user JT admin access only + jt_copy_edit.admin_role.members.add(rando) + jt_copy_edit.save() + + get_response = get(reverse('api:job_template_detail', args=[jt_copy_edit.pk]), user=rando) + assert get_response.status_code == 200 + assert not get_response.data['summary_fields']['can_copy'] + + post_data = get_response.data + post_data['name'] = '%s @ 12:19:47 pm' % post_data['name'] + post_response = post(reverse('api:job_template_list', args=[]), user=rando, data=post_data) + assert post_response.status_code == 403 + +@pytest.mark.django_db +def test_scan_jt_no_inventory(job_template_factory): + # A user should be able to create a scan job without a project, but an inventory is required + objects = job_template_factory('jt', + credential='c', + job_type="scan", + project='p', + inventory='i', + organization='o') + serializer = JobTemplateSerializer(data={"name": "Test", "job_type": "scan", + "project": None, "inventory": objects.inventory.pk}) + assert serializer.is_valid() + serializer = JobTemplateSerializer(data={"name": "Test", "job_type": "scan", + "project": None, "inventory": None}) + assert not serializer.is_valid() + assert "inventory" in serializer.errors + serializer = JobTemplateSerializer(data={"name": "Test", "job_type": "scan", + "project": None, "inventory": None, + "ask_inventory_on_launch": True}) + assert not serializer.is_valid() + assert "inventory" in serializer.errors + + # A user shouldn't be able to launch a scan job template which is missing an inventory + obj_jt = objects.job_template + obj_jt.inventory = None + serializer = JobLaunchSerializer(instance=obj_jt, + context={'obj': obj_jt, + "data": {}}, + data={}) + assert not serializer.is_valid() + assert 'inventory' in serializer.errors + +@pytest.mark.django_db +def test_scan_jt_surveys(inventory): + serializer = JobTemplateSerializer(data={"name": "Test", "job_type": "scan", + "project": None, "inventory": inventory.pk, + "survey_enabled": True}) + assert not serializer.is_valid() + assert "survey_enabled" in serializer.errors + +@pytest.mark.django_db +def test_jt_without_project(inventory): + data = dict(name="Test", job_type="run", + inventory=inventory.pk, project=None) + serializer = JobTemplateSerializer(data=data) + assert not serializer.is_valid() + assert "project" in serializer.errors + data["job_type"] = "check" + serializer = JobTemplateSerializer(data=data) + assert not serializer.is_valid() + assert "project" in serializer.errors + data["job_type"] = "scan" + serializer = JobTemplateSerializer(data=data) + assert serializer.is_valid() + +@pytest.mark.django_db +def test_disallow_template_delete_on_running_job(job_template_factory, delete, admin_user): + objects = job_template_factory('jt', + credential='c', + job_type="run", + project='p', + inventory='i', + organization='o') + objects.job_template.create_unified_job() + delete_response = delete(reverse('api:job_template_detail', args=[objects.job_template.pk]), user=admin_user) + assert delete_response.status_code == 409 diff --git a/awx/main/tests/functional/api/test_organization_counts.py b/awx/main/tests/functional/api/test_organization_counts.py new file mode 100644 index 0000000000..0e57488fab --- /dev/null +++ b/awx/main/tests/functional/api/test_organization_counts.py @@ -0,0 +1,205 @@ +import pytest + +from django.core.urlresolvers import reverse + +@pytest.fixture +def organization_resource_creator(organization, user): + def rf(users, admins, job_templates, projects, inventories, teams): + + # Associate one resource of every type with the organization + for i in range(users): + member_user = user('org-member %s' % i) + organization.member_role.members.add(member_user) + for i in range(admins): + admin_user = user('org-admin %s' % i) + organization.admin_role.members.add(admin_user) + for i in range(teams): + organization.teams.create(name='org-team %s' % i) + for i in range(inventories): + inventory = organization.inventories.create(name="associated-inv %s" % i) + for i in range(projects): + organization.projects.create(name="test-proj %s" % i, + description="test-proj-desc") + # Mix up the inventories and projects used by the job templates + i_proj = 0 + i_inv = 0 + for i in range(job_templates): + project = organization.projects.all()[i_proj] + inventory = organization.inventories.all()[i_inv] + project.jobtemplates.create(name="test-jt %s" % i, + description="test-job-template-desc", + inventory=inventory, + playbook="test_playbook.yml") + i_proj += 1 + i_inv += 1 + if i_proj >= organization.projects.count(): + i_proj = 0 + if i_inv >= organization.inventories.count(): + i_inv = 0 + + return organization + return rf + +COUNTS_PRIMES = { + 'users': 11, + 'admins': 5, + 'job_templates': 3, + 'projects': 3, + 'inventories': 7, + 'teams': 5 +} +COUNTS_ZEROS = { + 'users': 0, + 'admins': 0, + 'job_templates': 0, + 'projects': 0, + 'inventories': 0, + 'teams': 0 +} + +@pytest.fixture +def resourced_organization(organization_resource_creator): + return organization_resource_creator(**COUNTS_PRIMES) + +@pytest.mark.django_db +def test_org_counts_detail_admin(resourced_organization, user, get): + # Check that all types of resources are counted by a superuser + external_admin = user('admin', True) + response = get(reverse('api:organization_detail', + args=[resourced_organization.pk]), external_admin) + assert response.status_code == 200 + + counts = response.data['summary_fields']['related_field_counts'] + assert counts == COUNTS_PRIMES + +@pytest.mark.django_db +def test_org_counts_detail_member(resourced_organization, user, get): + # Check that a non-admin org member can only see users / admin in detail view + member_user = resourced_organization.member_role.members.get(username='org-member 1') + response = get(reverse('api:organization_detail', + args=[resourced_organization.pk]), member_user) + assert response.status_code == 200 + + counts = response.data['summary_fields']['related_field_counts'] + assert counts == { + 'users': COUNTS_PRIMES['users'], # Policy is that members can see other users and admins + 'admins': COUNTS_PRIMES['admins'], + 'job_templates': 0, + 'projects': 0, + 'inventories': 0, + 'teams': 0 + } + +@pytest.mark.django_db +def test_org_counts_list_admin(resourced_organization, user, get): + # Check that all types of resources are counted by a superuser + external_admin = user('admin', True) + response = get(reverse('api:organization_list', args=[]), external_admin) + assert response.status_code == 200 + + counts = response.data['results'][0]['summary_fields']['related_field_counts'] + assert counts == COUNTS_PRIMES + +@pytest.mark.django_db +def test_org_counts_list_member(resourced_organization, user, get): + # Check that a non-admin user can only see the full project and + # user count, consistent with the RBAC rules + member_user = resourced_organization.member_role.members.get(username='org-member 1') + response = get(reverse('api:organization_list', args=[]), member_user) + assert response.status_code == 200 + + counts = response.data['results'][0]['summary_fields']['related_field_counts'] + + assert counts == { + 'users': COUNTS_PRIMES['users'], # Policy is that members can see other users and admins + 'admins': COUNTS_PRIMES['admins'], + 'job_templates': 0, + 'projects': 0, + 'inventories': 0, + 'teams': 0 + } + +@pytest.mark.django_db +def test_new_org_zero_counts(user, post): + # Check that a POST to the organization list endpoint returns + # correct counts, including the new record + org_list_url = reverse('api:organization_list', args=[]) + post_response = post(url=org_list_url, data={'name': 'test organization', + 'description': ''}, user=user('admin', True)) + assert post_response.status_code == 201 + + new_org_list = post_response.render().data + counts_dict = new_org_list['summary_fields']['related_field_counts'] + assert counts_dict == COUNTS_ZEROS + +@pytest.mark.django_db +def test_two_organizations(resourced_organization, organizations, user, get): + # Check correct results for two organizations are returned + external_admin = user('admin', True) + organization_zero = organizations(1)[0] + response = get(reverse('api:organization_list', args=[]), external_admin) + assert response.status_code == 200 + + org_id_full = resourced_organization.id + org_id_zero = organization_zero.id + counts = {} + for i in range(2): + org_id = response.data['results'][i]['id'] + counts[org_id] = response.data['results'][i]['summary_fields']['related_field_counts'] + + assert counts[org_id_full] == COUNTS_PRIMES + assert counts[org_id_zero] == COUNTS_ZEROS + +@pytest.mark.django_db +def test_scan_JT_counted(resourced_organization, user, get): + admin_user = user('admin', True) + # Add a scan job template to the org + resourced_organization.projects.all()[0].jobtemplates.create( + job_type='scan', inventory=resourced_organization.inventories.all()[0], + name='scan-job-template') + counts_dict = COUNTS_PRIMES + counts_dict['job_templates'] += 1 + + # Test list view + list_response = get(reverse('api:organization_list', args=[]), admin_user) + assert list_response.status_code == 200 + assert list_response.data['results'][0]['summary_fields']['related_field_counts'] == counts_dict + + # Test detail view + detail_response = get(reverse('api:organization_detail', args=[resourced_organization.pk]), admin_user) + assert detail_response.status_code == 200 + assert detail_response.data['summary_fields']['related_field_counts'] == counts_dict + +@pytest.mark.django_db +def test_JT_associated_with_project(organizations, project, user, get): + # Check that adding a project to an organization gets the project's JT + # included in the organization's JT count + external_admin = user('admin', True) + two_orgs = organizations(2) + organization = two_orgs[0] + other_org = two_orgs[1] + + unrelated_inv = other_org.inventories.create(name='not-in-organization') + organization.projects.add(project) + project.jobtemplates.create(name="test-jt", + description="test-job-template-desc", + inventory=unrelated_inv, + playbook="test_playbook.yml") + + response = get(reverse('api:organization_list', args=[]), external_admin) + assert response.status_code == 200 + + org_id = organization.id + counts = {} + for org_json in response.data['results']: + working_id = org_json['id'] + counts[working_id] = org_json['summary_fields']['related_field_counts'] + + assert counts[org_id] == { + 'users': 0, + 'admins': 0, + 'job_templates': 1, + 'projects': 1, + 'inventories': 0, + 'teams': 0 + } diff --git a/awx/main/tests/functional/api/test_organizations.py b/awx/main/tests/functional/api/test_organizations.py new file mode 100644 index 0000000000..d141ddd6b5 --- /dev/null +++ b/awx/main/tests/functional/api/test_organizations.py @@ -0,0 +1,190 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved. + +# Python +import pytest +import mock + + +# Django +from django.core.urlresolvers import reverse + +# AWX +from awx.main.models import * # noqa + + +@pytest.mark.django_db +def test_organization_list_access_tests(options, head, get, admin, alice): + options(reverse('api:organization_list'), user=admin, expect=200) + head(reverse('api:organization_list'), user=admin, expect=200) + get(reverse('api:organization_list'), user=admin, expect=200) + options(reverse('api:organization_list'), user=alice, expect=200) + head(reverse('api:organization_list'), user=alice, expect=200) + get(reverse('api:organization_list'), user=alice, expect=200) + options(reverse('api:organization_list'), user=None, expect=401) + head(reverse('api:organization_list'), user=None, expect=401) + get(reverse('api:organization_list'), user=None, expect=401) + + +@pytest.mark.django_db +def test_organization_access_tests(organization, get, admin, alice, bob): + organization.member_role.members.add(alice) + get(reverse('api:organization_detail', args=(organization.id,)), user=admin, expect=200) + get(reverse('api:organization_detail', args=(organization.id,)), user=alice, expect=200) + get(reverse('api:organization_detail', args=(organization.id,)), user=bob, expect=403) + get(reverse('api:organization_detail', args=(organization.id,)), user=None, expect=401) + + +@pytest.mark.django_db +def test_organization_list_integrity(organization, get, admin, alice): + res = get(reverse('api:organization_list'), user=admin) + for field in ['id', 'url', 'name', 'description', 'created']: + assert field in res.data['results'][0] + + +@pytest.mark.django_db +def test_organization_list_visibility(organizations, get, admin, alice): + orgs = organizations(2) + + res = get(reverse('api:organization_list'), user=admin) + assert res.data['count'] == 2 + assert len(res.data['results']) == 2 + + res = get(reverse('api:organization_list'), user=alice) + assert res.data['count'] == 0 + + orgs[1].member_role.members.add(alice) + + res = get(reverse('api:organization_list'), user=alice) + assert res.data['count'] == 1 + assert len(res.data['results']) == 1 + assert res.data['results'][0]['id'] == orgs[1].id + + +@pytest.mark.django_db +def test_organization_project_list(organization, project_factory, get, alice, bob, rando): + prj1 = project_factory('project-one') + project_factory('project-two') + organization.admin_role.members.add(alice) + organization.member_role.members.add(bob) + prj1.use_role.members.add(bob) + assert get(reverse('api:organization_projects_list', args=(organization.id,)), user=alice).data['count'] == 2 + assert get(reverse('api:organization_projects_list', args=(organization.id,)), user=bob).data['count'] == 1 + assert get(reverse('api:organization_projects_list', args=(organization.id,)), user=rando).status_code == 403 + + +@pytest.mark.django_db +def test_organization_user_list(organization, get, admin, alice, bob): + organization.admin_role.members.add(alice) + organization.member_role.members.add(alice) + organization.member_role.members.add(bob) + assert get(reverse('api:organization_users_list', args=(organization.id,)), user=admin).data['count'] == 2 + assert get(reverse('api:organization_users_list', args=(organization.id,)), user=alice).data['count'] == 2 + assert get(reverse('api:organization_users_list', args=(organization.id,)), user=bob).data['count'] == 2 + assert get(reverse('api:organization_admins_list', args=(organization.id,)), user=admin).data['count'] == 1 + assert get(reverse('api:organization_admins_list', args=(organization.id,)), user=alice).data['count'] == 1 + assert get(reverse('api:organization_admins_list', args=(organization.id,)), user=bob).data['count'] == 1 + + +@pytest.mark.django_db +def test_organization_inventory_list(organization, inventory_factory, get, alice, bob, rando): + inv1 = inventory_factory('inventory-one') + inventory_factory('inventory-two') + organization.admin_role.members.add(alice) + organization.member_role.members.add(bob) + inv1.use_role.members.add(bob) + assert get(reverse('api:organization_inventories_list', args=(organization.id,)), user=alice).data['count'] == 2 + assert get(reverse('api:organization_inventories_list', args=(organization.id,)), user=bob).data['count'] == 1 + get(reverse('api:organization_inventories_list', args=(organization.id,)), user=rando, expect=403) + + +@pytest.mark.django_db +@mock.patch('awx.api.views.feature_enabled', lambda feature,bypass_db=None: True) +def test_create_organization(post, admin, alice): + new_org = { + 'name': 'new org', + 'description': 'my description' + } + res = post(reverse('api:organization_list'), new_org, user=admin, expect=201) + assert res.data['name'] == new_org['name'] + res = post(reverse('api:organization_list'), new_org, user=admin, expect=400) + + +@pytest.mark.django_db +@mock.patch('awx.api.views.feature_enabled', lambda feature,bypass_db=None: True) +def test_create_organization_xfail(post, alice): + new_org = { + 'name': 'new org', + 'description': 'my description' + } + post(reverse('api:organization_list'), new_org, user=alice, expect=403) + + +@pytest.mark.django_db +def test_add_user_to_organization(post, organization, alice, bob): + organization.admin_role.members.add(alice) + post(reverse('api:organization_users_list', args=(organization.id,)), {'id': bob.id}, user=alice, expect=204) + assert bob in organization.member_role + post(reverse('api:organization_users_list', args=(organization.id,)), {'id': bob.id, 'disassociate': True} , user=alice, expect=204) + assert bob not in organization.member_role + + +@pytest.mark.django_db +def test_add_user_to_organization_xfail(post, organization, alice, bob): + organization.member_role.members.add(alice) + post(reverse('api:organization_users_list', args=(organization.id,)), {'id': bob.id}, user=alice, expect=403) + + +@pytest.mark.django_db +def test_add_admin_to_organization(post, organization, alice, bob): + organization.admin_role.members.add(alice) + post(reverse('api:organization_admins_list', args=(organization.id,)), {'id': bob.id}, user=alice, expect=204) + assert bob in organization.admin_role + assert bob in organization.member_role + post(reverse('api:organization_admins_list', args=(organization.id,)), {'id': bob.id, 'disassociate': True} , user=alice, expect=204) + assert bob not in organization.admin_role + assert bob not in organization.member_role + + +@pytest.mark.django_db +def test_add_admin_to_organization_xfail(post, organization, alice, bob): + organization.member_role.members.add(alice) + post(reverse('api:organization_admins_list', args=(organization.id,)), {'id': bob.id}, user=alice, expect=403) + + +@pytest.mark.django_db +def test_update_organization(get, put, organization, alice, bob): + organization.admin_role.members.add(alice) + data = get(reverse('api:organization_detail', args=(organization.id,)), user=alice, expect=200).data + data['description'] = 'hi' + put(reverse('api:organization_detail', args=(organization.id,)), data, user=alice, expect=200) + organization.refresh_from_db() + assert organization.description == 'hi' + data['description'] = 'bye' + put(reverse('api:organization_detail', args=(organization.id,)), data, user=bob, expect=403) + + +@pytest.mark.django_db +@mock.patch('awx.main.access.BaseAccess.check_license', lambda *a, **kw: True) +def test_delete_organization(delete, organization, admin): + delete(reverse('api:organization_detail', args=(organization.id,)), user=admin, expect=204) + + +@pytest.mark.django_db +@mock.patch('awx.main.access.BaseAccess.check_license', lambda *a, **kw: True) +def test_delete_organization2(delete, organization, alice): + organization.admin_role.members.add(alice) + delete(reverse('api:organization_detail', args=(organization.id,)), user=alice, expect=204) + + +@pytest.mark.django_db +@mock.patch('awx.main.access.BaseAccess.check_license', lambda *a, **kw: True) +def test_delete_organization_xfail1(delete, organization, alice): + organization.member_role.members.add(alice) + delete(reverse('api:organization_detail', args=(organization.id,)), user=alice, expect=403) + + +@pytest.mark.django_db +@mock.patch('awx.main.access.BaseAccess.check_license', lambda *a, **kw: True) +def test_delete_organization_xfail2(delete, organization): + delete(reverse('api:organization_detail', args=(organization.id,)), user=None, expect=401) diff --git a/awx/main/tests/functional/api/test_resource_access_lists.py b/awx/main/tests/functional/api/test_resource_access_lists.py new file mode 100644 index 0000000000..9d8d95c98a --- /dev/null +++ b/awx/main/tests/functional/api/test_resource_access_lists.py @@ -0,0 +1,58 @@ +import pytest + +from django.core.urlresolvers import reverse +from awx.main.models import Role + +@pytest.mark.django_db +def test_indirect_access_list(get, organization, project, team_factory, user, admin): + project_admin = user('project_admin') + org_admin_team_member = user('org_admin_team_member') + project_admin_team_member = user('project_admin_team_member') + + org_admin_team = team_factory('org-admin-team') + project_admin_team = team_factory('project-admin-team') + + project.admin_role.members.add(project_admin) + org_admin_team.member_role.members.add(org_admin_team_member) + org_admin_team.member_role.children.add(organization.admin_role) + project_admin_team.member_role.members.add(project_admin_team_member) + project_admin_team.member_role.children.add(project.admin_role) + + result = get(reverse('api:project_access_list', args=(project.id,)), admin) + assert result.status_code == 200 + + # Result should be: + # project_admin should have direct access, + # project_team_admin should have "direct" access through being a team member -> project admin, + # org_admin_team_member should have indirect access through being a team member -> org admin -> project admin, + # admin should have access through system admin -> org admin -> project admin + assert result.data['count'] == 4 + + project_admin_res = [r for r in result.data['results'] if r['id'] == project_admin.id][0] + org_admin_team_member_res = [r for r in result.data['results'] if r['id'] == org_admin_team_member.id][0] + project_admin_team_member_res = [r for r in result.data['results'] if r['id'] == project_admin_team_member.id][0] + admin_res = [r for r in result.data['results'] if r['id'] == admin.id][0] + + assert len(project_admin_res['summary_fields']['direct_access']) == 1 + assert len(project_admin_res['summary_fields']['indirect_access']) == 0 + assert len(org_admin_team_member_res['summary_fields']['direct_access']) == 0 + assert len(org_admin_team_member_res['summary_fields']['indirect_access']) == 1 + assert len(admin_res['summary_fields']['direct_access']) == 0 + assert len(admin_res['summary_fields']['indirect_access']) == 1 + + project_admin_entry = project_admin_res['summary_fields']['direct_access'][0]['role'] + assert project_admin_entry['id'] == project.admin_role.id + + project_admin_team_member_entry = project_admin_team_member_res['summary_fields']['direct_access'][0]['role'] + assert project_admin_team_member_entry['id'] == project.admin_role.id + assert project_admin_team_member_entry['team_id'] == project_admin_team.id + assert project_admin_team_member_entry['team_name'] == project_admin_team.name + + org_admin_team_member_entry = org_admin_team_member_res['summary_fields']['indirect_access'][0]['role'] + assert org_admin_team_member_entry['id'] == organization.admin_role.id + assert org_admin_team_member_entry['team_id'] == org_admin_team.id + assert org_admin_team_member_entry['team_name'] == org_admin_team.name + + admin_entry = admin_res['summary_fields']['indirect_access'][0]['role'] + assert admin_entry['name'] == Role.singleton('system_administrator').name + diff --git a/awx/main/tests/functional/api/test_survey_spec.py b/awx/main/tests/functional/api/test_survey_spec.py new file mode 100644 index 0000000000..dc7071fc11 --- /dev/null +++ b/awx/main/tests/functional/api/test_survey_spec.py @@ -0,0 +1,200 @@ +import mock +import pytest +import json + +from django.core.urlresolvers import reverse + +from awx.main.models.jobs import JobTemplate, Job +from awx.main.models.activity_stream import ActivityStream +from awx.api.license import LicenseForbids +from awx.main.access import JobTemplateAccess + + +def mock_no_surveys(self, add_host=False, feature=None, check_expiration=True): + if feature == 'surveys': + raise LicenseForbids("Feature %s is not enabled in the active license." % feature) + else: + pass + +@pytest.fixture +def job_template_with_survey(job_template_factory): + objects = job_template_factory('jt', project='prj', survey='submitted_email') + return objects.job_template + +# Survey license-based denial tests +@mock.patch('awx.api.views.feature_enabled', lambda feature: False) +@pytest.mark.django_db +@pytest.mark.survey +def test_survey_spec_view_denied(job_template_with_survey, get, admin_user): + # TODO: Test non-enterprise license + response = get(reverse('api:job_template_survey_spec', + args=(job_template_with_survey.id,)), admin_user, expect=402) + assert response.data['detail'] == 'Your license does not allow adding surveys.' + +@mock.patch('awx.main.access.BaseAccess.check_license', mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_deny_enabling_survey(deploy_jobtemplate, patch, admin_user): + response = patch(url=deploy_jobtemplate.get_absolute_url(), + data=dict(survey_enabled=True), user=admin_user, expect=402) + assert response.data['detail'] == 'Feature surveys is not enabled in the active license.' + +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_job_start_blocked_without_survey_license(job_template_with_survey, admin_user): + """Check that user can't start a job with surveys without a survey license.""" + access = JobTemplateAccess(admin_user) + with pytest.raises(LicenseForbids): + access.can_start(job_template_with_survey) + +@mock.patch('awx.main.access.BaseAccess.check_license', mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_deny_creating_with_survey(project, post, admin_user): + response = post( + url=reverse('api:job_template_list'), + data=dict( + name = 'JT with survey', + job_type = 'run', + project = project.pk, + playbook = 'helloworld.yml', + ask_credential_on_launch = True, + ask_inventory_on_launch = True, + survey_enabled = True), + user=admin_user, expect=402) + assert response.data['detail'] == 'Feature surveys is not enabled in the active license.' + +# Test normal operations with survey license work +@mock.patch('awx.api.views.feature_enabled', lambda feature: True) +@pytest.mark.django_db +@pytest.mark.survey +def test_survey_spec_view_allowed(deploy_jobtemplate, get, admin_user): + get(reverse('api:job_template_survey_spec', args=(deploy_jobtemplate.id,)), + admin_user, expect=200) + +@mock.patch('awx.api.views.feature_enabled', lambda feature: True) +@pytest.mark.django_db +@pytest.mark.survey +def test_survey_spec_sucessful_creation(survey_spec_factory, job_template, post, admin_user): + survey_input_data = survey_spec_factory('new_question') + post(url=reverse('api:job_template_survey_spec', args=(job_template.id,)), + data=survey_input_data, user=admin_user, expect=200) + updated_jt = JobTemplate.objects.get(pk=job_template.pk) + assert updated_jt.survey_spec == survey_input_data + +# Tests related to survey content validation +@mock.patch('awx.api.views.feature_enabled', lambda feature: True) +@pytest.mark.django_db +@pytest.mark.survey +def test_survey_spec_non_dict_error(deploy_jobtemplate, post, admin_user): + """When a question doesn't follow the standard format, verify error thrown.""" + response = post( + url=reverse('api:job_template_survey_spec', args=(deploy_jobtemplate.id,)), + data={"description": "Email of the submitter", + "spec": ["What is your email?"], "name": "Email survey"}, + user=admin_user, expect=400) + assert response.data['error'] == "Survey question 0 is not a json object." + +@mock.patch('awx.api.views.feature_enabled', lambda feature: True) +@pytest.mark.django_db +@pytest.mark.survey +def test_survey_spec_dual_names_error(survey_spec_factory, deploy_jobtemplate, post, user): + response = post( + url=reverse('api:job_template_survey_spec', args=(deploy_jobtemplate.id,)), + data=survey_spec_factory(['submitter_email', 'submitter_email']), + user=user('admin', True), expect=400) + assert response.data['error'] == "'variable' 'submitter_email' duplicated in survey question 1." + +# Test actions that should be allowed with non-survey license +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_disable_survey_access_without_license(job_template_with_survey, admin_user): + """Assure that user can disable a JT survey after downgrading license.""" + access = JobTemplateAccess(admin_user) + assert access.can_change(job_template_with_survey, dict(survey_enabled=False)) + +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_delete_survey_access_without_license(job_template_with_survey, admin_user): + """Assure that access.py allows deleting surveys after downgrading license.""" + access = JobTemplateAccess(admin_user) + assert access.can_change(job_template_with_survey, dict(survey_spec=None)) + assert access.can_change(job_template_with_survey, dict(survey_spec={})) + +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_job_start_allowed_with_survey_spec(job_template_factory, admin_user): + """After user downgrades survey license and disables survey on the JT, + check that jobs still launch even if the survey_spec data persists.""" + objects = job_template_factory('jt', project='prj', survey='submitter_email') + obj = objects.job_template + obj.survey_enabled = False + obj.save() + access = JobTemplateAccess(admin_user) + assert access.can_start(job_template_with_survey, {}) + +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_job_template_delete_access_with_survey(job_template_with_survey, admin_user): + """The survey_spec view relies on JT `can_delete` to determine permission + to delete the survey. This checks that system admins can delete the survey on a JT.""" + access = JobTemplateAccess(admin_user) + assert access.can_delete(job_template_with_survey) + +@mock.patch('awx.api.views.feature_enabled', lambda feature: False) +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@pytest.mark.django_db +@pytest.mark.survey +def test_delete_survey_spec_without_license(job_template_with_survey, delete, admin_user): + """Functional delete test through the survey_spec view.""" + delete(reverse('api:job_template_survey_spec', args=[job_template_with_survey.pk]), + admin_user, expect=200) + new_jt = JobTemplate.objects.get(pk=job_template_with_survey.pk) + assert new_jt.survey_spec == {} + +@mock.patch('awx.main.access.BaseAccess.check_license', lambda self, **kwargs: True) +@mock.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', + lambda self, extra_vars: mock.MagicMock(spec=Job, id=968)) +@mock.patch('awx.api.serializers.JobSerializer.to_representation', lambda self, obj: {}) +@pytest.mark.django_db +@pytest.mark.survey +def test_launch_survey_enabled_but_no_survey_spec(job_template_factory, post, admin_user): + """False-ish values for survey_spec are interpreted as a survey with 0 questions.""" + objects = job_template_factory('jt', organization='org1', project='prj', + inventory='inv', credential='cred') + obj = objects.job_template + obj.survey_enabled = True + obj.save() + response = post(reverse('api:job_template_launch', args=[obj.pk]), + dict(extra_vars=dict(survey_var=7)), admin_user, expect=201) + assert 'survey_var' in response.data['ignored_fields']['extra_vars'] + +@mock.patch('awx.main.access.BaseAccess.check_license', new=mock_no_surveys) +@mock.patch('awx.main.models.unified_jobs.UnifiedJobTemplate.create_unified_job', + lambda self: mock.MagicMock(spec=Job, id=968)) +@mock.patch('awx.api.serializers.JobSerializer.to_representation', lambda self, obj: {}) +@pytest.mark.django_db +@pytest.mark.survey +def test_launch_with_non_empty_survey_spec_no_license(job_template_factory, post, admin_user): + """Assure jobs can still be launched from JTs with a survey_spec + when the survey is diabled.""" + objects = job_template_factory('jt', organization='org1', project='prj', + inventory='inv', credential='cred', + survey='survey_var') + obj = objects.job_template + obj.survey_enabled = False + obj.save() + post(reverse('api:job_template_launch', args=[obj.pk]), {}, admin_user, expect=201) + +@pytest.mark.django_db +@pytest.mark.survey +def test_redact_survey_passwords_in_activity_stream(job_with_secret_key): + AS_record = ActivityStream.objects.filter(object1='job').all()[0] + changes_dict = json.loads(AS_record.changes) + extra_vars = json.loads(changes_dict['extra_vars']) + assert extra_vars['secret_key'] == '$encrypted$' diff --git a/awx/main/tests/functional/api/test_unified_jobs_view.py b/awx/main/tests/functional/api/test_unified_jobs_view.py new file mode 100644 index 0000000000..ed7034a28e --- /dev/null +++ b/awx/main/tests/functional/api/test_unified_jobs_view.py @@ -0,0 +1,93 @@ +import pytest + +from django.core.urlresolvers import reverse + +from awx.main.models import UnifiedJob, ProjectUpdate +from awx.main.tests.base import URI + + +TEST_STDOUTS = [] +uri = URI(scheme="https", username="Dhh3U47nmC26xk9PKscV", password="PXPfWW8YzYrgS@E5NbQ2H@", host="github.ginger.com/theirrepo.git/info/refs") +TEST_STDOUTS.append({ + 'description': 'uri in a plain text document', + 'uri' : uri, + 'text' : 'hello world %s goodbye world' % uri, + 'occurrences' : 1 +}) + +uri = URI(scheme="https", username="applepie@@@", password="thatyouknow@@@@", host="github.ginger.com/theirrepo.git/info/refs") +TEST_STDOUTS.append({ + 'description': 'uri appears twice in a multiline plain text document', + 'uri' : uri, + 'text' : 'hello world %s \n\nyoyo\n\nhello\n%s' % (uri, uri), + 'occurrences' : 2 +}) + + + +@pytest.fixture +def test_cases(project): + ret = [] + for e in TEST_STDOUTS: + e['project'] = ProjectUpdate(project=project) + e['project'].result_stdout_text = e['text'] + e['project'].save() + ret.append(e) + return ret + +@pytest.fixture +def negative_test_cases(job_factory): + ret = [] + for e in TEST_STDOUTS: + e['job'] = job_factory() + e['job'].result_stdout_text = e['text'] + e['job'].save() + ret.append(e) + return ret + + +formats = [ + ('json', 'application/json'), + ('ansi', 'text/plain'), + ('txt', 'text/plain'), + ('html', 'text/html'), +] + +@pytest.mark.parametrize("format,content_type", formats) +@pytest.mark.django_db +def test_project_update_redaction_enabled(get, format, content_type, test_cases, admin): + for test_data in test_cases: + job = test_data['project'] + response = get(reverse("api:project_update_stdout", args=(job.pk,)) + "?format=" + format, user=admin, expect=200, accept=content_type) + assert content_type in response['CONTENT-TYPE'] + assert response.data is not None + content = response.data['content'] if format == 'json' else response.data + assert test_data['uri'].username not in content + assert test_data['uri'].password not in content + assert content.count(test_data['uri'].host) == test_data['occurrences'] + +@pytest.mark.parametrize("format,content_type", formats) +@pytest.mark.django_db +def test_job_redaction_disabled(get, format, content_type, negative_test_cases, admin): + for test_data in negative_test_cases: + job = test_data['job'] + response = get(reverse("api:job_stdout", args=(job.pk,)) + "?format=" + format, user=admin, expect=200, format=format) + content = response.data['content'] if format == 'json' else response.data + assert response.data is not None + assert test_data['uri'].username in content + assert test_data['uri'].password in content + + +@pytest.mark.django_db +def test_options_fields_choices(instance, options, user): + + url = reverse('api:unified_job_list') + response = options(url, None, user('admin', True)) + + assert 'launch_type' in response.data['actions']['GET'] + assert 'choice' == response.data['actions']['GET']['launch_type']['type'] + assert UnifiedJob.LAUNCH_TYPE_CHOICES == response.data['actions']['GET']['launch_type']['choices'] + assert 'choice' == response.data['actions']['GET']['status']['type'] + assert UnifiedJob.STATUS_CHOICES == response.data['actions']['GET']['status']['choices'] + + diff --git a/awx/main/tests/functional/api/test_user.py b/awx/main/tests/functional/api/test_user.py new file mode 100644 index 0000000000..d739d417c0 --- /dev/null +++ b/awx/main/tests/functional/api/test_user.py @@ -0,0 +1,68 @@ +import pytest + +from django.core.urlresolvers import reverse + + +# +# user creation +# + +@pytest.mark.django_db +def test_user_create(post, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + +@pytest.mark.django_db +def test_fail_double_create_user(post, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 400 + +@pytest.mark.django_db +def test_create_delete_create_user(post, delete, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + + response = delete(reverse('api:user_detail', args=(response.data['id'],)), admin) + assert response.status_code == 204 + + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + print(response.data) + assert response.status_code == 201 diff --git a/awx/main/tests/functional/commands/__init__.py b/awx/main/tests/functional/commands/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/awx/main/tests/functional/commands/conftest.py b/awx/main/tests/functional/commands/conftest.py new file mode 100644 index 0000000000..2de8846b0a --- /dev/null +++ b/awx/main/tests/functional/commands/conftest.py @@ -0,0 +1,109 @@ +import pytest +import time + +from datetime import datetime + +@pytest.fixture +def fact_msg_base(inventory, hosts): + host_objs = hosts(1) + return { + 'host': host_objs[0].name, + 'date_key': time.mktime(datetime.utcnow().timetuple()), + 'facts' : { }, + 'inventory_id': inventory.id + } + +@pytest.fixture +def fact_msg_small(fact_msg_base): + fact_msg_base['facts'] = { + 'packages': { + "accountsservice": [ + { + "architecture": "amd64", + "name": "accountsservice", + "source": "apt", + "version": "0.6.35-0ubuntu7.1" + } + ], + "acpid": [ + { + "architecture": "amd64", + "name": "acpid", + "source": "apt", + "version": "1:2.0.21-1ubuntu2" + } + ], + "adduser": [ + { + "architecture": "all", + "name": "adduser", + "source": "apt", + "version": "3.113+nmu3ubuntu3" + } + ], + }, + 'services': [ + { + "name": "acpid", + "source": "sysv", + "state": "running" + }, + { + "name": "apparmor", + "source": "sysv", + "state": "stopped" + }, + { + "name": "atd", + "source": "sysv", + "state": "running" + }, + { + "name": "cron", + "source": "sysv", + "state": "running" + } + ], + 'ansible': { + 'ansible_fact_simple': 'hello world', + 'ansible_fact_complex': { + 'foo': 'bar', + 'hello': [ + 'scooby', + 'dooby', + 'doo' + ] + }, + } + } + return fact_msg_base + + +''' +Facts sent from ansible to our fact cache reciever. +The fact module type is implicit i.e + +Note: The 'ansible' module is an expection to this rule. +It is NOT nested in a dict, and thus does NOT contain a first-level +key of 'ansible' + +{ + 'fact_module_name': { ... }, +} +''' + +@pytest.fixture +def fact_msg_ansible(fact_msg_base, fact_ansible_json): + fact_msg_base['facts'] = fact_ansible_json + return fact_msg_base + +@pytest.fixture +def fact_msg_packages(fact_msg_base, fact_packages_json): + fact_msg_base['facts']['packages'] = fact_packages_json + return fact_msg_base + +@pytest.fixture +def fact_msg_services(fact_msg_base, fact_services_json): + fact_msg_base['facts']['services'] = fact_services_json + return fact_msg_base + diff --git a/awx/main/tests/functional/commands/test_cleanup_facts.py b/awx/main/tests/functional/commands/test_cleanup_facts.py new file mode 100644 index 0000000000..93ddb72d14 --- /dev/null +++ b/awx/main/tests/functional/commands/test_cleanup_facts.py @@ -0,0 +1,200 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved + +# Python +import pytest +import mock +from dateutil.relativedelta import relativedelta +from datetime import timedelta + +# Django +from django.utils import timezone +from django.core.management.base import CommandError + +# AWX +from awx.main.management.commands.cleanup_facts import CleanupFacts, Command +from awx.main.models.fact import Fact +from awx.main.models.inventory import Host + +def mock_feature_enabled(feature, bypass_database=None): + return True + +def mock_feature_disabled(feature, bypass_database=None): + return False + +@pytest.mark.django_db +def test_cleanup_granularity(fact_scans, hosts): + epoch = timezone.now() + hosts(5) + fact_scans(10, timestamp_epoch=epoch) + fact_newest = Fact.objects.all().order_by('-timestamp').first() + timestamp_future = fact_newest.timestamp + timedelta(days=365) + granularity = relativedelta(days=2) + + cleanup_facts = CleanupFacts() + deleted_count = cleanup_facts.cleanup(timestamp_future, granularity) + assert 60 == deleted_count + +''' +Delete half of the scans +''' +@pytest.mark.django_db +def test_cleanup_older_than(fact_scans, hosts): + epoch = timezone.now() + hosts(5) + fact_scans(28, timestamp_epoch=epoch) + qs = Fact.objects.all().order_by('-timestamp') + fact_middle = qs[qs.count() / 2] + granularity = relativedelta() + + cleanup_facts = CleanupFacts() + deleted_count = cleanup_facts.cleanup(fact_middle.timestamp, granularity) + assert 210 == deleted_count + +@pytest.mark.django_db +def test_cleanup_older_than_granularity_module(fact_scans, hosts): + epoch = timezone.now() + hosts(5) + fact_scans(10, timestamp_epoch=epoch) + fact_newest = Fact.objects.all().order_by('-timestamp').first() + timestamp_future = fact_newest.timestamp + timedelta(days=365) + granularity = relativedelta(days=2) + + cleanup_facts = CleanupFacts() + deleted_count = cleanup_facts.cleanup(timestamp_future, granularity, module='ansible') + assert 20 == deleted_count + + +''' +Reduce the granularity of half of the facts scans, by half. +''' +@pytest.mark.django_db +def test_cleanup_logic(fact_scans, hosts): + epoch = timezone.now() + hosts = hosts(5) + fact_scans(60, timestamp_epoch=epoch) + timestamp_middle = epoch + timedelta(days=30) + granularity = relativedelta(days=2) + module = 'ansible' + + cleanup_facts = CleanupFacts() + cleanup_facts.cleanup(timestamp_middle, granularity, module=module) + + + host_ids = Host.objects.all().values_list('id', flat=True) + host_facts = {} + for host_id in host_ids: + facts = Fact.objects.filter(host__id=host_id, module=module, timestamp__lt=timestamp_middle).order_by('-timestamp') + host_facts[host_id] = facts + + for host_id, facts in host_facts.iteritems(): + assert 15 == len(facts) + + timestamp_pivot = timestamp_middle + for fact in facts: + timestamp_pivot -= granularity + assert fact.timestamp == timestamp_pivot + +@mock.patch('awx.main.management.commands.cleanup_facts.feature_enabled', new=mock_feature_disabled) +@pytest.mark.django_db +@pytest.mark.license_feature +def test_system_tracking_feature_disabled(mocker): + cmd = Command() + with pytest.raises(CommandError) as err: + cmd.handle(None) + assert 'The System Tracking feature is not enabled for your Tower instance' in err.value + +@mock.patch('awx.main.management.commands.cleanup_facts.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_parameters_ok(mocker): + run = mocker.patch('awx.main.management.commands.cleanup_facts.CleanupFacts.run') + kv = { + 'older_than': '1d', + 'granularity': '1d', + 'module': None, + } + cmd = Command() + cmd.handle(None, **kv) + run.assert_called_once_with(relativedelta(days=1), relativedelta(days=1), module=None) + +@pytest.mark.django_db +def test_string_time_to_timestamp_ok(): + kvs = [ + { + 'time': '2w', + 'timestamp': relativedelta(weeks=2), + 'msg': '2 weeks', + }, + { + 'time': '23d', + 'timestamp': relativedelta(days=23), + 'msg': '23 days', + }, + { + 'time': '11m', + 'timestamp': relativedelta(months=11), + 'msg': '11 months', + }, + { + 'time': '14y', + 'timestamp': relativedelta(years=14), + 'msg': '14 years', + }, + ] + for kv in kvs: + cmd = Command() + res = cmd.string_time_to_timestamp(kv['time']) + assert kv['timestamp'] == res + +@pytest.mark.django_db +def test_string_time_to_timestamp_invalid(): + kvs = [ + { + 'time': '2weeks', + 'msg': 'weeks instead of w', + }, + { + 'time': '2days', + 'msg': 'days instead of d', + }, + { + 'time': '23', + 'msg': 'no unit specified', + }, + { + 'time': None, + 'msg': 'no value specified', + }, + { + 'time': 'zigzag', + 'msg': 'random string specified', + }, + ] + for kv in kvs: + cmd = Command() + res = cmd.string_time_to_timestamp(kv['time']) + assert res is None + +@mock.patch('awx.main.management.commands.cleanup_facts.feature_enabled', new=mock_feature_enabled) +@pytest.mark.django_db +def test_parameters_fail(mocker): + # Mock run() just in case, but it should never get called because an error should be thrown + mocker.patch('awx.main.management.commands.cleanup_facts.CleanupFacts.run') + kvs = [ + { + 'older_than': '1week', + 'granularity': '1d', + 'msg': '--older_than invalid value "1week"', + }, + { + 'older_than': '1d', + 'granularity': '1year', + 'msg': '--granularity invalid value "1year"', + } + ] + for kv in kvs: + cmd = Command() + with pytest.raises(CommandError) as err: + cmd.handle(None, older_than=kv['older_than'], granularity=kv['granularity']) + assert kv['msg'] in err.value + diff --git a/awx/main/tests/functional/commands/test_commands.py b/awx/main/tests/functional/commands/test_commands.py new file mode 100644 index 0000000000..631de3ee04 --- /dev/null +++ b/awx/main/tests/functional/commands/test_commands.py @@ -0,0 +1,75 @@ +import sys +import pytest + +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +from django.core.management import call_command + +from awx.main.models import Instance + +from awx.main.management.commands.update_password import UpdatePassword +from awx.main.management.commands.remove_instance import Command as RemoveInstance + +def run_command(name, *args, **options): + command_runner = options.pop('command_runner', call_command) + stdin_fileobj = options.pop('stdin_fileobj', None) + options.setdefault('verbosity', 1) + options.setdefault('interactive', False) + original_stdin = sys.stdin + original_stdout = sys.stdout + original_stderr = sys.stderr + if stdin_fileobj: + sys.stdin = stdin_fileobj + sys.stdout = StringIO() + sys.stderr = StringIO() + result = None + try: + result = command_runner(name, *args, **options) + except Exception as e: + result = e + finally: + captured_stdout = sys.stdout.getvalue() + captured_stderr = sys.stderr.getvalue() + sys.stdin = original_stdin + sys.stdout = original_stdout + sys.stderr = original_stderr + return result, captured_stdout, captured_stderr + + +@pytest.mark.parametrize( + "username,password,expected,changed", [ + ('admin', 'dingleberry', 'Password updated\n', True), + ('admin', 'admin', 'Password not updated\n', False), + (None, 'foo', 'username required', False), + ('admin', None, 'password required', False), + ] +) +def test_update_password_command(mocker, username, password, expected, changed): + with mocker.patch.object(UpdatePassword, 'update_password', return_value=changed): + result, stdout, stderr = run_command('update_password', username=username, password=password) + if result is None: + assert stdout == expected + else: + assert str(result) == expected + + +@pytest.mark.parametrize( + "primary,hostname,startswith,exception", [ + (True, "127.0.0.1", "Cannot remove primary", None), + (False, "127.0.0.2", "Successfully removed", None), + (False, "127.0.0.3", "No matching instance", Instance.DoesNotExist), + ] +) +def test_remove_instance_command(mocker, primary, hostname, startswith, exception): + mock_instance = mocker.MagicMock(primary=primary, enforce_unique_find=True) + with mocker.patch.object(Instance.objects, 'get', return_value=mock_instance, side_effect=exception): + with mocker.patch.object(RemoveInstance, 'include_option_hostname_uuid_find'): + with mocker.patch.object(RemoveInstance, 'get_unique_fields', return_value={'hostname':hostname, 'uuid':1}): + result, stdout, stderr = run_command("remove_instance", hostname=hostname) + if result is None: + assert stdout.startswith(startswith) + else: + assert str(result).startswith(startswith) diff --git a/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py b/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py new file mode 100644 index 0000000000..1a8965e81c --- /dev/null +++ b/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py @@ -0,0 +1,95 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved + +# Python +import pytest +from datetime import datetime +import json + +# Django +from django.utils import timezone + +# AWX +from awx.main.management.commands.run_fact_cache_receiver import FactCacheReceiver +from awx.main.models.fact import Fact +from awx.main.models.inventory import Host + +# TODO: Check that timestamp and other attributes are as expected +def check_process_fact_message_module(fact_returned, data, module_name): + date_key = data['date_key'] + + # Ensure 1, and only 1, fact created + timestamp = datetime.fromtimestamp(date_key, timezone.utc) + assert 1 == Fact.objects.all().count() + + host_obj = Host.objects.get(name=data['host'], inventory__id=data['inventory_id']) + assert host_obj is not None + fact_known = Fact.get_host_fact(host_obj.id, module_name, timestamp) + assert fact_known is not None + assert fact_known == fact_returned + + assert host_obj == fact_returned.host + if module_name == 'ansible': + assert data['facts'] == fact_returned.facts + else: + assert data['facts'][module_name] == fact_returned.facts + assert timestamp == fact_returned.timestamp + assert module_name == fact_returned.module + +@pytest.mark.django_db +def test_process_fact_message_ansible(fact_msg_ansible): + receiver = FactCacheReceiver() + fact_returned = receiver.process_fact_message(fact_msg_ansible) + + check_process_fact_message_module(fact_returned, fact_msg_ansible, 'ansible') + +@pytest.mark.django_db +def test_process_fact_message_packages(fact_msg_packages): + receiver = FactCacheReceiver() + fact_returned = receiver.process_fact_message(fact_msg_packages) + + check_process_fact_message_module(fact_returned, fact_msg_packages, 'packages') + +@pytest.mark.django_db +def test_process_fact_message_services(fact_msg_services): + receiver = FactCacheReceiver() + fact_returned = receiver.process_fact_message(fact_msg_services) + + check_process_fact_message_module(fact_returned, fact_msg_services, 'services') + +''' +We pickypack our fact sending onto the Ansible fact interface. +The interface is . Where facts is a json blob of all the facts. +This makes it hard to decipher what facts are new/changed. +Because of this, we handle the same fact module data being sent multiple times +and just keep the newest version. +''' +@pytest.mark.django_db +def test_process_facts_message_ansible_overwrite(fact_scans, fact_msg_ansible): + #epoch = timezone.now() + epoch = datetime.fromtimestamp(fact_msg_ansible['date_key']) + fact_scans(fact_scans=1, timestamp_epoch=epoch) + key = 'ansible.overwrite' + value = 'hello world' + + receiver = FactCacheReceiver() + receiver.process_fact_message(fact_msg_ansible) + + fact_msg_ansible['facts'][key] = value + fact_returned = receiver.process_fact_message(fact_msg_ansible) + + fact_obj = Fact.objects.get(id=fact_returned.id) + assert key in fact_obj.facts + assert fact_msg_ansible['facts'] == (json.loads(fact_obj.facts) if isinstance(fact_obj.facts, unicode) else fact_obj.facts) # TODO: Just make response.data['facts'] when we're only dealing with postgres, or if jsonfields ever fixes this bug + +# Ensure that the message flows from the socket through to process_fact_message() +@pytest.mark.django_db +def test_run_receiver(mocker, fact_msg_ansible): + mocker.patch("awx.main.socket.Socket.listen", return_value=[fact_msg_ansible]) + + receiver = FactCacheReceiver() + mocker.patch.object(receiver, 'process_fact_message', return_value=None) + + receiver.run_receiver(use_processing_threads=False) + + receiver.process_fact_message.assert_called_once_with(fact_msg_ansible) diff --git a/awx/main/tests/functional/conftest.py b/awx/main/tests/functional/conftest.py new file mode 100644 index 0000000000..f970adc2e7 --- /dev/null +++ b/awx/main/tests/functional/conftest.py @@ -0,0 +1,427 @@ + +# Python +import pytest +import mock +import json +import os +from datetime import timedelta + +# Django +from django.core.urlresolvers import resolve +from django.utils.six.moves.urllib.parse import urlparse +from django.utils import timezone +from django.contrib.auth.models import User +from django.conf import settings + +# AWX +from awx.main.models.projects import Project +from awx.main.models.base import PERM_INVENTORY_READ +from awx.main.models.ha import Instance +from awx.main.models.fact import Fact + +from rest_framework.test import ( + APIRequestFactory, + force_authenticate, +) + +from awx.main.models.credential import Credential +from awx.main.models.jobs import JobTemplate +from awx.main.models.inventory import ( + Group, + Inventory, + InventoryUpdate, + InventorySource +) +from awx.main.models.organization import ( + Organization, + Permission, + Team, +) + +from awx.main.models.notifications import ( + NotificationTemplate, + Notification +) + +''' +Disable all django model signals. +''' +@pytest.fixture(scope="session", autouse=False) +def disable_signals(): + mocked = mock.patch('django.dispatch.Signal.send', autospec=True) + mocked.start() + +''' +FIXME: Not sure how "far" just setting the BROKER_URL will get us. +We may need to incluence CELERY's configuration like we do in the old unit tests (see base.py) + +Allows django signal code to execute without the need for redis +''' +@pytest.fixture(scope="session", autouse=True) +def celery_memory_broker(): + settings.BROKER_URL='memory://localhost/' + +@pytest.fixture +def user(): + def u(name, is_superuser=False): + try: + user = User.objects.get(username=name) + except User.DoesNotExist: + user = User(username=name, is_superuser=is_superuser, password=name) + user.save() + return user + return u + +@pytest.fixture +def check_jobtemplate(project, inventory, credential): + return \ + JobTemplate.objects.create( + job_type='check', + project=project, + inventory=inventory, + credential=credential, + name='check-job-template' + ) + +@pytest.fixture +def deploy_jobtemplate(project, inventory, credential): + return \ + JobTemplate.objects.create( + job_type='run', + project=project, + inventory=inventory, + credential=credential, + name='deploy-job-template' + ) + +@pytest.fixture +def team(organization): + return organization.teams.create(name='test-team') + +@pytest.fixture +def team_member(user, team): + ret = user('team-member', False) + team.member_role.members.add(ret) + return ret + + +@pytest.fixture +@mock.patch.object(Project, "update", lambda self, **kwargs: None) +def project(instance, organization): + prj = Project.objects.create(name="test-proj", + description="test-proj-desc", + organization=organization + ) + return prj + +@pytest.fixture +def project_factory(organization): + def factory(name): + try: + prj = Project.objects.get(name=name) + except Project.DoesNotExist: + prj = Project.objects.create(name=name, + description="description for " + name, + organization=organization + ) + return prj + return factory + +@pytest.fixture +def job_factory(job_template, admin): + def factory(job_template=job_template, initial_state='new', created_by=admin): + return job_template.create_job(created_by=created_by, status=initial_state) + return factory + +@pytest.fixture +def team_factory(organization): + def factory(name): + try: + t = Team.objects.get(name=name) + except Team.DoesNotExist: + t = Team.objects.create(name=name, + description="description for " + name, + organization=organization) + return t + return factory + +@pytest.fixture +def user_project(user): + owner = user('owner') + return Project.objects.create(name="test-user-project", created_by=owner, description="test-user-project-desc") + +@pytest.fixture +def instance(settings): + return Instance.objects.create(uuid=settings.SYSTEM_UUID, primary=True, hostname="instance.example.org") + +@pytest.fixture +def organization(instance): + return Organization.objects.create(name="test-org", description="test-org-desc") + +@pytest.fixture +def credential(): + return Credential.objects.create(kind='aws', name='test-cred') + +@pytest.fixture +def machine_credential(): + return Credential.objects.create(name='machine-cred', kind='ssh', username='test_user', password='pas4word') + +@pytest.fixture +def org_credential(organization): + return Credential.objects.create(kind='aws', name='test-cred', organization=organization) + +@pytest.fixture +def inventory(organization): + return organization.inventories.create(name="test-inv") + +@pytest.fixture +def inventory_factory(organization): + def factory(name, org=organization): + try: + inv = Inventory.objects.get(name=name, organization=org) + except Inventory.DoesNotExist: + inv = Inventory.objects.create(name=name, organization=org) + return inv + return factory + +@pytest.fixture +def label(organization): + return organization.labels.create(name="test-label", description="test-label-desc") + +@pytest.fixture +def notification_template(organization): + return NotificationTemplate.objects.create(name='test-notification_template', + organization=organization, + notification_type="webhook", + notification_configuration=dict(url="http://localhost", + headers={"Test": "Header"})) + +@pytest.fixture +def notification(notification_template): + return Notification.objects.create(notification_template=notification_template, + status='successful', + notifications_sent=1, + notification_type='email', + recipients='admin@redhat.com', + subject='email subject') + +@pytest.fixture +def job_with_secret_key(job_with_secret_key_factory): + return job_with_secret_key_factory(persisted=True) + +@pytest.fixture +def admin(user): + return user('admin', True) + +@pytest.fixture +def alice(user): + return user('alice', False) + +@pytest.fixture +def bob(user): + return user('bob', False) + +@pytest.fixture +def rando(user): + "Rando, the random user that doesn't have access to anything" + return user('rando', False) + +@pytest.fixture +def org_admin(user, organization): + ret = user('org-admin', False) + organization.admin_role.members.add(ret) + organization.member_role.members.add(ret) + return ret + +@pytest.fixture +def org_auditor(user, organization): + ret = user('org-auditor', False) + organization.auditor_role.members.add(ret) + organization.member_role.members.add(ret) + return ret + +@pytest.fixture +def org_member(user, organization): + ret = user('org-member', False) + organization.member_role.members.add(ret) + return ret + +@pytest.fixture +def organizations(instance): + def rf(organization_count=1): + orgs = [] + for i in xrange(0, organization_count): + o = Organization.objects.create(name="test-org-%d" % i, description="test-org-desc") + orgs.append(o) + return orgs + return rf + +@pytest.fixture +def group_factory(inventory): + def g(name): + try: + return Group.objects.get(name=name, inventory=inventory) + except: + return Group.objects.create(inventory=inventory, name=name) + return g + +@pytest.fixture +def hosts(group_factory): + group1 = group_factory('group-1') + + def rf(host_count=1): + hosts = [] + for i in xrange(0, host_count): + name = '%s-host-%s' % (group1.name, i) + (host, created) = group1.inventory.hosts.get_or_create(name=name) + if created: + group1.hosts.add(host) + hosts.append(host) + return hosts + return rf + +@pytest.fixture +def group(inventory): + return inventory.groups.create(name='single-group') + +@pytest.fixture +def inventory_source(group, inventory): + return InventorySource.objects.create(name=group.name, group=group, + inventory=inventory, source='gce') + +@pytest.fixture +def inventory_update(inventory_source): + return InventoryUpdate.objects.create(inventory_source=inventory_source) + +@pytest.fixture +def host(group, inventory): + return group.hosts.create(name='single-host', inventory=inventory) + +@pytest.fixture +def permissions(): + return { + 'admin':{'create':True, 'read':True, 'write':True, + 'update':True, 'delete':True, 'scm_update':True, 'execute':True, 'use':True,}, + + 'auditor':{'read':True, 'create':False, 'write':False, + 'update':False, 'delete':False, 'scm_update':False, 'execute':False, 'use':False,}, + + 'usage':{'read':False, 'create':False, 'write':False, + 'update':False, 'delete':False, 'scm_update':False, 'execute':False, 'use':True,}, + } + + +def _request(verb): + def rf(url, data_or_user=None, user=None, middleware=None, expect=None, **kwargs): + if type(data_or_user) is User and user is None: + user = data_or_user + elif 'data' not in kwargs: + kwargs['data'] = data_or_user + if 'format' not in kwargs: + kwargs['format'] = 'json' + + view, view_args, view_kwargs = resolve(urlparse(url)[2]) + request = getattr(APIRequestFactory(), verb)(url, **kwargs) + if middleware: + middleware.process_request(request) + if user: + force_authenticate(request, user=user) + + response = view(request, *view_args, **view_kwargs) + if middleware: + middleware.process_response(request, response) + if expect: + if response.status_code != expect: + print(response.data) + assert response.status_code == expect + response.render() + return response + return rf + +@pytest.fixture +def post(): + return _request('post') + +@pytest.fixture +def get(): + return _request('get') + +@pytest.fixture +def put(): + return _request('put') + +@pytest.fixture +def patch(): + return _request('patch') + +@pytest.fixture +def delete(): + return _request('delete') + +@pytest.fixture +def head(): + return _request('head') + +@pytest.fixture +def options(): + return _request('options') + + + +@pytest.fixture +def fact_scans(group_factory, fact_ansible_json, fact_packages_json, fact_services_json): + group1 = group_factory('group-1') + + def rf(fact_scans=1, timestamp_epoch=timezone.now()): + facts_json = {} + facts = [] + module_names = ['ansible', 'services', 'packages'] + timestamp_current = timestamp_epoch + + facts_json['ansible'] = fact_ansible_json + facts_json['packages'] = fact_packages_json + facts_json['services'] = fact_services_json + + for i in xrange(0, fact_scans): + for host in group1.hosts.all(): + for module_name in module_names: + facts.append(Fact.objects.create(host=host, timestamp=timestamp_current, module=module_name, facts=facts_json[module_name])) + timestamp_current += timedelta(days=1) + return facts + return rf + +def _fact_json(module_name): + current_dir = os.path.dirname(os.path.realpath(__file__)) + with open('%s/%s.json' % (current_dir, module_name)) as f: + return json.load(f) + +@pytest.fixture +def fact_ansible_json(): + return _fact_json('ansible') + +@pytest.fixture +def fact_packages_json(): + return _fact_json('packages') + +@pytest.fixture +def fact_services_json(): + return _fact_json('services') + +@pytest.fixture +def permission_inv_read(organization, inventory, team): + return Permission.objects.create(inventory=inventory, team=team, permission_type=PERM_INVENTORY_READ) + +@pytest.fixture +def job_template(organization): + jt = JobTemplate(name='test-job_template') + jt.save() + + return jt + +@pytest.fixture +def job_template_labels(organization, job_template): + job_template.labels.create(name="label-1", organization=organization) + job_template.labels.create(name="label-2", organization=organization) + + return job_template + diff --git a/awx/main/tests/functional/core/test_licenses.py b/awx/main/tests/functional/core/test_licenses.py new file mode 100644 index 0000000000..37f3c63fa9 --- /dev/null +++ b/awx/main/tests/functional/core/test_licenses.py @@ -0,0 +1,132 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved. + +import json +import mock +import os +import tempfile +import time +import pytest +from datetime import datetime + +from awx.main.models import Host +from awx.main.task_engine import TaskSerializer, TaskEngager + + +@pytest.mark.django_db +def test_license_writer(inventory, admin): + writer = TaskEngager( + company_name='acmecorp', + contact_name='Michael DeHaan', + contact_email='michael@ansibleworks.com', + license_date=25000, # seconds since epoch + instance_count=500) + + data = writer.get_data() + + Host.objects.bulk_create( + [ + Host( + name='host.%d' % n, + inventory=inventory, + created_by=admin, + modified=datetime.now(), + created=datetime.now()) + for n in range(12) + ] + ) + + assert data['instance_count'] == 500 + assert data['contact_name'] == 'Michael DeHaan' + assert data['contact_email'] == 'michael@ansibleworks.com' + assert data['license_date'] == 25000 + assert data['license_key'] == "11bae31f31c6a6cdcb483a278cdbe98bd8ac5761acd7163a50090b0f098b3a13" + + strdata = writer.get_string() + strdata_loaded = json.loads(strdata) + assert strdata_loaded == data + + reader = TaskSerializer() + + vdata = reader.from_string(strdata) + + assert vdata['available_instances'] == 500 + assert vdata['current_instances'] == 12 + assert vdata['free_instances'] == 488 + assert vdata['date_warning'] is True + assert vdata['date_expired'] is True + assert vdata['license_date'] == 25000 + assert vdata['time_remaining'] < 0 + assert vdata['valid_key'] is True + assert vdata['compliant'] is False + assert vdata['subscription_name'] + +@pytest.mark.django_db +def test_expired_licenses(): + reader = TaskSerializer() + writer = TaskEngager( + company_name='Tower', + contact_name='Tower Admin', + contact_email='tower@ansible.com', + license_date=int(time.time() - 3600), + instance_count=100, + trial=True) + strdata = writer.get_string() + vdata = reader.from_string(strdata) + + assert vdata['compliant'] is False + assert vdata['grace_period_remaining'] < 0 + + writer = TaskEngager( + company_name='Tower', + contact_name='Tower Admin', + contact_email='tower@ansible.com', + license_date=int(time.time() - 2592001), + instance_count=100, + trial=False) + strdata = writer.get_string() + vdata = reader.from_string(strdata) + + assert vdata['compliant'] is False + assert vdata['grace_period_remaining'] < 0 + + writer = TaskEngager( + company_name='Tower', + contact_name='Tower Admin', + contact_email='tower@ansible.com', + license_date=int(time.time() - 3600), + instance_count=100, + trial=False) + strdata = writer.get_string() + vdata = reader.from_string(strdata) + + assert vdata['compliant'] is False + assert vdata['grace_period_remaining'] > 0 + +@pytest.mark.django_db +def test_aws_license(): + os.environ['AWX_LICENSE_FILE'] = 'non-existent-license-file.json' + + h, path = tempfile.mkstemp() + with os.fdopen(h, 'w') as f: + json.dump({'instance_count': 100}, f) + + def fetch_ami(_self): + _self.attributes['ami-id'] = 'ami-00000000' + return True + + def fetch_instance(_self): + _self.attributes['instance-id'] = 'i-00000000' + return True + + with mock.patch('awx.main.task_engine.TEMPORARY_TASK_FILE', path): + with mock.patch('awx.main.task_engine.TemporaryTaskEngine.fetch_ami', fetch_ami): + with mock.patch('awx.main.task_engine.TemporaryTaskEngine.fetch_instance', fetch_instance): + reader = TaskSerializer() + license = reader.from_file() + assert license['is_aws'] + assert license['time_remaining'] + assert license['free_instances'] > 0 + assert license['grace_period_remaining'] > 0 + + os.unlink(path) diff --git a/awx/main/tests/functional/migrations/__init__.py b/awx/main/tests/functional/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/awx/main/tests/functional/migrations/conftest.py b/awx/main/tests/functional/migrations/conftest.py new file mode 100644 index 0000000000..0901f548d3 --- /dev/null +++ b/awx/main/tests/functional/migrations/conftest.py @@ -0,0 +1,84 @@ +# Python +import pytest +from datetime import timedelta + +# Django +from django.utils import timezone +from django.conf import settings + +# AWX +from awx.fact.models.fact import Fact, FactHost + +# MongoEngine +from mongoengine.connection import ConnectionError + +@pytest.fixture(autouse=True) +def mongo_db(request): + marker = request.keywords.get('mongo_db', None) + if marker: + # Drop mongo database + try: + db = Fact._get_db() + db.connection.drop_database(settings.MONGO_DB) + except ConnectionError: + raise + +@pytest.fixture +def inventories(organization): + def rf(inventory_count=1): + invs = [] + for i in xrange(0, inventory_count): + inv = organization.inventories.create(name="test-inv-%d" % i, description="test-inv-desc") + invs.append(inv) + return invs + return rf + +''' +hosts naming convension should align with hosts_mongo +''' +@pytest.fixture +def hosts(organization): + def rf(host_count=1, inventories=[]): + hosts = [] + for inv in inventories: + for i in xrange(0, host_count): + name = '%s-host-%s' % (inv.name, i) + host = inv.hosts.create(name=name) + hosts.append(host) + return hosts + return rf + +@pytest.fixture +def hosts_mongo(organization): + def rf(host_count=1, inventories=[]): + hosts = [] + for inv in inventories: + for i in xrange(0, host_count): + name = '%s-host-%s' % (inv.name, i) + (host, created) = FactHost.objects.get_or_create(hostname=name, inventory_id=inv.id) + hosts.append(host) + return hosts + return rf + +@pytest.fixture +def fact_scans(organization, fact_ansible_json, fact_packages_json, fact_services_json): + def rf(fact_scans=1, inventories=[], timestamp_epoch=timezone.now()): + facts_json = {} + facts = [] + module_names = ['ansible', 'services', 'packages'] + + facts_json['ansible'] = fact_ansible_json + facts_json['packages'] = fact_packages_json + facts_json['services'] = fact_services_json + + for inv in inventories: + for host_obj in FactHost.objects.filter(inventory_id=inv.id): + timestamp_current = timestamp_epoch + for i in xrange(0, fact_scans): + for module_name in module_names: + facts.append(Fact.add_fact(timestamp_current, facts_json[module_name], host_obj, module_name)) + timestamp_current += timedelta(days=1) + return facts + return rf + + diff --git a/awx/main/tests/functional/migrations/test_fact.py b/awx/main/tests/functional/migrations/test_fact.py new file mode 100644 index 0000000000..76dfcc4a40 --- /dev/null +++ b/awx/main/tests/functional/migrations/test_fact.py @@ -0,0 +1,63 @@ +import pytest +import datetime + +from django.apps import apps +from django.conf import settings + +from awx.main.models.inventory import Host +from awx.main.models.fact import Fact + +from awx.main.migrations import _system_tracking as system_tracking + +def micro_to_milli(micro): + return micro - (((int)(micro / 1000)) * 1000) + +@pytest.mark.skipif(not getattr(settings, 'MONGO_DB', None), reason="MongoDB not configured") +@pytest.mark.django_db +@pytest.mark.mongo_db +def test_migrate_facts(inventories, hosts, hosts_mongo, fact_scans): + inventory_objs = inventories(2) + hosts(2, inventory_objs) + hosts_mongo(2, inventory_objs) + facts_known = fact_scans(2, inventory_objs) + + (migrated_count, not_migrated_count) = system_tracking.migrate_facts(apps, None) + # 4 hosts w/ 2 fact scans each, 3 modules each scan + assert migrated_count == 24 + assert not_migrated_count == 0 + + + for fact_mongo, fact_version in facts_known: + host = Host.objects.get(inventory_id=fact_mongo.host.inventory_id, name=fact_mongo.host.hostname) + t = fact_mongo.timestamp - datetime.timedelta(microseconds=micro_to_milli(fact_mongo.timestamp.microsecond)) + fact = Fact.objects.filter(host_id=host.id, timestamp=t, module=fact_mongo.module) + + assert len(fact) == 1 + assert fact[0] is not None + +@pytest.mark.skipif(not getattr(settings, 'MONGO_DB', None), reason="MongoDB not configured") +@pytest.mark.django_db +@pytest.mark.mongo_db +def test_migrate_facts_hostname_does_not_exist(inventories, hosts, hosts_mongo, fact_scans): + inventory_objs = inventories(2) + host_objs = hosts(1, inventory_objs) + hosts_mongo(2, inventory_objs) + facts_known = fact_scans(2, inventory_objs) + + (migrated_count, not_migrated_count) = system_tracking.migrate_facts(apps, None) + assert migrated_count == 12 + assert not_migrated_count == 12 + + + for fact_mongo, fact_version in facts_known: + # Facts that don't match the only host will not be migrated + if fact_mongo.host.hostname != host_objs[0].name: + continue + + host = Host.objects.get(inventory_id=fact_mongo.host.inventory_id, name=fact_mongo.host.hostname) + t = fact_mongo.timestamp - datetime.timedelta(microseconds=micro_to_milli(fact_mongo.timestamp.microsecond)) + fact = Fact.objects.filter(host_id=host.id, timestamp=t, module=fact_mongo.module) + + assert len(fact) == 1 + assert fact[0] is not None + diff --git a/awx/main/tests/functional/models/fact/test_get_host_fact.py b/awx/main/tests/functional/models/fact/test_get_host_fact.py new file mode 100644 index 0000000000..2569417496 --- /dev/null +++ b/awx/main/tests/functional/models/fact/test_get_host_fact.py @@ -0,0 +1,111 @@ +import pytest + +from datetime import timedelta +from django.utils import timezone + +from awx.main.models import Fact + +@pytest.mark.django_db +def test_newest_scan_exact(hosts, fact_scans): + epoch = timezone.now() + hosts = hosts(host_count=2) + facts = fact_scans(fact_scans=3, timestamp_epoch=epoch) + + fact_known = None + for f in facts: + if f.host_id == hosts[0].id and f.module == 'ansible' and f.timestamp == epoch: + fact_known = f + break + fact_found = Fact.get_host_fact(hosts[0].id, 'ansible', epoch) + + assert fact_found == fact_known + +''' +Show me the most recent state of the sytem at any point of time. +or, said differently +For any timestamp, get the first scan that is <= the timestamp. +''' + +''' +Ensure most recent scan run is the scan returned. +Query by future date. +''' +@pytest.mark.django_db +def test_newest_scan_less_than(hosts, fact_scans): + epoch = timezone.now() + timestamp_future = epoch + timedelta(days=10) + hosts = hosts(host_count=2) + facts = fact_scans(fact_scans=3, timestamp_epoch=epoch) + + fact_known = None + for f in facts: + if f.host_id == hosts[0].id and f.module == 'ansible' and f.timestamp == epoch + timedelta(days=2): + fact_known = f + break + assert fact_known is not None + + fact_found = Fact.get_host_fact(hosts[0].id, 'ansible', timestamp_future) + + assert fact_found == fact_known + +''' +Tests query Fact that is in the middle of the fact scan timeline, but not an exact timestamp. +''' +@pytest.mark.django_db +def test_query_middle_of_timeline(hosts, fact_scans): + epoch = timezone.now() + timestamp_middle = epoch + timedelta(days=1, hours=3) + hosts = hosts(host_count=2) + facts = fact_scans(fact_scans=3, timestamp_epoch=epoch) + + fact_known = None + for f in facts: + if f.host_id == hosts[0].id and f.module == 'ansible' and f.timestamp == epoch + timedelta(days=1): + fact_known = f + break + assert fact_known is not None + + fact_found = Fact.get_host_fact(hosts[0].id, 'ansible', timestamp_middle) + + assert fact_found == fact_known + +''' +Query time less than any fact scan. Should return None +''' +@pytest.mark.django_db +def test_query_result_empty(hosts, fact_scans): + epoch = timezone.now() + timestamp_less = epoch - timedelta(days=1) + hosts = hosts(host_count=2) + fact_scans(fact_scans=3, timestamp_epoch=epoch) + + fact_found = Fact.get_host_fact(hosts[0].id, 'ansible', timestamp_less) + + assert fact_found is None + +''' +Query by fact module other than 'ansible' +''' +@pytest.mark.django_db +def test_by_module(hosts, fact_scans): + epoch = timezone.now() + hosts = hosts(host_count=2) + facts = fact_scans(fact_scans=3, timestamp_epoch=epoch) + + fact_known_services = None + fact_known_packages = None + for f in facts: + if f.host_id == hosts[0].id: + if f.module == 'services' and f.timestamp == epoch: + fact_known_services = f + elif f.module == 'packages' and f.timestamp == epoch: + fact_known_packages = f + assert fact_known_services is not None + assert fact_known_packages is not None + + fact_found_services = Fact.get_host_fact(hosts[0].id, 'services', epoch) + fact_found_packages = Fact.get_host_fact(hosts[0].id, 'packages', epoch) + + assert fact_found_services == fact_known_services + assert fact_found_packages == fact_known_packages + diff --git a/awx/main/tests/functional/models/fact/test_get_timeline.py b/awx/main/tests/functional/models/fact/test_get_timeline.py new file mode 100644 index 0000000000..da3360340a --- /dev/null +++ b/awx/main/tests/functional/models/fact/test_get_timeline.py @@ -0,0 +1,129 @@ +import pytest + +from datetime import timedelta +from django.utils import timezone + +from awx.main.models import Fact + +def setup_common(hosts, fact_scans, ts_from=None, ts_to=None, epoch=timezone.now(), module_name='ansible', ts_known=None): + hosts = hosts(host_count=2) + facts = fact_scans(fact_scans=3, timestamp_epoch=epoch) + + facts_known = [] + for f in facts: + if f.host.id == hosts[0].id: + if module_name and f.module != module_name: + continue + if ts_known and f.timestamp != ts_known: + continue + facts_known.append(f) + fact_objs = Fact.get_timeline(hosts[0].id, module=module_name, ts_from=ts_from, ts_to=ts_to) + return (facts_known, fact_objs) + +@pytest.mark.django_db +def test_all(hosts, fact_scans): + epoch = timezone.now() + ts_from = epoch - timedelta(days=1) + ts_to = epoch + timedelta(days=10) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from, ts_to, module_name=None, epoch=epoch) + assert 9 == len(facts_known) + assert 9 == len(fact_objs) + +@pytest.mark.django_db +def test_all_ansible(hosts, fact_scans): + epoch = timezone.now() + ts_from = epoch - timedelta(days=1) + ts_to = epoch + timedelta(days=10) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from, ts_to, epoch=epoch) + assert 3 == len(facts_known) + assert 3 == len(fact_objs) + + for i in xrange(len(facts_known) - 1, 0): + assert facts_known[i].id == fact_objs[i].id + +@pytest.mark.django_db +def test_empty_db(hosts, fact_scans): + hosts = hosts(host_count=2) + epoch = timezone.now() + ts_from = epoch - timedelta(days=1) + ts_to = epoch + timedelta(days=10) + + fact_objs = Fact.get_timeline(hosts[0].id, 'ansible', ts_from, ts_to) + + assert 0 == len(fact_objs) + +@pytest.mark.django_db +def test_no_results(hosts, fact_scans): + epoch = timezone.now() + ts_from = epoch - timedelta(days=100) + ts_to = epoch - timedelta(days=50) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from, ts_to, epoch=epoch) + assert 0 == len(fact_objs) + +@pytest.mark.django_db +def test_exact_same_equal(hosts, fact_scans): + epoch = timezone.now() + ts_to = ts_from = epoch + timedelta(days=1) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from, ts_to, ts_known=ts_to, epoch=epoch) + assert 1 == len(facts_known) + assert 1 == len(fact_objs) + + assert facts_known[0].id == fact_objs[0].id + +@pytest.mark.django_db +def test_exact_from_exclusive_to_inclusive(hosts, fact_scans): + epoch = timezone.now() + ts_from = epoch + timedelta(days=1) + ts_to = epoch + timedelta(days=2) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from, ts_to, ts_known=ts_to, epoch=epoch) + + assert 1 == len(facts_known) + assert 1 == len(fact_objs) + + assert facts_known[0].id == fact_objs[0].id + +@pytest.mark.django_db +def test_to_lte(hosts, fact_scans): + epoch = timezone.now() + ts_to = epoch + timedelta(days=1) + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from=None, ts_to=ts_to, epoch=epoch) + facts_known_subset = filter(lambda x: x.timestamp <= ts_to, facts_known) + + assert 2 == len(facts_known_subset) + assert 2 == len(fact_objs) + + for i in xrange(0, len(fact_objs)): + assert facts_known_subset[len(facts_known_subset) - i - 1].id == fact_objs[i].id + +@pytest.mark.django_db +def test_from_gt(hosts, fact_scans): + epoch = timezone.now() + ts_from = epoch + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from=ts_from, ts_to=None, epoch=epoch) + facts_known_subset = filter(lambda x: x.timestamp > ts_from, facts_known) + + assert 2 == len(facts_known_subset) + assert 2 == len(fact_objs) + + for i in xrange(0, len(fact_objs)): + assert facts_known_subset[len(facts_known_subset) - i - 1].id == fact_objs[i].id + +@pytest.mark.django_db +def test_no_ts(hosts, fact_scans): + epoch = timezone.now() + + (facts_known, fact_objs) = setup_common(hosts, fact_scans, ts_from=None, ts_to=None, epoch=epoch) + assert 3 == len(facts_known) + assert 3 == len(fact_objs) + + for i in xrange(len(facts_known) - 1, 0): + assert facts_known[i].id == fact_objs[i].id + + diff --git a/awx/main/tests/functional/models/test_unified_job.py b/awx/main/tests/functional/models/test_unified_job.py new file mode 100644 index 0000000000..870f9f034a --- /dev/null +++ b/awx/main/tests/functional/models/test_unified_job.py @@ -0,0 +1,34 @@ +import pytest + + +class TestCreateUnifiedJob: + ''' + Ensure that copying a job template to a job handles many to many field copy + ''' + @pytest.mark.django_db + def test_many_to_many(self, mocker, job_template_labels): + jt = job_template_labels + _get_unified_job_field_names = mocker.patch('awx.main.models.jobs.JobTemplate._get_unified_job_field_names', return_value=['labels']) + j = jt.create_unified_job() + + _get_unified_job_field_names.assert_called_with() + assert j.labels.all().count() == 2 + assert j.labels.all()[0] == jt.labels.all()[0] + assert j.labels.all()[1] == jt.labels.all()[1] + + ''' + Ensure that data is looked for in parameter list before looking at the object + ''' + @pytest.mark.django_db + def test_many_to_many_kwargs(self, mocker, job_template_labels): + jt = job_template_labels + mocked = mocker.MagicMock() + mocked.__class__.__name__ = 'ManyRelatedManager' + kwargs = { + 'labels': mocked + } + _get_unified_job_field_names = mocker.patch('awx.main.models.jobs.JobTemplate._get_unified_job_field_names', return_value=['labels']) + jt.create_unified_job(**kwargs) + + _get_unified_job_field_names.assert_called_with() + mocked.all.assert_called_with() diff --git a/awx/main/tests/functional/packages.json b/awx/main/tests/functional/packages.json new file mode 100644 index 0000000000..7bc735d06f --- /dev/null +++ b/awx/main/tests/functional/packages.json @@ -0,0 +1,2922 @@ +[ + { + "name": "kbd", + "source": "rpm", + "epoch": null, + "version": "1.15.5", + "release": "10.el7", + "arch": "x86_64" + }, + { + "name": "centos-release", + "source": "rpm", + "epoch": null, + "version": "7", + "release": "0.1406.el7.centos.2.3", + "arch": "x86_64" + }, + { + "name": "postfix", + "source": "rpm", + "epoch": 2, + "version": "2.10.1", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "filesystem", + "source": "rpm", + "epoch": null, + "version": "3.2", + "release": "18.el7", + "arch": "x86_64" + }, + { + "name": "tuned", + "source": "rpm", + "epoch": null, + "version": "2.3.0", + "release": "11.el7", + "arch": "noarch" + }, + { + "name": "ncurses-base", + "source": "rpm", + "epoch": null, + "version": "5.9", + "release": "13.20130511.el7", + "arch": "noarch" + }, + { + "name": "aic94xx-firmware", + "source": "rpm", + "epoch": null, + "version": "30", + "release": "6.el7", + "arch": "noarch" + }, + { + "name": "kbd-misc", + "source": "rpm", + "epoch": null, + "version": "1.15.5", + "release": "10.el7", + "arch": "noarch" + }, + { + "name": "irqbalance", + "source": "rpm", + "epoch": 2, + "version": "1.0.6", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "tzdata", + "source": "rpm", + "epoch": null, + "version": "2014b", + "release": "1.el7", + "arch": "noarch" + }, + { + "name": "openssh-clients", + "source": "rpm", + "epoch": null, + "version": "6.4p1", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "glibc-common", + "source": "rpm", + "epoch": null, + "version": "2.17", + "release": "55.el7", + "arch": "x86_64" + }, + { + "name": "authconfig", + "source": "rpm", + "epoch": null, + "version": "6.2.8", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "xz-libs", + "source": "rpm", + "epoch": null, + "version": "5.1.2", + "release": "8alpha.el7", + "arch": "x86_64" + }, + { + "name": "btrfs-progs", + "source": "rpm", + "epoch": null, + "version": "3.12", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "ncurses-libs", + "source": "rpm", + "epoch": null, + "version": "5.9", + "release": "13.20130511.el7", + "arch": "x86_64" + }, + { + "name": "sudo", + "source": "rpm", + "epoch": null, + "version": "1.8.6p7", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "libsepol", + "source": "rpm", + "epoch": null, + "version": "2.1.9", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "iprutils", + "source": "rpm", + "epoch": null, + "version": "2.3.16", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libselinux", + "source": "rpm", + "epoch": null, + "version": "2.2.2", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "iwl6000g2b-firmware", + "source": "rpm", + "epoch": null, + "version": "17.168.5.2", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "info", + "source": "rpm", + "epoch": null, + "version": "5.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iwl7260-firmware", + "source": "rpm", + "epoch": null, + "version": "22.0.7.0", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "dbus-libs", + "source": "rpm", + "epoch": 1, + "version": "1.6.12", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "libertas-sd8787-firmware", + "source": "rpm", + "epoch": null, + "version": "20140213", + "release": "0.3.git4164c23.el7", + "arch": "noarch" + }, + { + "name": "sed", + "source": "rpm", + "epoch": null, + "version": "4.2.2", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "iwl6050-firmware", + "source": "rpm", + "epoch": null, + "version": "41.28.5.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "chkconfig", + "source": "rpm", + "epoch": null, + "version": "1.3.61", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iwl1000-firmware", + "source": "rpm", + "epoch": 1, + "version": "39.31.5.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "nspr", + "source": "rpm", + "epoch": null, + "version": "4.10.2", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iwl6000-firmware", + "source": "rpm", + "epoch": null, + "version": "9.221.4.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "nss-util", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "iwl2000-firmware", + "source": "rpm", + "epoch": null, + "version": "18.168.6.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "grep", + "source": "rpm", + "epoch": null, + "version": "2.16", + "release": "1.el7", + "arch": "x86_64" + }, + { + "name": "iwl5150-firmware", + "source": "rpm", + "epoch": null, + "version": "8.24.2.2", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "gawk", + "source": "rpm", + "epoch": null, + "version": "4.0.2", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iwl4965-firmware", + "source": "rpm", + "epoch": null, + "version": "228.61.2.24", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "expat", + "source": "rpm", + "epoch": null, + "version": "2.1.0", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "iwl3160-firmware", + "source": "rpm", + "epoch": null, + "version": "22.0.7.0", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libattr", + "source": "rpm", + "epoch": null, + "version": "2.4.46", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "iwl3945-firmware", + "source": "rpm", + "epoch": null, + "version": "15.32.2.9", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libcap", + "source": "rpm", + "epoch": null, + "version": "2.22", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "libsemanage-python", + "source": "rpm", + "epoch": null, + "version": "2.1.10", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "libxml2", + "source": "rpm", + "epoch": null, + "version": "2.9.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "perl-HTTP-Tiny", + "source": "rpm", + "epoch": null, + "version": "0.033", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "libgcrypt", + "source": "rpm", + "epoch": null, + "version": "1.5.3", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "perl-Pod-Perldoc", + "source": "rpm", + "epoch": null, + "version": "3.20", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "lua", + "source": "rpm", + "epoch": null, + "version": "5.1.4", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "perl-Encode", + "source": "rpm", + "epoch": null, + "version": "2.51", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "pkgconfig", + "source": "rpm", + "epoch": 1, + "version": "0.27.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "perl-Pod-Usage", + "source": "rpm", + "epoch": null, + "version": "1.63", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "shared-mime-info", + "source": "rpm", + "epoch": null, + "version": "1.1", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "perl-Exporter", + "source": "rpm", + "epoch": null, + "version": "5.68", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "libcap-ng", + "source": "rpm", + "epoch": null, + "version": "0.7.3", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "perl-Time-Local", + "source": "rpm", + "epoch": null, + "version": "1.2300", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "libidn", + "source": "rpm", + "epoch": null, + "version": "1.28", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "perl-Carp", + "source": "rpm", + "epoch": null, + "version": "1.26", + "release": "244.el7", + "arch": "noarch" + }, + { + "name": "gmp", + "source": "rpm", + "epoch": 1, + "version": "5.1.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "perl-PathTools", + "source": "rpm", + "epoch": null, + "version": "3.40", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "p11-kit", + "source": "rpm", + "epoch": null, + "version": "0.18.7", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "perl-macros", + "source": "rpm", + "epoch": 4, + "version": "5.16.3", + "release": "285.el7", + "arch": "x86_64" + }, + { + "name": "libdaemon", + "source": "rpm", + "epoch": null, + "version": "0.14", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "perl-File-Temp", + "source": "rpm", + "epoch": null, + "version": "0.23.01", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "libcroco", + "source": "rpm", + "epoch": null, + "version": "0.6.8", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "perl-threads-shared", + "source": "rpm", + "epoch": null, + "version": "1.43", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "libnl3-cli", + "source": "rpm", + "epoch": null, + "version": "3.2.21", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "perl-Filter", + "source": "rpm", + "epoch": null, + "version": "1.49", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "cyrus-sasl-lib", + "source": "rpm", + "epoch": null, + "version": "2.1.26", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "perl-Getopt-Long", + "source": "rpm", + "epoch": null, + "version": "2.40", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "groff-base", + "source": "rpm", + "epoch": null, + "version": "1.22.2", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "gpg-pubkey", + "source": "rpm", + "epoch": null, + "version": "04bbaa7b", + "release": "4c881cbf", + "arch": null + }, + { + "name": "libunistring", + "source": "rpm", + "epoch": null, + "version": "0.9.3", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "libicu", + "source": "rpm", + "epoch": null, + "version": "50.1.2", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "diffutils", + "source": "rpm", + "epoch": null, + "version": "3.3", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libdnet", + "source": "rpm", + "epoch": null, + "version": "1.12", + "release": "13.1.el7", + "arch": "x86_64" + }, + { + "name": "xz", + "source": "rpm", + "epoch": null, + "version": "5.1.2", + "release": "8alpha.el7", + "arch": "x86_64" + }, + { + "name": "open-vm-tools", + "source": "rpm", + "epoch": null, + "version": "9.4.0", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "sysvinit-tools", + "source": "rpm", + "epoch": null, + "version": "2.88", + "release": "14.dsf.el7", + "arch": "x86_64" + }, + { + "name": "open-vm-tools-deploypkg", + "source": "rpm", + "epoch": 0, + "version": "9.4.10", + "release": "3", + "arch": "x86_64" + }, + { + "name": "newt", + "source": "rpm", + "epoch": null, + "version": "0.52.15", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "python-kitchen", + "source": "rpm", + "epoch": null, + "version": "1.1.1", + "release": "5.el7", + "arch": "noarch" + }, + { + "name": "ethtool", + "source": "rpm", + "epoch": 2, + "version": "3.8", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "yum-utils", + "source": "rpm", + "epoch": null, + "version": "1.1.31", + "release": "29.el7", + "arch": "noarch" + }, + { + "name": "hostname", + "source": "rpm", + "epoch": null, + "version": "3.13", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "emacs-filesystem", + "source": "rpm", + "epoch": 1, + "version": "24.3", + "release": "11.el7", + "arch": "noarch" + }, + { + "name": "gdbm", + "source": "rpm", + "epoch": null, + "version": "1.10", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "emacs-common", + "source": "rpm", + "epoch": 1, + "version": "24.3", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "less", + "source": "rpm", + "epoch": null, + "version": "458", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "epel-release", + "source": "rpm", + "epoch": null, + "version": "7", + "release": "5", + "arch": "noarch" + }, + { + "name": "p11-kit-trust", + "source": "rpm", + "epoch": null, + "version": "0.18.7", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "pkcs11-helper", + "source": "rpm", + "epoch": null, + "version": "1.11", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "nettle", + "source": "rpm", + "epoch": null, + "version": "2.7.1", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "easy-rsa", + "source": "rpm", + "epoch": null, + "version": "2.2.2", + "release": "1.el7", + "arch": "noarch" + }, + { + "name": "gobject-introspection", + "source": "rpm", + "epoch": null, + "version": "1.36.0", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libevent", + "source": "rpm", + "epoch": null, + "version": "2.0.21", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "gsettings-desktop-schemas", + "source": "rpm", + "epoch": null, + "version": "3.8.2", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "dhcp-libs", + "source": "rpm", + "epoch": 12, + "version": "4.2.5", + "release": "36.el7.centos", + "arch": "x86_64" + }, + { + "name": "acl", + "source": "rpm", + "epoch": null, + "version": "2.2.51", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "dhcp", + "source": "rpm", + "epoch": 12, + "version": "4.2.5", + "release": "36.el7.centos", + "arch": "x86_64" + }, + { + "name": "elfutils-libs", + "source": "rpm", + "epoch": null, + "version": "0.158", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "bind-license", + "source": "rpm", + "epoch": 32, + "version": "9.9.4", + "release": "18.el7_1.1", + "arch": "noarch" + }, + { + "name": "mozjs17", + "source": "rpm", + "epoch": null, + "version": "17.0.0", + "release": "10.el7", + "arch": "x86_64" + }, + { + "name": "bind", + "source": "rpm", + "epoch": 32, + "version": "9.9.4", + "release": "18.el7_1.1", + "arch": "x86_64" + }, + { + "name": "pinentry", + "source": "rpm", + "epoch": null, + "version": "0.8.1", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "bind-libs-lite", + "source": "rpm", + "epoch": 32, + "version": "9.9.4", + "release": "18.el7_1.1", + "arch": "x86_64" + }, + { + "name": "libselinux-utils", + "source": "rpm", + "epoch": null, + "version": "2.2.2", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "audit-libs", + "source": "rpm", + "epoch": null, + "version": "2.4.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "libedit", + "source": "rpm", + "epoch": null, + "version": "3.0", + "release": "12.20121213cvs.el7", + "arch": "x86_64" + }, + { + "name": "audit-libs-python", + "source": "rpm", + "epoch": null, + "version": "2.4.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "libmodman", + "source": "rpm", + "epoch": null, + "version": "2.0.1", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "checkpolicy", + "source": "rpm", + "epoch": null, + "version": "2.1.12", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "glib-networking", + "source": "rpm", + "epoch": null, + "version": "2.36.2", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "setools-libs", + "source": "rpm", + "epoch": null, + "version": "3.3.7", + "release": "46.el7", + "arch": "x86_64" + }, + { + "name": "snappy", + "source": "rpm", + "epoch": null, + "version": "1.1.0", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "audit", + "source": "rpm", + "epoch": null, + "version": "2.4.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "numactl-libs", + "source": "rpm", + "epoch": null, + "version": "2.0.9", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "autogen-libopts", + "source": "rpm", + "epoch": null, + "version": "5.18", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "libverto", + "source": "rpm", + "epoch": null, + "version": "0.2.5", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "ntp", + "source": "rpm", + "epoch": null, + "version": "4.2.6p5", + "release": "19.el7.centos.3", + "arch": "x86_64" + }, + { + "name": "libsemanage", + "source": "rpm", + "epoch": null, + "version": "2.1.10", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "krb5-libs", + "source": "rpm", + "epoch": null, + "version": "1.11.3", + "release": "49.el7", + "arch": "x86_64" + }, + { + "name": "openldap", + "source": "rpm", + "epoch": null, + "version": "2.4.39", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "cracklib", + "source": "rpm", + "epoch": null, + "version": "2.9.0", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "libmount", + "source": "rpm", + "epoch": null, + "version": "2.23.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "systemd-libs", + "source": "rpm", + "epoch": null, + "version": "208", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "libpwquality", + "source": "rpm", + "epoch": null, + "version": "1.2.3", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "pam", + "source": "rpm", + "epoch": null, + "version": "1.1.8", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "shadow-utils", + "source": "rpm", + "epoch": 2, + "version": "4.1.5.1", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "util-linux", + "source": "rpm", + "epoch": null, + "version": "2.23.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "python-libs", + "source": "rpm", + "epoch": null, + "version": "2.7.5", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "python-decorator", + "source": "rpm", + "epoch": null, + "version": "3.4.0", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "gettext", + "source": "rpm", + "epoch": null, + "version": "0.18.2.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "centos-logos", + "source": "rpm", + "epoch": null, + "version": "70.0.6", + "release": "1.el7.centos", + "arch": "noarch" + }, + { + "name": "libselinux-python", + "source": "rpm", + "epoch": null, + "version": "2.2.2", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "python-slip-dbus", + "source": "rpm", + "epoch": null, + "version": "0.4.0", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "pyliblzma", + "source": "rpm", + "epoch": null, + "version": "0.5.3", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "yum-metadata-parser", + "source": "rpm", + "epoch": null, + "version": "1.1.4", + "release": "10.el7", + "arch": "x86_64" + }, + { + "name": "pyxattr", + "source": "rpm", + "epoch": null, + "version": "0.5.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "python-backports-ssl_match_hostname", + "source": "rpm", + "epoch": null, + "version": "3.4.0.2", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "python-pyudev", + "source": "rpm", + "epoch": null, + "version": "0.15", + "release": "6.el7", + "arch": "noarch" + }, + { + "name": "binutils", + "source": "rpm", + "epoch": null, + "version": "2.23.52.0.1", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "logrotate", + "source": "rpm", + "epoch": null, + "version": "3.8.6", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "alsa-lib", + "source": "rpm", + "epoch": null, + "version": "1.0.27.2", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "mariadb-libs", + "source": "rpm", + "epoch": 1, + "version": "5.5.35", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "libcurl", + "source": "rpm", + "epoch": null, + "version": "7.29.0", + "release": "19.el7", + "arch": "x86_64" + }, + { + "name": "python-urlgrabber", + "source": "rpm", + "epoch": null, + "version": "3.10", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "rpm-libs", + "source": "rpm", + "epoch": null, + "version": "4.11.1", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "fipscheck", + "source": "rpm", + "epoch": null, + "version": "1.4.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "json-c", + "source": "rpm", + "epoch": null, + "version": "0.11", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "virt-what", + "source": "rpm", + "epoch": null, + "version": "1.13", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "libnetfilter_conntrack", + "source": "rpm", + "epoch": null, + "version": "1.0.4", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "iproute", + "source": "rpm", + "epoch": null, + "version": "3.10.0", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "qrencode-libs", + "source": "rpm", + "epoch": null, + "version": "3.4.1", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "device-mapper-libs", + "source": "rpm", + "epoch": 7, + "version": "1.02.84", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "systemd", + "source": "rpm", + "epoch": null, + "version": "208", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "systemd-sysv", + "source": "rpm", + "epoch": null, + "version": "208", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "iputils", + "source": "rpm", + "epoch": null, + "version": "20121221", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "device-mapper-event-libs", + "source": "rpm", + "epoch": 7, + "version": "1.02.84", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "NetworkManager-glib", + "source": "rpm", + "epoch": 1, + "version": "0.9.9.1", + "release": "13.git20140326.4dba720.el7", + "arch": "x86_64" + }, + { + "name": "polkit-pkla-compat", + "source": "rpm", + "epoch": null, + "version": "0.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "cronie-anacron", + "source": "rpm", + "epoch": null, + "version": "1.4.11", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "crontabs", + "source": "rpm", + "epoch": null, + "version": "1.11", + "release": "6.20121102git.el7", + "arch": "noarch" + }, + { + "name": "device-mapper-event", + "source": "rpm", + "epoch": 7, + "version": "1.02.84", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "avahi-libs", + "source": "rpm", + "epoch": null, + "version": "0.6.31", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "avahi-autoipd", + "source": "rpm", + "epoch": null, + "version": "0.6.31", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "dnsmasq", + "source": "rpm", + "epoch": null, + "version": "2.66", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "ebtables", + "source": "rpm", + "epoch": null, + "version": "2.0.10", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "libpciaccess", + "source": "rpm", + "epoch": null, + "version": "0.13.1", + "release": "4.1.el7", + "arch": "x86_64" + }, + { + "name": "fxload", + "source": "rpm", + "epoch": null, + "version": "2002_04_11", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "alsa-tools-firmware", + "source": "rpm", + "epoch": null, + "version": "1.0.27", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libpipeline", + "source": "rpm", + "epoch": null, + "version": "1.2.3", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "gnupg2", + "source": "rpm", + "epoch": null, + "version": "2.0.22", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "rpm-python", + "source": "rpm", + "epoch": null, + "version": "4.11.1", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "pygpgme", + "source": "rpm", + "epoch": null, + "version": "0.3", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "hardlink", + "source": "rpm", + "epoch": 1, + "version": "1.0", + "release": "19.el7", + "arch": "x86_64" + }, + { + "name": "dracut-network", + "source": "rpm", + "epoch": null, + "version": "033", + "release": "161.el7", + "arch": "x86_64" + }, + { + "name": "plymouth", + "source": "rpm", + "epoch": null, + "version": "0.8.9", + "release": "0.10.20140113.el7.centos", + "arch": "x86_64" + }, + { + "name": "teamd", + "source": "rpm", + "epoch": null, + "version": "1.9", + "release": "15.el7", + "arch": "x86_64" + }, + { + "name": "libestr", + "source": "rpm", + "epoch": null, + "version": "0.1.9", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "NetworkManager-tui", + "source": "rpm", + "epoch": 1, + "version": "0.9.9.1", + "release": "13.git20140326.4dba720.el7", + "arch": "x86_64" + }, + { + "name": "kernel", + "source": "rpm", + "epoch": null, + "version": "3.10.0", + "release": "123.el7", + "arch": "x86_64" + }, + { + "name": "dracut-config-rescue", + "source": "rpm", + "epoch": null, + "version": "033", + "release": "161.el7", + "arch": "x86_64" + }, + { + "name": "man-db", + "source": "rpm", + "epoch": null, + "version": "2.6.3", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "lvm2", + "source": "rpm", + "epoch": 7, + "version": "2.02.105", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "libgcc", + "source": "rpm", + "epoch": null, + "version": "4.8.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "setup", + "source": "rpm", + "epoch": null, + "version": "2.8.71", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "microcode_ctl", + "source": "rpm", + "epoch": 2, + "version": "2.1", + "release": "7.1.el7", + "arch": "x86_64" + }, + { + "name": "basesystem", + "source": "rpm", + "epoch": null, + "version": "10.0", + "release": "7.el7.centos", + "arch": "noarch" + }, + { + "name": "biosdevname", + "source": "rpm", + "epoch": null, + "version": "0.5.0", + "release": "10.el7", + "arch": "x86_64" + }, + { + "name": "linux-firmware", + "source": "rpm", + "epoch": null, + "version": "20140213", + "release": "0.3.git4164c23.el7", + "arch": "noarch" + }, + { + "name": "openssh-server", + "source": "rpm", + "epoch": null, + "version": "6.4p1", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "parted", + "source": "rpm", + "epoch": null, + "version": "3.1", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "nss-softokn-freebl", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "selinux-policy-targeted", + "source": "rpm", + "epoch": null, + "version": "3.12.1", + "release": "153.el7", + "arch": "noarch" + }, + { + "name": "glibc", + "source": "rpm", + "epoch": null, + "version": "2.17", + "release": "55.el7", + "arch": "x86_64" + }, + { + "name": "xfsprogs", + "source": "rpm", + "epoch": null, + "version": "3.2.0", + "release": "0.10.alpha2.el7", + "arch": "x86_64" + }, + { + "name": "libstdc++", + "source": "rpm", + "epoch": null, + "version": "4.8.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "e2fsprogs", + "source": "rpm", + "epoch": null, + "version": "1.42.9", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "bash", + "source": "rpm", + "epoch": null, + "version": "4.2.45", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "passwd", + "source": "rpm", + "epoch": null, + "version": "0.79", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "pcre", + "source": "rpm", + "epoch": null, + "version": "8.32", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "tar", + "source": "rpm", + "epoch": 2, + "version": "1.26", + "release": "29.el7", + "arch": "x86_64" + }, + { + "name": "zlib", + "source": "rpm", + "epoch": null, + "version": "1.2.7", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "rootfiles", + "source": "rpm", + "epoch": null, + "version": "8.1", + "release": "11.el7", + "arch": "noarch" + }, + { + "name": "iwl6000g2a-firmware", + "source": "rpm", + "epoch": null, + "version": "17.168.5.3", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libuuid", + "source": "rpm", + "epoch": null, + "version": "2.23.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "iwl2030-firmware", + "source": "rpm", + "epoch": null, + "version": "18.168.6.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "popt", + "source": "rpm", + "epoch": null, + "version": "1.13", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "iwl100-firmware", + "source": "rpm", + "epoch": null, + "version": "39.31.5.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libcom_err", + "source": "rpm", + "epoch": null, + "version": "1.42.9", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iwl135-firmware", + "source": "rpm", + "epoch": null, + "version": "18.168.6.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libdb", + "source": "rpm", + "epoch": null, + "version": "5.3.21", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "iwl105-firmware", + "source": "rpm", + "epoch": null, + "version": "18.168.6.1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "bzip2-libs", + "source": "rpm", + "epoch": null, + "version": "1.0.6", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "libertas-sd8686-firmware", + "source": "rpm", + "epoch": null, + "version": "20140213", + "release": "0.3.git4164c23.el7", + "arch": "noarch" + }, + { + "name": "readline", + "source": "rpm", + "epoch": null, + "version": "6.2", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "ivtv-firmware", + "source": "rpm", + "epoch": 2, + "version": "20080701", + "release": "26.el7", + "arch": "noarch" + }, + { + "name": "elfutils-libelf", + "source": "rpm", + "epoch": null, + "version": "0.158", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "libertas-usb8388-firmware", + "source": "rpm", + "epoch": 2, + "version": "20140213", + "release": "0.3.git4164c23.el7", + "arch": "noarch" + }, + { + "name": "libgpg-error", + "source": "rpm", + "epoch": null, + "version": "1.12", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "iwl5000-firmware", + "source": "rpm", + "epoch": null, + "version": "8.83.5.1_1", + "release": "34.el7", + "arch": "noarch" + }, + { + "name": "libacl", + "source": "rpm", + "epoch": null, + "version": "2.2.51", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "gpg-pubkey", + "source": "rpm", + "epoch": null, + "version": "f4a80eb5", + "release": "53a7ff4b", + "arch": null + }, + { + "name": "cpio", + "source": "rpm", + "epoch": null, + "version": "2.11", + "release": "22.el7", + "arch": "x86_64" + }, + { + "name": "perl-parent", + "source": "rpm", + "epoch": 1, + "version": "0.225", + "release": "244.el7", + "arch": "noarch" + }, + { + "name": "libnl3", + "source": "rpm", + "epoch": null, + "version": "3.2.21", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "perl-podlators", + "source": "rpm", + "epoch": null, + "version": "2.5.1", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "sqlite", + "source": "rpm", + "epoch": null, + "version": "3.7.17", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "perl-Pod-Escapes", + "source": "rpm", + "epoch": 1, + "version": "1.04", + "release": "285.el7", + "arch": "noarch" + }, + { + "name": "libffi", + "source": "rpm", + "epoch": null, + "version": "3.0.13", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "perl-Text-ParseWords", + "source": "rpm", + "epoch": null, + "version": "3.29", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "glib2", + "source": "rpm", + "epoch": null, + "version": "2.36.3", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "perl-Storable", + "source": "rpm", + "epoch": null, + "version": "2.45", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "dbus-glib", + "source": "rpm", + "epoch": null, + "version": "0.100", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "perl-constant", + "source": "rpm", + "epoch": null, + "version": "1.27", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "findutils", + "source": "rpm", + "epoch": 1, + "version": "4.5.11", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "perl-Socket", + "source": "rpm", + "epoch": null, + "version": "2.010", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "file-libs", + "source": "rpm", + "epoch": null, + "version": "5.11", + "release": "21.el7", + "arch": "x86_64" + }, + { + "name": "perl-Time-HiRes", + "source": "rpm", + "epoch": 4, + "version": "1.9725", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "libtasn1", + "source": "rpm", + "epoch": null, + "version": "3.3", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "perl-Scalar-List-Utils", + "source": "rpm", + "epoch": null, + "version": "1.27", + "release": "248.el7", + "arch": "x86_64" + }, + { + "name": "tcp_wrappers-libs", + "source": "rpm", + "epoch": null, + "version": "7.6", + "release": "77.el7", + "arch": "x86_64" + }, + { + "name": "perl-Pod-Simple", + "source": "rpm", + "epoch": 1, + "version": "3.28", + "release": "4.el7", + "arch": "noarch" + }, + { + "name": "file", + "source": "rpm", + "epoch": null, + "version": "5.11", + "release": "21.el7", + "arch": "x86_64" + }, + { + "name": "perl-File-Path", + "source": "rpm", + "epoch": null, + "version": "2.09", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "nss-softokn", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "perl-threads", + "source": "rpm", + "epoch": null, + "version": "1.87", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libassuan", + "source": "rpm", + "epoch": null, + "version": "2.1.0", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "perl-libs", + "source": "rpm", + "epoch": 4, + "version": "5.16.3", + "release": "285.el7", + "arch": "x86_64" + }, + { + "name": "e2fsprogs-libs", + "source": "rpm", + "epoch": null, + "version": "1.42.9", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "perl", + "source": "rpm", + "epoch": 4, + "version": "5.16.3", + "release": "285.el7", + "arch": "x86_64" + }, + { + "name": "which", + "source": "rpm", + "epoch": null, + "version": "2.20", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "gpg-pubkey", + "source": "rpm", + "epoch": null, + "version": "66fd4949", + "release": "4803fe57", + "arch": null + }, + { + "name": "libgomp", + "source": "rpm", + "epoch": null, + "version": "4.8.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "procps-ng", + "source": "rpm", + "epoch": null, + "version": "3.3.10", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "kmod-libs", + "source": "rpm", + "epoch": null, + "version": "14", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "net-tools", + "source": "rpm", + "epoch": null, + "version": "2.0", + "release": "0.17.20131004git.el7", + "arch": "x86_64" + }, + { + "name": "libnfnetlink", + "source": "rpm", + "epoch": null, + "version": "1.0.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "libmspack", + "source": "rpm", + "epoch": 0, + "version": "0.0.20040308alpha", + "release": "2", + "arch": "x86_64" + }, + { + "name": "slang", + "source": "rpm", + "epoch": null, + "version": "2.2.4", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "python-chardet", + "source": "rpm", + "epoch": null, + "version": "2.0.1", + "release": "7.el7", + "arch": "noarch" + }, + { + "name": "lzo", + "source": "rpm", + "epoch": null, + "version": "2.06", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "yum", + "source": "rpm", + "epoch": null, + "version": "3.4.3", + "release": "125.el7.centos", + "arch": "noarch" + }, + { + "name": "pciutils-libs", + "source": "rpm", + "epoch": null, + "version": "3.2.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "gpm-libs", + "source": "rpm", + "epoch": null, + "version": "1.20.7", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "keyutils-libs", + "source": "rpm", + "epoch": null, + "version": "1.5.8", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "liblockfile", + "source": "rpm", + "epoch": null, + "version": "1.08", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "gettext-libs", + "source": "rpm", + "epoch": null, + "version": "0.18.2.1", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "emacs-nox", + "source": "rpm", + "epoch": 1, + "version": "24.3", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "libteam", + "source": "rpm", + "epoch": null, + "version": "1.9", + "release": "15.el7", + "arch": "x86_64" + }, + { + "name": "gpg-pubkey", + "source": "rpm", + "epoch": null, + "version": "352c64e5", + "release": "52ae6884", + "arch": null + }, + { + "name": "ca-certificates", + "source": "rpm", + "epoch": null, + "version": "2013.1.95", + "release": "71.el7", + "arch": "noarch" + }, + { + "name": "openvpn", + "source": "rpm", + "epoch": null, + "version": "2.3.7", + "release": "1.el7", + "arch": "x86_64" + }, + { + "name": "gnutls", + "source": "rpm", + "epoch": null, + "version": "3.1.18", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "strace", + "source": "rpm", + "epoch": null, + "version": "4.8", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "ModemManager-glib", + "source": "rpm", + "epoch": null, + "version": "1.1.0", + "release": "6.git20130913.el7", + "arch": "x86_64" + }, + { + "name": "tmux", + "source": "rpm", + "epoch": null, + "version": "1.8", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "vim-minimal", + "source": "rpm", + "epoch": 2, + "version": "7.4.160", + "release": "1.el7", + "arch": "x86_64" + }, + { + "name": "dhcp-common", + "source": "rpm", + "epoch": 12, + "version": "4.2.5", + "release": "36.el7.centos", + "arch": "x86_64" + }, + { + "name": "device-mapper-persistent-data", + "source": "rpm", + "epoch": null, + "version": "0.3.2", + "release": "1.el7", + "arch": "x86_64" + }, + { + "name": "dhclient", + "source": "rpm", + "epoch": 12, + "version": "4.2.5", + "release": "36.el7.centos", + "arch": "x86_64" + }, + { + "name": "libdb-utils", + "source": "rpm", + "epoch": null, + "version": "5.3.21", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "bind-libs", + "source": "rpm", + "epoch": 32, + "version": "9.9.4", + "release": "18.el7_1.1", + "arch": "x86_64" + }, + { + "name": "libss", + "source": "rpm", + "epoch": null, + "version": "1.42.9", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "bind-utils", + "source": "rpm", + "epoch": 32, + "version": "9.9.4", + "release": "18.el7_1.1", + "arch": "x86_64" + }, + { + "name": "make", + "source": "rpm", + "epoch": 1, + "version": "3.82", + "release": "21.el7", + "arch": "x86_64" + }, + { + "name": "nmap-ncat", + "source": "rpm", + "epoch": 2, + "version": "6.40", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "freetype", + "source": "rpm", + "epoch": null, + "version": "2.4.11", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "policycoreutils", + "source": "rpm", + "epoch": null, + "version": "2.2.5", + "release": "15.el7", + "arch": "x86_64" + }, + { + "name": "ncurses", + "source": "rpm", + "epoch": null, + "version": "5.9", + "release": "13.20130511.el7", + "arch": "x86_64" + }, + { + "name": "python-IPy", + "source": "rpm", + "epoch": null, + "version": "0.75", + "release": "6.el7", + "arch": "noarch" + }, + { + "name": "libproxy", + "source": "rpm", + "epoch": null, + "version": "0.4.11", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "libcgroup", + "source": "rpm", + "epoch": null, + "version": "0.41", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "libsoup", + "source": "rpm", + "epoch": null, + "version": "2.42.2", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "policycoreutils-python", + "source": "rpm", + "epoch": null, + "version": "2.2.5", + "release": "15.el7", + "arch": "x86_64" + }, + { + "name": "libndp", + "source": "rpm", + "epoch": null, + "version": "1.2", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "iftop", + "source": "rpm", + "epoch": null, + "version": "1.0", + "release": "0.7.pre4.el7", + "arch": "x86_64" + }, + { + "name": "libsysfs", + "source": "rpm", + "epoch": null, + "version": "2.1.0", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "ntpdate", + "source": "rpm", + "epoch": null, + "version": "4.2.6p5", + "release": "19.el7.centos.3", + "arch": "x86_64" + }, + { + "name": "ustr", + "source": "rpm", + "epoch": null, + "version": "1.0.4", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "nss-tools", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "openssl-libs", + "source": "rpm", + "epoch": 1, + "version": "1.0.1e", + "release": "34.el7", + "arch": "x86_64" + }, + { + "name": "gzip", + "source": "rpm", + "epoch": null, + "version": "1.5", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "cracklib-dicts", + "source": "rpm", + "epoch": null, + "version": "2.9.0", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "nss", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "libuser", + "source": "rpm", + "epoch": null, + "version": "0.60", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "coreutils", + "source": "rpm", + "epoch": null, + "version": "8.22", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "libblkid", + "source": "rpm", + "epoch": null, + "version": "2.23.2", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "libutempter", + "source": "rpm", + "epoch": null, + "version": "1.1.6", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "nss-sysinit", + "source": "rpm", + "epoch": null, + "version": "3.15.4", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "python", + "source": "rpm", + "epoch": null, + "version": "2.7.5", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "dbus-python", + "source": "rpm", + "epoch": null, + "version": "1.1.1", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "pygobject3-base", + "source": "rpm", + "epoch": null, + "version": "3.8.2", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "python-slip", + "source": "rpm", + "epoch": null, + "version": "0.4.0", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "python-iniparse", + "source": "rpm", + "epoch": null, + "version": "0.4", + "release": "9.el7", + "arch": "noarch" + }, + { + "name": "newt-python", + "source": "rpm", + "epoch": null, + "version": "0.52.15", + "release": "4.el7", + "arch": "x86_64" + }, + { + "name": "python-configobj", + "source": "rpm", + "epoch": null, + "version": "4.7.2", + "release": "7.el7", + "arch": "noarch" + }, + { + "name": "python-backports", + "source": "rpm", + "epoch": null, + "version": "1.0", + "release": "6.el7", + "arch": "noarch" + }, + { + "name": "python-setuptools", + "source": "rpm", + "epoch": null, + "version": "0.9.8", + "release": "3.el7", + "arch": "noarch" + }, + { + "name": "grubby", + "source": "rpm", + "epoch": null, + "version": "8.28", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "kmod", + "source": "rpm", + "epoch": null, + "version": "14", + "release": "9.el7", + "arch": "x86_64" + }, + { + "name": "openssl", + "source": "rpm", + "epoch": 1, + "version": "1.0.1e", + "release": "34.el7", + "arch": "x86_64" + }, + { + "name": "plymouth-core-libs", + "source": "rpm", + "epoch": null, + "version": "0.8.9", + "release": "0.10.20140113.el7.centos", + "arch": "x86_64" + }, + { + "name": "libssh2", + "source": "rpm", + "epoch": null, + "version": "1.4.3", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "python-pycurl", + "source": "rpm", + "epoch": null, + "version": "7.19.0", + "release": "17.el7", + "arch": "x86_64" + }, + { + "name": "curl", + "source": "rpm", + "epoch": null, + "version": "7.29.0", + "release": "19.el7", + "arch": "x86_64" + }, + { + "name": "rpm", + "source": "rpm", + "epoch": null, + "version": "4.11.1", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "selinux-policy", + "source": "rpm", + "epoch": null, + "version": "3.12.1", + "release": "153.el7", + "arch": "noarch" + }, + { + "name": "fipscheck-lib", + "source": "rpm", + "epoch": null, + "version": "1.4.1", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "openssh", + "source": "rpm", + "epoch": null, + "version": "6.4p1", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "dmidecode", + "source": "rpm", + "epoch": 1, + "version": "2.12", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "libmnl", + "source": "rpm", + "epoch": null, + "version": "1.0.3", + "release": "7.el7", + "arch": "x86_64" + }, + { + "name": "iptables", + "source": "rpm", + "epoch": null, + "version": "1.4.21", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "libpcap", + "source": "rpm", + "epoch": 14, + "version": "1.5.3", + "release": "3.el7", + "arch": "x86_64" + }, + { + "name": "device-mapper", + "source": "rpm", + "epoch": 7, + "version": "1.02.84", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "cryptsetup-libs", + "source": "rpm", + "epoch": null, + "version": "1.6.3", + "release": "2.el7", + "arch": "x86_64" + }, + { + "name": "dbus", + "source": "rpm", + "epoch": 1, + "version": "1.6.12", + "release": "8.el7", + "arch": "x86_64" + }, + { + "name": "libgudev1", + "source": "rpm", + "epoch": null, + "version": "208", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "initscripts", + "source": "rpm", + "epoch": null, + "version": "9.49.17", + "release": "1.el7", + "arch": "x86_64" + }, + { + "name": "polkit", + "source": "rpm", + "epoch": null, + "version": "0.112", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "os-prober", + "source": "rpm", + "epoch": null, + "version": "1.58", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "cronie", + "source": "rpm", + "epoch": null, + "version": "1.4.11", + "release": "11.el7", + "arch": "x86_64" + }, + { + "name": "grub2-tools", + "source": "rpm", + "epoch": 1, + "version": "2.02", + "release": "0.2.10.el7.centos.1", + "arch": "x86_64" + }, + { + "name": "lvm2-libs", + "source": "rpm", + "epoch": 7, + "version": "2.02.105", + "release": "14.el7", + "arch": "x86_64" + }, + { + "name": "avahi", + "source": "rpm", + "epoch": null, + "version": "0.6.31", + "release": "13.el7", + "arch": "x86_64" + }, + { + "name": "wpa_supplicant", + "source": "rpm", + "epoch": 1, + "version": "2.0", + "release": "12.el7", + "arch": "x86_64" + }, + { + "name": "ppp", + "source": "rpm", + "epoch": null, + "version": "2.4.5", + "release": "33.el7", + "arch": "x86_64" + }, + { + "name": "hwdata", + "source": "rpm", + "epoch": null, + "version": "0.252", + "release": "7.3.el7", + "arch": "noarch" + }, + { + "name": "libdrm", + "source": "rpm", + "epoch": null, + "version": "2.4.50", + "release": "1.1.el7", + "arch": "x86_64" + }, + { + "name": "alsa-firmware", + "source": "rpm", + "epoch": null, + "version": "1.0.27", + "release": "2.el7", + "arch": "noarch" + }, + { + "name": "kpartx", + "source": "rpm", + "epoch": null, + "version": "0.4.9", + "release": "66.el7", + "arch": "x86_64" + }, + { + "name": "pth", + "source": "rpm", + "epoch": null, + "version": "2.0.7", + "release": "22.el7", + "arch": "x86_64" + }, + { + "name": "rpm-build-libs", + "source": "rpm", + "epoch": null, + "version": "4.11.1", + "release": "16.el7", + "arch": "x86_64" + }, + { + "name": "gpgme", + "source": "rpm", + "epoch": null, + "version": "1.3.2", + "release": "5.el7", + "arch": "x86_64" + }, + { + "name": "yum-plugin-fastestmirror", + "source": "rpm", + "epoch": null, + "version": "1.1.31", + "release": "24.el7", + "arch": "noarch" + }, + { + "name": "kernel-tools-libs", + "source": "rpm", + "epoch": null, + "version": "3.10.0", + "release": "123.el7", + "arch": "x86_64" + }, + { + "name": "dracut", + "source": "rpm", + "epoch": null, + "version": "033", + "release": "161.el7", + "arch": "x86_64" + }, + { + "name": "plymouth-scripts", + "source": "rpm", + "epoch": null, + "version": "0.8.9", + "release": "0.10.20140113.el7.centos", + "arch": "x86_64" + }, + { + "name": "jansson", + "source": "rpm", + "epoch": null, + "version": "2.4", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "NetworkManager", + "source": "rpm", + "epoch": 1, + "version": "0.9.9.1", + "release": "13.git20140326.4dba720.el7", + "arch": "x86_64" + }, + { + "name": "rsyslog", + "source": "rpm", + "epoch": null, + "version": "7.4.7", + "release": "6.el7", + "arch": "x86_64" + }, + { + "name": "kexec-tools", + "source": "rpm", + "epoch": null, + "version": "2.0.4", + "release": "32.el7.centos", + "arch": "x86_64" + }, + { + "name": "grub2", + "source": "rpm", + "epoch": 1, + "version": "2.02", + "release": "0.2.10.el7.centos.1", + "arch": "x86_64" + }, + { + "name": "kernel-tools", + "source": "rpm", + "epoch": null, + "version": "3.10.0", + "release": "123.el7", + "arch": "x86_64" + }, + { + "name": "firewalld", + "source": "rpm", + "epoch": null, + "version": "0.3.9", + "release": "7.el7", + "arch": "noarch" + } +] diff --git a/awx/main/tests/functional/services.json b/awx/main/tests/functional/services.json new file mode 100644 index 0000000000..a86bf4a875 --- /dev/null +++ b/awx/main/tests/functional/services.json @@ -0,0 +1,697 @@ +[ + { + "source": "sysv", + "state": "running", + "name": "iprdump" + }, + { + "source": "sysv", + "state": "running", + "name": "iprinit" + }, + { + "source": "sysv", + "state": "running", + "name": "iprupdate" + }, + { + "source": "sysv", + "state": "stopped", + "name": "netconsole" + }, + { + "source": "sysv", + "state": "running", + "name": "network" + }, + { + "source": "systemd", + "state": "stopped", + "name": "arp-ethers.service" + }, + { + "source": "systemd", + "state": "running", + "name": "auditd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "autovt@.service" + }, + { + "source": "systemd", + "state": "running", + "name": "avahi-daemon.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "blk-availability.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "brandbot.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "console-getty.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "console-shell.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "cpupower.service" + }, + { + "source": "systemd", + "state": "running", + "name": "crond.service" + }, + { + "source": "systemd", + "state": "running", + "name": "dbus-org.fedoraproject.FirewallD1.service" + }, + { + "source": "systemd", + "state": "running", + "name": "dbus-org.freedesktop.Avahi.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus-org.freedesktop.hostname1.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus-org.freedesktop.locale1.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus-org.freedesktop.login1.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus-org.freedesktop.machine1.service" + }, + { + "source": "systemd", + "state": "running", + "name": "dbus-org.freedesktop.NetworkManager.service" + }, + { + "source": "systemd", + "state": "running", + "name": "dbus-org.freedesktop.nm-dispatcher.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus-org.freedesktop.timedate1.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dbus.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "debug-shell.service" + }, + { + "source": "systemd", + "state": "running", + "name": "dhcpd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dhcpd6.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dhcrelay.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dm-event.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dnsmasq.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-cmdline.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-initqueue.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-mount.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-pre-mount.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-pre-pivot.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-pre-trigger.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-pre-udev.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "dracut-shutdown.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "ebtables.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "emergency.service" + }, + { + "source": "systemd", + "state": "running", + "name": "firewalld.service" + }, + { + "source": "systemd", + "state": "running", + "name": "getty@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "halt-local.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "initrd-cleanup.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "initrd-parse-etc.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "initrd-switch-root.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "initrd-udevadm-cleanup-db.service" + }, + { + "source": "systemd", + "state": "running", + "name": "irqbalance.service" + }, + { + "source": "systemd", + "state": "running", + "name": "kdump.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "kmod-static-nodes.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "lvm2-lvmetad.service" + }, + { + "source": "systemd", + "state": "running", + "name": "lvm2-monitor.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "lvm2-pvscan@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "messagebus.service" + }, + { + "source": "systemd", + "state": "running", + "name": "microcode.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "named-setup-rndc.service" + }, + { + "source": "systemd", + "state": "running", + "name": "named.service" + }, + { + "source": "systemd", + "state": "running", + "name": "NetworkManager-dispatcher.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "NetworkManager-wait-online.service" + }, + { + "source": "systemd", + "state": "running", + "name": "NetworkManager.service" + }, + { + "source": "systemd", + "state": "running", + "name": "ntpd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "ntpdate.service" + }, + { + "source": "systemd", + "state": "running", + "name": "openvpn@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-halt.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-kexec.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-poweroff.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-quit-wait.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-quit.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-read-write.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-reboot.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-start.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "plymouth-switch-root.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "polkit.service" + }, + { + "source": "systemd", + "state": "running", + "name": "postfix.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "quotaon.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rc-local.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rdisc.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rescue.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-autorelabel-mark.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-autorelabel.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-configure.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-dmesg.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-domainname.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-import-state.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-loadmodules.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "rhel-readonly.service" + }, + { + "source": "systemd", + "state": "running", + "name": "rsyslog.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "serial-getty@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "sshd-keygen.service" + }, + { + "source": "systemd", + "state": "running", + "name": "sshd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "sshd@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-ask-password-console.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-ask-password-plymouth.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-ask-password-wall.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-backlight@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-binfmt.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-fsck-root.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-fsck@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-halt.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-hibernate.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-hostnamed.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-hybrid-sleep.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-initctl.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-journal-flush.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-journald.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-kexec.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-localed.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-logind.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-machined.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-modules-load.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-nspawn@.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-poweroff.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-quotacheck.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-random-seed.service" + }, + { + "source": "systemd", + "state": "running", + "name": "systemd-readahead-collect.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-readahead-done.service" + }, + { + "source": "systemd", + "state": "running", + "name": "systemd-readahead-drop.service" + }, + { + "source": "systemd", + "state": "running", + "name": "systemd-readahead-replay.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-reboot.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-remount-fs.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-shutdownd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-suspend.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-sysctl.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-timedated.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-tmpfiles-clean.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-tmpfiles-setup-dev.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-tmpfiles-setup.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-udev-settle.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-udev-trigger.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-udevd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-update-utmp-runlevel.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-update-utmp.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-user-sessions.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "systemd-vconsole-setup.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "teamd@.service" + }, + { + "source": "systemd", + "state": "running", + "name": "tuned.service" + }, + { + "source": "systemd", + "state": "running", + "name": "vmtoolsd.service" + }, + { + "source": "systemd", + "state": "stopped", + "name": "wpa_supplicant.service" + } +] diff --git a/awx/main/tests/functional/test_auth_token_limit.py b/awx/main/tests/functional/test_auth_token_limit.py new file mode 100644 index 0000000000..bbe30320c4 --- /dev/null +++ b/awx/main/tests/functional/test_auth_token_limit.py @@ -0,0 +1,39 @@ +import pytest +from datetime import timedelta + +from django.utils.timezone import now as tz_now +from django.test.utils import override_settings + +from awx.main.models import AuthToken, User + + +@override_settings(AUTH_TOKEN_PER_USER=3) +@pytest.mark.django_db +def test_get_tokens_over_limit(): + now = tz_now() + # Times are relative to now + # (key, created on in seconds , expiration in seconds) + test_data = [ + # a is implicitly expired + ("a", -1000, -10), + # b's are invalid due to session limit of 3 + ("b", -100, 60), + ("bb", -100, 60), + ("c", -90, 70), + ("d", -80, 80), + ("e", -70, 90), + ] + user = User.objects.create_superuser('admin', 'foo@bar.com', 'password') + for key, t_create, t_expire in test_data: + AuthToken.objects.create( + user=user, + key=key, + request_hash='this_is_a_hash', + created=now + timedelta(seconds=t_create), + expires=now + timedelta(seconds=t_expire), + ) + invalid_tokens = AuthToken.get_tokens_over_limit(user, now=now) + invalid_keys = [x.key for x in invalid_tokens] + assert len(invalid_keys) == 2 + assert 'b' in invalid_keys + assert 'bb' in invalid_keys diff --git a/awx/main/tests/functional/test_db_credential.py b/awx/main/tests/functional/test_db_credential.py new file mode 100644 index 0000000000..7ed76fdd62 --- /dev/null +++ b/awx/main/tests/functional/test_db_credential.py @@ -0,0 +1,15 @@ +import pytest + +from django.db import IntegrityError +from awx.main.models import Credential + +@pytest.mark.django_db +def test_cred_unique_org_name_kind(organization_factory): + objects = organization_factory("test") + + cred = Credential(name="test", kind="net", organization=objects.organization) + cred.save() + + with pytest.raises(IntegrityError): + cred = Credential(name="test", kind="net", organization=objects.organization) + cred.save() diff --git a/awx/main/tests/functional/test_fixture_factories.py b/awx/main/tests/functional/test_fixture_factories.py new file mode 100644 index 0000000000..1c25f9d38d --- /dev/null +++ b/awx/main/tests/functional/test_fixture_factories.py @@ -0,0 +1,110 @@ +import pytest + +from awx.main.tests.factories import NotUnique + +def test_roles_exc_not_persisted(organization_factory): + with pytest.raises(RuntimeError) as exc: + organization_factory('test-org', roles=['test-org.admin_role:user1'], persisted=False) + assert 'persisted=False' in str(exc.value) + + +@pytest.mark.django_db +def test_roles_exc_bad_object(organization_factory): + with pytest.raises(KeyError): + organization_factory('test-org', roles=['test-project.admin_role:user']) + + +@pytest.mark.django_db +def test_roles_exc_not_unique(organization_factory): + with pytest.raises(NotUnique) as exc: + organization_factory('test-org', projects=['foo'], teams=['foo'], roles=['foo.admin_role:user']) + assert 'not a unique key' in str(exc.value) + + +@pytest.mark.django_db +def test_roles_exc_not_assignment(organization_factory): + with pytest.raises(RuntimeError) as exc: + organization_factory('test-org', projects=['foo'], roles=['foo.admin_role']) + assert 'provide an assignment' in str(exc.value) + + +@pytest.mark.django_db +def test_roles_exc_not_found(organization_factory): + with pytest.raises(RuntimeError) as exc: + organization_factory('test-org', users=['user'], projects=['foo'], roles=['foo.admin_role:user.bad_role']) + assert 'unable to find' in str(exc.value) + + +@pytest.mark.django_db +def test_roles_exc_not_user(organization_factory): + with pytest.raises(RuntimeError) as exc: + organization_factory('test-org', projects=['foo'], roles=['foo.admin_role:foo']) + assert 'unable to add non-user' in str(exc.value) + + +@pytest.mark.django_db +def test_org_factory_roles(organization_factory): + objects = organization_factory('org_roles_test', + teams=['team1', 'team2'], + users=['team1:foo', 'bar'], + projects=['baz', 'bang'], + roles=['team2.member_role:foo', + 'team1.admin_role:bar', + 'team1.admin_role:team2.admin_role', + 'baz.admin_role:foo']) + + assert objects.users.bar in objects.teams.team2.admin_role + assert objects.users.foo in objects.projects.baz.admin_role + assert objects.users.foo in objects.teams.team1.member_role + assert objects.teams.team2.admin_role in objects.teams.team1.admin_role.children.all() + + +@pytest.mark.django_db +def test_org_factory(organization_factory): + objects = organization_factory('organization1', + teams=['team1'], + superusers=['superuser'], + users=['admin', 'alice', 'team1:bob'], + projects=['proj1']) + assert hasattr(objects.users, 'admin') + assert hasattr(objects.users, 'alice') + assert hasattr(objects.superusers, 'superuser') + assert objects.users.bob in objects.teams.team1.member_role.members.all() + assert objects.projects.proj1.organization == objects.organization + + +@pytest.mark.django_db +def test_job_template_factory(job_template_factory): + jt_objects = job_template_factory('testJT', organization='org1', + project='proj1', inventory='inventory1', + credential='cred1', survey='test-survey', + cloud_credential='aws1', + network_credential='juniper1', + jobs=[1]) + assert jt_objects.job_template.name == 'testJT' + assert jt_objects.project.name == 'proj1' + assert jt_objects.inventory.name == 'inventory1' + assert jt_objects.credential.name == 'cred1' + assert jt_objects.cloud_credential.name == 'aws1' + assert jt_objects.network_credential.name == 'juniper1' + assert jt_objects.inventory.organization.name == 'org1' + assert jt_objects.job_template.survey_enabled is True + assert jt_objects.job_template.survey_spec is not None + assert 'test-survey' in jt_objects.jobs[1].extra_vars + +def test_survey_spec_generator_simple(survey_spec_factory): + survey_spec = survey_spec_factory('survey_variable') + assert 'name' in survey_spec + assert 'spec' in survey_spec + assert type(survey_spec['spec']) is list + assert type(survey_spec['spec'][0]) is dict + assert survey_spec['spec'][0]['type'] == 'integer' + +def test_survey_spec_generator_mixed(survey_spec_factory): + survey_spec = survey_spec_factory( + [{'variable': 'question1', 'type': 'integer', 'max': 87}, + {'variable': 'question2', 'type': 'str'}, + 'some_variable']) + assert len(survey_spec['spec']) == 3 + assert [spec_item['type'] for spec_item in survey_spec['spec']] == ['integer', 'str', 'integer'] + assert survey_spec['spec'][0]['max'] == 87 diff --git a/awx/main/tests/functional/test_jobs.py b/awx/main/tests/functional/test_jobs.py new file mode 100644 index 0000000000..83302e7400 --- /dev/null +++ b/awx/main/tests/functional/test_jobs.py @@ -0,0 +1,45 @@ +from awx.main.models import Job + +import pytest + +@pytest.mark.django_db +def test_job_blocking(get, post, job_template, inventory, inventory_factory): + j1 = Job.objects.create(job_template=job_template, + inventory=inventory) + j2 = Job.objects.create(job_template=job_template, + inventory=inventory) + assert j1.is_blocked_by(j2) + j2.inventory = inventory_factory(name='test-different-inventory') + assert not j1.is_blocked_by(j2) + j_callback_1 = Job.objects.create(job_template=job_template, + inventory=inventory, + launch_type='callback', + limit='a') + j_callback_2 = Job.objects.create(job_template=job_template, + inventory=inventory, + launch_type='callback', + limit='a') + assert j_callback_1.is_blocked_by(j_callback_2) + j_callback_2.limit = 'b' + assert not j_callback_1.is_blocked_by(j_callback_2) + +@pytest.mark.django_db +def test_job_blocking_allow_simul(get, post, job_template, inventory): + job_template.allow_simultaneous = True + j1 = Job.objects.create(job_template=job_template, + inventory=inventory) + j2 = Job.objects.create(job_template=job_template, + inventory=inventory) + assert not j1.is_blocked_by(j2) + assert not j2.is_blocked_by(j1) + job_template.allow_simultaneous = False + assert j1.is_blocked_by(j2) + assert j2.is_blocked_by(j1) + +@pytest.mark.django_db +def test_orphan_unified_job_creation(instance, inventory): + job = Job.objects.create(job_template=None, inventory=inventory, name='hi world') + job2 = job.copy() + assert job2.job_template is None + assert job2.inventory == inventory + assert job2.name == 'hi world' diff --git a/awx/main/tests/functional/test_notifications.py b/awx/main/tests/functional/test_notifications.py new file mode 100644 index 0000000000..e5494edbea --- /dev/null +++ b/awx/main/tests/functional/test_notifications.py @@ -0,0 +1,124 @@ +import mock +import pytest + +from awx.main.models.notifications import NotificationTemplate, Notification +from awx.main.models.inventory import Inventory, Group +from awx.main.models.jobs import JobTemplate + +from django.core.urlresolvers import reverse + +@pytest.mark.django_db +def test_get_notification_template_list(get, user, notification_template): + url = reverse('api:notification_template_list') + response = get(url, user('admin', True)) + assert response.status_code == 200 + assert len(response.data['results']) == 1 + +@pytest.mark.django_db +def test_basic_parameterization(get, post, user, organization): + u = user('admin-poster', True) + url = reverse('api:notification_template_list') + response = post(url, + dict(name="test-webhook", + description="test webhook", + organization=organization.id, + notification_type="webhook", + notification_configuration=dict(url="http://localhost", + headers={"Test": "Header"})), + u) + assert response.status_code == 201 + url = reverse('api:notification_template_detail', args=(response.data['id'],)) + response = get(url, u) + assert 'related' in response.data + assert 'organization' in response.data['related'] + assert 'summary_fields' in response.data + assert 'organization' in response.data['summary_fields'] + assert 'notifications' in response.data['related'] + assert 'notification_configuration' in response.data + assert 'url' in response.data['notification_configuration'] + assert 'headers' in response.data['notification_configuration'] + +@pytest.mark.django_db +def test_encrypted_subfields(get, post, user, organization): + def assert_send(self, messages): + assert self.account_token == "shouldhide" + return 1 + u = user('admin-poster', True) + url = reverse('api:notification_template_list') + response = post(url, + dict(name="test-twilio", + description="test twilio", + organization=organization.id, + notification_type="twilio", + notification_configuration=dict(account_sid="dummy", + account_token="shouldhide", + from_number="+19999999999", + to_numbers=["9998887777"])), + u) + assert response.status_code == 201 + notification_template_actual = NotificationTemplate.objects.get(id=response.data['id']) + url = reverse('api:notification_template_detail', args=(response.data['id'],)) + response = get(url, u) + assert response.data['notification_configuration']['account_token'] == "$encrypted$" + with mock.patch.object(notification_template_actual.notification_class, "send_messages", assert_send): + notification_template_actual.send("Test", {'body': "Test"}) + +@pytest.mark.django_db +def test_inherited_notification_templates(get, post, user, organization, project): + u = user('admin-poster', True) + url = reverse('api:notification_template_list') + notification_templates = [] + for nfiers in xrange(3): + response = post(url, + dict(name="test-webhook-{}".format(nfiers), + description="test webhook {}".format(nfiers), + organization=organization.id, + notification_type="webhook", + notification_configuration=dict(url="http://localhost", + headers={"Test": "Header"})), + u) + assert response.status_code == 201 + notification_templates.append(response.data['id']) + i = Inventory.objects.create(name='test', organization=organization) + i.save() + g = Group.objects.create(name='test', inventory=i) + g.save() + jt = JobTemplate.objects.create(name='test', inventory=i, project=project, playbook='debug.yml') + jt.save() + url = reverse('api:organization_notification_templates_any_list', args=(organization.id,)) + response = post(url, dict(id=notification_templates[0]), u) + assert response.status_code == 204 + url = reverse('api:project_notification_templates_any_list', args=(project.id,)) + response = post(url, dict(id=notification_templates[1]), u) + assert response.status_code == 204 + url = reverse('api:job_template_notification_templates_any_list', args=(jt.id,)) + response = post(url, dict(id=notification_templates[2]), u) + assert response.status_code == 204 + assert len(jt.notification_templates['any']) == 3 + assert len(project.notification_templates['any']) == 2 + assert len(g.inventory_source.notification_templates['any']) == 1 + +@pytest.mark.django_db +def test_notification_template_merging(get, post, user, organization, project, notification_template): + user('admin-poster', True) + organization.notification_templates_any.add(notification_template) + project.notification_templates_any.add(notification_template) + assert len(project.notification_templates['any']) == 1 + +@pytest.mark.django_db +def test_notification_template_simple_patch(patch, notification_template, admin): + patch(reverse('api:notification_template_detail', args=(notification_template.id,)), { 'name': 'foo'}, admin, expect=200) + +@pytest.mark.django_db +def test_notification_template_invalid_notification_type(patch, notification_template, admin): + patch(reverse('api:notification_template_detail', args=(notification_template.id,)), { 'notification_type': 'invalid'}, admin, expect=400) + +@pytest.mark.django_db +def test_disallow_delete_when_notifications_pending(delete, user, notification_template): + u = user('superuser', True) + url = reverse('api:notification_template_detail', args=(notification_template.id,)) + Notification.objects.create(notification_template=notification_template, + status='pending') + response = delete(url, user=u) + assert response.status_code == 405 + diff --git a/awx/main/tests/functional/test_projects.py b/awx/main/tests/functional/test_projects.py new file mode 100644 index 0000000000..40ea659432 --- /dev/null +++ b/awx/main/tests/functional/test_projects.py @@ -0,0 +1,132 @@ +import mock # noqa +import pytest + +from django.core.urlresolvers import reverse +from awx.main.models import Project + + +# +# Project listing and visibility tests +# +@pytest.fixture +def team_project_list(organization_factory): + objects = organization_factory('org-test', + superusers=['admin'], + users=['team1:alice', 'team2:bob'], + teams=['team1', 'team2'], + projects=['pteam1', 'pteam2', 'pshared'], + roles=['team1.member_role:pteam1.admin_role', + 'team2.member_role:pteam2.admin_role', + 'team1.member_role:pshared.admin_role', + 'team2.member_role:pshared.admin_role']) + return objects + + +@pytest.mark.django_db +def test_user_project_list(get, organization_factory): + 'List of projects a user has access to, filtered by projects you can also see' + + objects = organization_factory('org1', + projects=['alice project', 'bob project', 'shared project'], + superusers=['admin'], + users=['alice', 'bob'], + roles=['alice project.admin_role:alice', + 'bob project.admin_role:bob', + 'shared project.admin_role:bob', + 'shared project.admin_role:alice']) + + assert get(reverse('api:user_projects_list', args=(objects.superusers.admin.pk,)), objects.superusers.admin).data['count'] == 3 + + # admins can see everyones projects + assert get(reverse('api:user_projects_list', args=(objects.users.alice.pk,)), objects.superusers.admin).data['count'] == 2 + assert get(reverse('api:user_projects_list', args=(objects.users.bob.pk,)), objects.superusers.admin).data['count'] == 2 + + # users can see their own projects + assert get(reverse('api:user_projects_list', args=(objects.users.alice.pk,)), objects.users.alice).data['count'] == 2 + + # alice should only be able to see the shared project when looking at bobs projects + assert get(reverse('api:user_projects_list', args=(objects.users.bob.pk,)), objects.users.alice).data['count'] == 1 + + # alice should see all projects they can see when viewing an admin + assert get(reverse('api:user_projects_list', args=(objects.superusers.admin.pk,)), objects.users.alice).data['count'] == 2 + + +@pytest.mark.django_db +def test_team_project_list(get, team_project_list): + objects = team_project_list + + team1, team2 = objects.teams.team1, objects.teams.team2 + alice, bob, admin = objects.users.alice, objects.users.bob, objects.superusers.admin + + # admins can see all projects on a team + assert get(reverse('api:team_projects_list', args=(team1.pk,)), admin).data['count'] == 2 + assert get(reverse('api:team_projects_list', args=(team2.pk,)), admin).data['count'] == 2 + + # users can see all projects on teams they are a member of + assert get(reverse('api:team_projects_list', args=(team1.pk,)), alice).data['count'] == 2 + + # but if she does, then she should only see the shared project + team2.read_role.members.add(alice) + assert get(reverse('api:team_projects_list', args=(team2.pk,)), alice).data['count'] == 1 + team2.read_role.members.remove(alice) + + # admins can see all projects + assert get(reverse('api:user_projects_list', args=(admin.pk,)), admin).data['count'] == 3 + + # admins can see everyones projects + assert get(reverse('api:user_projects_list', args=(alice.pk,)), admin).data['count'] == 2 + assert get(reverse('api:user_projects_list', args=(bob.pk,)), admin).data['count'] == 2 + + # users can see their own projects + assert get(reverse('api:user_projects_list', args=(alice.pk,)), alice).data['count'] == 2 + + # alice should see all projects they can see when viewing an admin + assert get(reverse('api:user_projects_list', args=(admin.pk,)), alice).data['count'] == 2 + +@pytest.mark.django_db +def test_team_project_list_fail1(get, team_project_list): + objects = team_project_list + res = get(reverse('api:team_projects_list', args=(objects.teams.team2.pk,)), objects.users.alice) + assert res.status_code == 403 + +@pytest.mark.parametrize("u,expected_status_code", [ + ('rando', 403), + ('org_member', 403), + ('org_admin', 201), + ('admin', 201) +]) +@pytest.mark.django_db() +def test_create_project(post, organization, org_admin, org_member, admin, rando, u, expected_status_code): + if u == 'rando': + u = rando + elif u == 'org_member': + u = org_member + elif u == 'org_admin': + u = org_admin + elif u == 'admin': + u = admin + + result = post(reverse('api:project_list'), { + 'name': 'Project', + 'organization': organization.id, + }, u) + print(result.data) + assert result.status_code == expected_status_code + if expected_status_code == 201: + assert Project.objects.filter(name='Project', organization=organization).exists() + +@pytest.mark.django_db() +def test_create_project_null_organization(post, organization, admin): + post(reverse('api:project_list'), { 'name': 't', 'organization': None}, admin, expect=201) + +@pytest.mark.django_db() +def test_create_project_null_organization_xfail(post, organization, org_admin): + post(reverse('api:project_list'), { 'name': 't', 'organization': None}, org_admin, expect=400) + +@pytest.mark.django_db() +def test_patch_project_null_organization(patch, organization, project, admin): + patch(reverse('api:project_detail', args=(project.id,)), { 'name': 't', 'organization': organization.id}, admin, expect=200) + +@pytest.mark.django_db() +def test_patch_project_null_organization_xfail(patch, project, org_admin): + patch(reverse('api:project_detail', args=(project.id,)), { 'name': 't', 'organization': None}, org_admin, expect=400) diff --git a/awx/main/tests/functional/test_rbac_api.py b/awx/main/tests/functional/test_rbac_api.py new file mode 100644 index 0000000000..d5ccbdf5d0 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_api.py @@ -0,0 +1,450 @@ +import mock # noqa +import pytest + +from django.db import transaction +from django.core.urlresolvers import reverse +from awx.main.models.rbac import Role, ROLE_SINGLETON_SYSTEM_ADMINISTRATOR + +def mock_feature_enabled(feature, bypass_database=None): + return True + +#@mock.patch('awx.api.views.feature_enabled', new=mock_feature_enabled) + +@pytest.fixture +def role(): + return Role.objects.create() + + +# +# /roles +# + +@pytest.mark.django_db +def test_get_roles_list_admin(organization, get, admin): + 'Admin can see list of all roles' + url = reverse('api:role_list') + response = get(url, admin) + assert response.status_code == 200 + roles = response.data + assert roles['count'] > 0 + +@pytest.mark.django_db +def test_get_roles_list_user(organization, inventory, team, get, user): + 'Users can see all roles they have access to, but not all roles' + this_user = user('user-test_get_roles_list_user') + organization.member_role.members.add(this_user) + custom_role = Role.objects.create(name='custom_role-test_get_roles_list_user') + organization.member_role.children.add(custom_role) + + url = reverse('api:role_list') + response = get(url, this_user) + assert response.status_code == 200 + roles = response.data + assert roles['count'] > 0 + assert roles['count'] == len(roles['results']) # just to make sure the tests below are valid + + role_hash = {} + + for r in roles['results']: + role_hash[r['id']] = r + + assert Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR).id in role_hash + assert organization.admin_role.id in role_hash + assert organization.member_role.id in role_hash + assert this_user.admin_role.id in role_hash + assert custom_role.id in role_hash + + assert inventory.admin_role.id not in role_hash + assert team.member_role.id not in role_hash + +@pytest.mark.django_db +def test_roles_visibility(get, organization, project, admin, alice, bob): + Role.singleton('system_auditor').members.add(alice) + assert get(reverse('api:role_list') + '?id=%d' % project.update_role.id, user=admin).data['count'] == 1 + assert get(reverse('api:role_list') + '?id=%d' % project.update_role.id, user=alice).data['count'] == 1 + assert get(reverse('api:role_list') + '?id=%d' % project.update_role.id, user=bob).data['count'] == 0 + organization.auditor_role.members.add(bob) + assert get(reverse('api:role_list') + '?id=%d' % project.update_role.id, user=bob).data['count'] == 1 + +@pytest.mark.django_db +def test_roles_filter_visibility(get, organization, project, admin, alice, bob): + Role.singleton('system_auditor').members.add(alice) + project.update_role.members.add(admin) + + assert get(reverse('api:user_roles_list', args=(admin.id,)) + '?id=%d' % project.update_role.id, user=admin).data['count'] == 1 + assert get(reverse('api:user_roles_list', args=(admin.id,)) + '?id=%d' % project.update_role.id, user=alice).data['count'] == 1 + assert get(reverse('api:user_roles_list', args=(admin.id,)) + '?id=%d' % project.update_role.id, user=bob).data['count'] == 0 + organization.auditor_role.members.add(bob) + assert get(reverse('api:user_roles_list', args=(admin.id,)) + '?id=%d' % project.update_role.id, user=bob).data['count'] == 1 + organization.auditor_role.members.remove(bob) + project.use_role.members.add(bob) # sibling role should still grant visibility + assert get(reverse('api:user_roles_list', args=(admin.id,)) + '?id=%d' % project.update_role.id, user=bob).data['count'] == 1 + +@pytest.mark.django_db +def test_cant_create_role(post, admin): + "Ensure we can't create new roles through the api" + # Some day we might want to do this, but until that is speced out, lets + # ensure we don't slip up and allow this implicitly through some helper or + # another + response = post(reverse('api:role_list'), {'name': 'New Role'}, admin) + assert response.status_code == 405 + + +@pytest.mark.django_db +def test_cant_delete_role(delete, admin): + "Ensure we can't delete roles through the api" + # Some day we might want to do this, but until that is speced out, lets + # ensure we don't slip up and allow this implicitly through some helper or + # another + response = delete(reverse('api:role_detail', args=(admin.admin_role.id,)), admin) + assert response.status_code == 405 + + + +# +# /user//roles +# + +@pytest.mark.django_db +def test_get_user_roles_list(get, admin): + url = reverse('api:user_roles_list', args=(admin.id,)) + response = get(url, admin) + assert response.status_code == 200 + roles = response.data + assert roles['count'] > 0 # 'system_administrator' role if nothing else + +@pytest.mark.django_db +def test_user_view_other_user_roles(organization, inventory, team, get, alice, bob): + 'Users can see roles for other users, but only the roles that that user has access to see as well' + organization.member_role.members.add(alice) + organization.admin_role.members.add(bob) + organization.member_role.members.add(bob) + custom_role = Role.objects.create(name='custom_role-test_user_view_admin_roles_list') + organization.member_role.children.add(custom_role) + team.member_role.members.add(bob) + + # alice and bob are in the same org and can see some child role of that org. + # Bob is an org admin, alice can see this. + # Bob is in a team that alice is not, alice cannot see that bob is a member of that team. + + url = reverse('api:user_roles_list', args=(bob.id,)) + response = get(url, alice) + assert response.status_code == 200 + roles = response.data + assert roles['count'] > 0 + assert roles['count'] == len(roles['results']) # just to make sure the tests below are valid + + role_hash = {} + for r in roles['results']: + role_hash[r['id']] = r['name'] + + assert organization.admin_role.id in role_hash + assert custom_role.id not in role_hash # doesn't show up in the user roles list, not an explicit grant + assert Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR).id not in role_hash + assert inventory.admin_role.id not in role_hash + assert team.member_role.id not in role_hash # alice can't see this + + # again but this time alice is part of the team, and should be able to see the team role + team.member_role.members.add(alice) + response = get(url, alice) + assert response.status_code == 200 + roles = response.data + assert roles['count'] > 0 + assert roles['count'] == len(roles['results']) # just to make sure the tests below are valid + + role_hash = {} + for r in roles['results']: + role_hash[r['id']] = r['name'] + + assert team.member_role.id in role_hash # Alice can now see this + + + + +@pytest.mark.django_db +def test_add_role_to_user(role, post, admin): + assert admin.roles.filter(id=role.id).count() == 0 + url = reverse('api:user_roles_list', args=(admin.id,)) + + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert admin.roles.filter(id=role.id).count() == 1 + + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert admin.roles.filter(id=role.id).count() == 1 + + response = post(url, {}, admin) + assert response.status_code == 400 + assert admin.roles.filter(id=role.id).count() == 1 + +@pytest.mark.django_db +def test_remove_role_from_user(role, post, admin): + assert admin.roles.filter(id=role.id).count() == 0 + url = reverse('api:user_roles_list', args=(admin.id,)) + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert admin.roles.filter(id=role.id).count() == 1 + + response = post(url, {'disassociate': role.id, 'id': role.id}, admin) + assert response.status_code == 204 + assert admin.roles.filter(id=role.id).count() == 0 + + + + +# +# /team//roles +# + +@pytest.mark.django_db +def test_get_teams_roles_list(get, team, organization, admin): + team.member_role.children.add(organization.admin_role) + url = reverse('api:team_roles_list', args=(team.id,)) + response = get(url, admin) + assert response.status_code == 200 + roles = response.data + + assert roles['count'] == 1 + assert roles['results'][0]['id'] == organization.admin_role.id or roles['results'][1]['id'] == organization.admin_role.id + + +@pytest.mark.django_db +def test_add_role_to_teams(team, role, post, admin): + assert team.member_role.children.filter(id=role.id).count() == 0 + url = reverse('api:team_roles_list', args=(team.id,)) + + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert team.member_role.children.filter(id=role.id).count() == 1 + + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert team.member_role.children.filter(id=role.id).count() == 1 + + response = post(url, {}, admin) + assert response.status_code == 400 + assert team.member_role.children.filter(id=role.id).count() == 1 + +@pytest.mark.django_db +def test_remove_role_from_teams(team, role, post, admin): + assert team.member_role.children.filter(id=role.id).count() == 0 + url = reverse('api:team_roles_list', args=(team.id,)) + response = post(url, {'id': role.id}, admin) + assert response.status_code == 204 + assert team.member_role.children.filter(id=role.id).count() == 1 + + response = post(url, {'disassociate': role.id, 'id': role.id}, admin) + assert response.status_code == 204 + assert team.member_role.children.filter(id=role.id).count() == 0 + + + +# +# /roles// +# + +@pytest.mark.django_db +def test_get_role(get, admin, role): + url = reverse('api:role_detail', args=(role.id,)) + response = get(url, admin) + assert response.status_code == 200 + assert response.data['id'] == role.id + +@pytest.mark.django_db +def test_put_role_405(put, admin, role): + url = reverse('api:role_detail', args=(role.id,)) + response = put(url, {'name': 'Some new name'}, admin) + assert response.status_code == 405 + #r = Role.objects.get(id=role.id) + #assert r.name == 'Some new name' + +@pytest.mark.django_db +def test_put_role_access_denied(put, alice, role): + url = reverse('api:role_detail', args=(role.id,)) + response = put(url, {'name': 'Some new name'}, alice) + assert response.status_code == 403 or response.status_code == 405 + + +# +# /roles//users/ +# + +@pytest.mark.django_db +def test_get_role_users(get, admin, role): + role.members.add(admin) + url = reverse('api:role_users_list', args=(role.id,)) + response = get(url, admin) + assert response.status_code == 200 + assert response.data['count'] == 1 + assert response.data['results'][0]['id'] == admin.id + +@pytest.mark.django_db +def test_add_user_to_role(post, admin, role): + url = reverse('api:role_users_list', args=(role.id,)) + assert role.members.filter(id=admin.id).count() == 0 + post(url, {'id': admin.id}, admin) + assert role.members.filter(id=admin.id).count() == 1 + +@pytest.mark.django_db +def test_remove_user_to_role(post, admin, role): + role.members.add(admin) + url = reverse('api:role_users_list', args=(role.id,)) + assert role.members.filter(id=admin.id).count() == 1 + post(url, {'disassociate': True, 'id': admin.id}, admin) + assert role.members.filter(id=admin.id).count() == 0 + +@pytest.mark.django_db +def test_org_admin_add_user_to_job_template(post, organization, check_jobtemplate, user): + 'Tests that a user with permissions to assign/revoke membership to a particular role can do so' + org_admin = user('org-admin') + joe = user('joe') + organization.admin_role.members.add(org_admin) + + assert org_admin in check_jobtemplate.admin_role + assert joe not in check_jobtemplate.execute_role + + post(reverse('api:role_users_list', args=(check_jobtemplate.execute_role.id,)), {'id': joe.id}, org_admin) + assert joe in check_jobtemplate.execute_role + + +@pytest.mark.django_db +def test_org_admin_remove_user_from_job_template(post, organization, check_jobtemplate, user): + 'Tests that a user with permissions to assign/revoke membership to a particular role can do so' + org_admin = user('org-admin') + joe = user('joe') + organization.admin_role.members.add(org_admin) + check_jobtemplate.execute_role.members.add(joe) + + assert org_admin in check_jobtemplate.admin_role + assert joe in check_jobtemplate.execute_role + + post(reverse('api:role_users_list', args=(check_jobtemplate.execute_role.id,)), {'disassociate': True, 'id': joe.id}, org_admin) + assert joe not in check_jobtemplate.execute_role + + +@pytest.mark.django_db +def test_user_fail_to_add_user_to_job_template(post, organization, check_jobtemplate, user): + 'Tests that a user without permissions to assign/revoke membership to a particular role cannot do so' + rando = user('rando') + joe = user('joe') + + assert rando not in check_jobtemplate.admin_role + assert joe not in check_jobtemplate.execute_role + + with transaction.atomic(): + res = post(reverse('api:role_users_list', args=(check_jobtemplate.execute_role.id,)), {'id': joe.id}, rando) + assert res.status_code == 403 + + assert joe not in check_jobtemplate.execute_role + + +@pytest.mark.django_db +def test_user_fail_to_remove_user_to_job_template(post, organization, check_jobtemplate, user): + 'Tests that a user without permissions to assign/revoke membership to a particular role cannot do so' + rando = user('rando') + joe = user('joe') + check_jobtemplate.execute_role.members.add(joe) + + assert rando not in check_jobtemplate.admin_role + assert joe in check_jobtemplate.execute_role + + with transaction.atomic(): + res = post(reverse('api:role_users_list', args=(check_jobtemplate.execute_role.id,)), {'disassociate': True, 'id': joe.id}, rando) + assert res.status_code == 403 + + assert joe in check_jobtemplate.execute_role + +# +# /roles//teams/ +# + +@pytest.mark.django_db +def test_get_role_teams(get, team, admin, role): + role.parents.add(team.member_role) + url = reverse('api:role_teams_list', args=(role.id,)) + response = get(url, admin) + assert response.status_code == 200 + assert response.data['count'] == 1 + assert response.data['results'][0]['id'] == team.id + + +@pytest.mark.django_db +def test_add_team_to_role(post, team, admin, role): + url = reverse('api:role_teams_list', args=(role.id,)) + assert role.members.filter(id=admin.id).count() == 0 + res = post(url, {'id': team.id}, admin) + assert res.status_code == 204 + assert role.parents.filter(id=team.member_role.id).count() == 1 + +@pytest.mark.django_db +def test_remove_team_from_role(post, team, admin, role): + role.members.add(admin) + url = reverse('api:role_teams_list', args=(role.id,)) + assert role.members.filter(id=admin.id).count() == 1 + res = post(url, {'disassociate': True, 'id': team.id}, admin) + assert res.status_code == 204 + assert role.parents.filter(id=team.member_role.id).count() == 0 + + +# +# /roles//parents/ +# + +@pytest.mark.django_db +def test_role_parents(get, team, admin, role): + role.parents.add(team.member_role) + url = reverse('api:role_parents_list', args=(role.id,)) + response = get(url, admin) + assert response.status_code == 200 + assert response.data['count'] == 1 + assert response.data['results'][0]['id'] == team.member_role.id + + +# +# /roles//children/ +# + +@pytest.mark.django_db +def test_role_children(get, team, admin, role): + role.parents.add(team.member_role) + url = reverse('api:role_children_list', args=(team.member_role.id,)) + response = get(url, admin) + assert response.status_code == 200 + assert response.data['count'] == 2 + assert response.data['results'][0]['id'] == role.id or response.data['results'][1]['id'] == role.id + + + +# +# Generics +# + +@pytest.mark.django_db +def test_ensure_rbac_fields_are_present(organization, get, admin): + url = reverse('api:organization_detail', args=(organization.id,)) + response = get(url, admin) + assert response.status_code == 200 + org = response.data + + assert 'summary_fields' in org + assert 'object_roles' in org['summary_fields'] + + role_pk = org['summary_fields']['object_roles']['admin_role']['id'] + role_url = reverse('api:role_detail', args=(role_pk,)) + org_role_response = get(role_url, admin) + + assert org_role_response.status_code == 200 + role = org_role_response.data + assert role['related']['organization'] == url + +@pytest.mark.django_db +def test_ensure_role_summary_is_present(organization, get, user): + url = reverse('api:organization_detail', args=(organization.id,)) + response = get(url, user('admin', True)) + assert response.status_code == 200 + org = response.data + + assert 'summary_fields' in org + assert 'object_roles' in org['summary_fields'] + assert org['summary_fields']['object_roles']['admin_role']['id'] > 0 diff --git a/awx/main/tests/functional/test_rbac_core.py b/awx/main/tests/functional/test_rbac_core.py new file mode 100644 index 0000000000..75c89643ad --- /dev/null +++ b/awx/main/tests/functional/test_rbac_core.py @@ -0,0 +1,202 @@ +import pytest + +from awx.main.models import ( + Role, + Organization, + Project, +) + + +@pytest.mark.django_db +def test_auto_inheritance_by_children(organization, alice): + A = Role.objects.create() + B = Role.objects.create() + A.members.add(alice) + + assert alice not in organization.admin_role + assert Organization.accessible_objects(alice, 'admin_role').count() == 0 + A.children.add(B) + assert alice not in organization.admin_role + assert Organization.accessible_objects(alice, 'admin_role').count() == 0 + A.children.add(organization.admin_role) + assert alice in organization.admin_role + assert Organization.accessible_objects(alice, 'admin_role').count() == 1 + A.children.remove(organization.admin_role) + assert alice not in organization.admin_role + B.children.add(organization.admin_role) + assert alice in organization.admin_role + B.children.remove(organization.admin_role) + assert alice not in organization.admin_role + assert Organization.accessible_objects(alice, 'admin_role').count() == 0 + + # We've had the case where our pre/post save init handlers in our field descriptors + # end up creating a ton of role objects because of various not-so-obvious issues + assert Role.objects.count() < 50 + + +@pytest.mark.django_db +def test_auto_inheritance_by_parents(organization, alice): + A = Role.objects.create() + B = Role.objects.create() + A.members.add(alice) + + assert alice not in organization.admin_role + B.parents.add(A) + assert alice not in organization.admin_role + organization.admin_role.parents.add(A) + assert alice in organization.admin_role + organization.admin_role.parents.remove(A) + assert alice not in organization.admin_role + organization.admin_role.parents.add(B) + assert alice in organization.admin_role + organization.admin_role.parents.remove(B) + assert alice not in organization.admin_role + + + +@pytest.mark.django_db +def test_accessible_objects(organization, alice, bob): + A = Role.objects.create() + A.members.add(alice) + B = Role.objects.create() + B.members.add(alice) + B.members.add(bob) + + assert Organization.accessible_objects(alice, 'admin_role').count() == 0 + assert Organization.accessible_objects(bob, 'admin_role').count() == 0 + A.children.add(organization.admin_role) + assert Organization.accessible_objects(alice, 'admin_role').count() == 1 + assert Organization.accessible_objects(bob, 'admin_role').count() == 0 + +@pytest.mark.django_db +def test_team_symantics(organization, team, alice): + assert alice not in organization.auditor_role + team.member_role.children.add(organization.auditor_role) + assert alice not in organization.auditor_role + team.member_role.members.add(alice) + assert alice in organization.auditor_role + team.member_role.members.remove(alice) + assert alice not in organization.auditor_role + + +@pytest.mark.django_db +def test_auto_field_adjustments(organization, inventory, team, alice): + 'Ensures the auto role reparenting is working correctly through non m2m fields' + org2 = Organization.objects.create(name='Org 2', description='org 2') + org2.admin_role.members.add(alice) + assert alice not in inventory.admin_role + inventory.organization = org2 + inventory.save() + assert alice in inventory.admin_role + inventory.organization = organization + inventory.save() + assert alice not in inventory.admin_role + #assert False + +@pytest.mark.django_db +def test_implicit_deletes(alice): + 'Ensures implicit resources and roles delete themselves' + delorg = Organization.objects.create(name='test-org') + child = Role.objects.create() + child.parents.add(delorg.admin_role) + delorg.admin_role.members.add(alice) + + admin_role_id = delorg.admin_role.id + auditor_role_id = delorg.auditor_role.id + + assert child.ancestors.count() > 1 + assert Role.objects.filter(id=admin_role_id).count() == 1 + assert Role.objects.filter(id=auditor_role_id).count() == 1 + n_alice_roles = alice.roles.count() + n_system_admin_children = Role.singleton('system_administrator').children.count() + + delorg.delete() + + assert Role.objects.filter(id=admin_role_id).count() == 0 + assert Role.objects.filter(id=auditor_role_id).count() == 0 + assert alice.roles.count() == (n_alice_roles - 1) + assert Role.singleton('system_administrator').children.count() == (n_system_admin_children - 1) + assert child.ancestors.count() == 1 + assert child.ancestors.all()[0] == child + + +@pytest.mark.django_db +def test_content_object(user): + 'Ensure our content_object stuf seems to be working' + + org = Organization.objects.create(name='test-org') + assert org.admin_role.content_object.id == org.id + +@pytest.mark.django_db +def test_hierarchy_rebuilding_multi_path(): + 'Tests a subdtle cases around role hierarchy rebuilding when you have multiple paths to the same role of different length' + + X = Role.objects.create() + A = Role.objects.create() + B = Role.objects.create() + C = Role.objects.create() + D = Role.objects.create() + + A.children.add(B) + A.children.add(D) + B.children.add(C) + C.children.add(D) + + assert A.is_ancestor_of(D) + assert X.is_ancestor_of(D) is False + + X.children.add(A) + + assert X.is_ancestor_of(D) is True + + X.children.remove(A) + + # This can be the stickler, the rebuilder needs to ensure that D's role + # hierarchy is built after both A and C are updated. + assert X.is_ancestor_of(D) is False + + +@pytest.mark.django_db +def test_auto_parenting(): + org1 = Organization.objects.create(name='org1') + org2 = Organization.objects.create(name='org2') + + prj1 = Project.objects.create(name='prj1') + prj2 = Project.objects.create(name='prj2') + + assert org1.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org1.admin_role.is_ancestor_of(prj2.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj2.admin_role) is False + + prj1.organization = org1 + prj1.save() + + assert org1.admin_role.is_ancestor_of(prj1.admin_role) + assert org1.admin_role.is_ancestor_of(prj2.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj2.admin_role) is False + + prj2.organization = org1 + prj2.save() + + assert org1.admin_role.is_ancestor_of(prj1.admin_role) + assert org1.admin_role.is_ancestor_of(prj2.admin_role) + assert org2.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj2.admin_role) is False + + prj1.organization = org2 + prj1.save() + + assert org1.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org1.admin_role.is_ancestor_of(prj2.admin_role) + assert org2.admin_role.is_ancestor_of(prj1.admin_role) + assert org2.admin_role.is_ancestor_of(prj2.admin_role) is False + + prj2.organization = org2 + prj2.save() + + assert org1.admin_role.is_ancestor_of(prj1.admin_role) is False + assert org1.admin_role.is_ancestor_of(prj2.admin_role) is False + assert org2.admin_role.is_ancestor_of(prj1.admin_role) + assert org2.admin_role.is_ancestor_of(prj2.admin_role) diff --git a/awx/main/tests/functional/test_rbac_credential.py b/awx/main/tests/functional/test_rbac_credential.py new file mode 100644 index 0000000000..3b154d6f42 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_credential.py @@ -0,0 +1,309 @@ +import pytest + +from awx.main.access import CredentialAccess +from awx.main.models.credential import Credential +from awx.main.models.jobs import JobTemplate +from awx.main.models.inventory import InventorySource +from awx.main.migrations import _rbac as rbac +from django.apps import apps +from django.contrib.auth.models import User + +@pytest.mark.django_db +def test_credential_migration_user(credential, user, permissions): + u = user('user', False) + credential.deprecated_user = u + credential.save() + + rbac.migrate_credential(apps, None) + + assert u in credential.admin_role + +@pytest.mark.django_db +def test_two_teams_same_cred_name(organization_factory): + objects = organization_factory("test", + teams=["team1", "team2"]) + + cred1 = Credential.objects.create(name="test", kind="net", deprecated_team=objects.teams.team1) + cred2 = Credential.objects.create(name="test", kind="net", deprecated_team=objects.teams.team2) + + rbac.migrate_credential(apps, None) + + assert objects.teams.team1.admin_role in cred1.admin_role.parents.all() + assert objects.teams.team2.admin_role in cred2.admin_role.parents.all() + assert objects.teams.team1.member_role in cred1.use_role.parents.all() + assert objects.teams.team2.member_role in cred2.use_role.parents.all() + +@pytest.mark.django_db +def test_credential_use_role(credential, user, permissions): + u = user('user', False) + credential.use_role.members.add(u) + assert u in credential.use_role + +@pytest.mark.django_db +def test_credential_migration_team_member(credential, team, user, permissions): + u = user('user', False) + team.member_role.members.add(u) + credential.deprecated_team = team + credential.save() + + + # No permissions pre-migration (this happens automatically so we patch this) + team.admin_role.children.remove(credential.admin_role) + team.member_role.children.remove(credential.use_role) + assert u not in credential.admin_role + + rbac.migrate_credential(apps, None) + + # Admin permissions post migration + assert u in credential.use_role + +@pytest.mark.django_db +def test_credential_migration_team_admin(credential, team, user, permissions): + u = user('user', False) + team.member_role.members.add(u) + credential.deprecated_team = team + credential.save() + + assert u not in credential.use_role + + # Usage permissions post migration + rbac.migrate_credential(apps, None) + assert u in credential.use_role + +def test_credential_access_superuser(): + u = User(username='admin', is_superuser=True) + access = CredentialAccess(u) + credential = Credential() + + assert access.can_add(None) + assert access.can_change(credential, None) + assert access.can_delete(credential) + +@pytest.mark.django_db +def test_credential_access_auditor(credential, organization_factory): + objects = organization_factory("org_cred_auditor", + users=["user1"], + roles=['org_cred_auditor.auditor_role:user1']) + credential.organization = objects.organization + credential.save() + + access = CredentialAccess(objects.users.user1) + assert access.can_read(credential) + +@pytest.mark.django_db +def test_credential_access_admin(user, team, credential): + u = user('org-admin', False) + team.organization.admin_role.members.add(u) + + access = CredentialAccess(u) + + assert access.can_add({'user': u.pk}) + assert not access.can_change(credential, {'user': u.pk}) + + # unowned credential is superuser only + assert not access.can_delete(credential) + + # credential is now part of a team + # that is part of an organization + # that I am an admin for + credential.admin_role.parents.add(team.admin_role) + credential.save() + + cred = Credential.objects.create(kind='aws', name='test-cred') + cred.deprecated_team = team + cred.save() + + # should have can_change access as org-admin + assert access.can_change(credential, {'description': 'New description.'}) + +@pytest.mark.django_db +def test_org_credential_access_member(alice, org_credential, credential): + org_credential.admin_role.members.add(alice) + credential.admin_role.members.add(alice) + + access = CredentialAccess(alice) + + # Alice should be able to PATCH if organization is not changed + assert access.can_change(org_credential, { + 'description': 'New description.', + 'organization': org_credential.organization.pk}) + assert access.can_change(org_credential, { + 'description': 'New description.'}) + assert access.can_change(credential, { + 'description': 'New description.', + 'organization': None}) + +@pytest.mark.django_db +def test_credential_access_org_permissions( + org_admin, org_member, organization, org_credential, credential): + credential.admin_role.members.add(org_admin) + credential.admin_role.members.add(org_member) + org_credential.admin_role.members.add(org_member) + + access = CredentialAccess(org_admin) + member_access = CredentialAccess(org_member) + + # Org admin can move their own credential into their org + assert access.can_change(credential, {'organization': organization.pk}) + # Org member can not + assert not member_access.can_change(credential, { + 'organization': organization.pk}) + + # Org admin can remove a credential from their org + assert access.can_change(org_credential, {'organization': None}) + # Org member can not + assert not member_access.can_change(org_credential, {'organization': None}) + assert not member_access.can_change(org_credential, { + 'user': org_member.pk, 'organization': None}) + +@pytest.mark.django_db +def test_cred_job_template_xfail(user, deploy_jobtemplate): + ' Personal credential migration ' + a = user('admin', False) + org = deploy_jobtemplate.project.organization + org.admin_role.members.add(a) + + cred = deploy_jobtemplate.credential + cred.deprecated_user = user('john', False) + cred.save() + + access = CredentialAccess(a) + rbac.migrate_credential(apps, None) + assert not access.can_change(cred, {'organization': org.pk}) + +@pytest.mark.django_db +def test_cred_job_template(user, team, deploy_jobtemplate): + ' Team credential migration => org credential ' + a = user('admin', False) + org = deploy_jobtemplate.project.organization + org.admin_role.members.add(a) + + cred = deploy_jobtemplate.credential + cred.deprecated_team = team + cred.save() + + access = CredentialAccess(a) + rbac.migrate_credential(apps, None) + + cred.refresh_from_db() + + assert access.can_change(cred, {'organization': org.pk}) + + org.admin_role.members.remove(a) + assert not access.can_change(cred, {'organization': org.pk}) + +@pytest.mark.django_db +def test_cred_multi_job_template_single_org_xfail(user, deploy_jobtemplate): + a = user('admin', False) + org = deploy_jobtemplate.project.organization + org.admin_role.members.add(a) + + cred = deploy_jobtemplate.credential + cred.deprecated_user = user('john', False) + cred.save() + + access = CredentialAccess(a) + rbac.migrate_credential(apps, None) + cred.refresh_from_db() + + assert not access.can_change(cred, {'organization': org.pk}) + +@pytest.mark.django_db +def test_cred_multi_job_template_single_org(user, team, deploy_jobtemplate): + a = user('admin', False) + org = deploy_jobtemplate.project.organization + org.admin_role.members.add(a) + + cred = deploy_jobtemplate.credential + cred.deprecated_team = team + cred.save() + + access = CredentialAccess(a) + rbac.migrate_credential(apps, None) + cred.refresh_from_db() + + assert access.can_change(cred, {'organization': org.pk}) + + org.admin_role.members.remove(a) + assert not access.can_change(cred, {'organization': org.pk}) + +@pytest.mark.django_db +def test_single_cred_multi_job_template_multi_org(user, organizations, credential, team): + orgs = organizations(2) + credential.deprecated_team = team + credential.save() + + jts = [] + for org in orgs: + inv = org.inventories.create(name="inv-%d" % org.pk) + jt = JobTemplate.objects.create( + inventory=inv, + credential=credential, + name="test-jt-org-%d" % org.pk, + job_type='check', + ) + jts.append(jt) + + a = user('admin', False) + orgs[0].admin_role.members.add(a) + orgs[1].admin_role.members.add(a) + + access = CredentialAccess(a) + rbac.migrate_credential(apps, None) + + for jt in jts: + jt.refresh_from_db() + credential.refresh_from_db() + + assert jts[0].credential != jts[1].credential + assert access.can_change(jts[0].credential, {'organization': org.pk}) + assert access.can_change(jts[1].credential, {'organization': org.pk}) + + orgs[0].admin_role.members.remove(a) + assert not access.can_change(jts[0].credential, {'organization': org.pk}) + +@pytest.mark.django_db +def test_cred_inventory_source(user, inventory, credential): + u = user('member', False) + inventory.organization.member_role.members.add(u) + + InventorySource.objects.create( + name="test-inv-src", + credential=credential, + inventory=inventory, + ) + + assert u not in credential.use_role + + rbac.migrate_credential(apps, None) + assert u not in credential.use_role + +@pytest.mark.django_db +def test_cred_project(user, credential, project): + u = user('member', False) + project.organization.member_role.members.add(u) + project.credential = credential + project.save() + + assert u not in credential.use_role + + rbac.migrate_credential(apps, None) + assert u not in credential.use_role + +@pytest.mark.django_db +def test_cred_no_org(user, credential): + su = user('su', True) + access = CredentialAccess(su) + assert access.can_change(credential, {'user': su.pk}) + +@pytest.mark.django_db +def test_cred_team(user, team, credential): + u = user('a', False) + team.member_role.members.add(u) + credential.deprecated_team = team + credential.save() + + assert u not in credential.use_role + + rbac.migrate_credential(apps, None) + assert u in credential.use_role diff --git a/awx/main/tests/functional/test_rbac_inventory.py b/awx/main/tests/functional/test_rbac_inventory.py new file mode 100644 index 0000000000..287919ad31 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_inventory.py @@ -0,0 +1,249 @@ +import pytest + +from awx.main.migrations import _rbac as rbac +from awx.main.models import ( + Permission, + Host, + CustomInventoryScript, +) +from awx.main.access import ( + InventoryAccess, + HostAccess, + InventoryUpdateAccess +) +from django.apps import apps + +@pytest.mark.django_db +def test_custom_inv_script_access(organization, user): + u = user('user', False) + ou = user('oadm', False) + + custom_inv = CustomInventoryScript.objects.create(name='test', script='test', description='test') + custom_inv.organization = organization + custom_inv.save() + assert u not in custom_inv.read_role + + organization.member_role.members.add(u) + assert u in custom_inv.read_role + + organization.admin_role.members.add(ou) + assert ou in custom_inv.admin_role + +@pytest.mark.django_db +def test_inventory_admin_user(inventory, permissions, user): + u = user('admin', False) + perm = Permission(user=u, inventory=inventory, permission_type='admin') + perm.save() + + assert u not in inventory.admin_role + + rbac.migrate_inventory(apps, None) + + assert u in inventory.admin_role + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + +@pytest.mark.django_db +def test_inventory_auditor_user(inventory, permissions, user): + u = user('auditor', False) + perm = Permission(user=u, inventory=inventory, permission_type='read') + perm.save() + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_inventory(apps, None) + + assert u not in inventory.admin_role + assert u in inventory.read_role + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + +@pytest.mark.django_db +def test_inventory_updater_user(inventory, permissions, user): + u = user('updater', False) + perm = Permission(user=u, inventory=inventory, permission_type='write') + perm.save() + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_inventory(apps, None) + + assert u not in inventory.admin_role + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() + +@pytest.mark.django_db +def test_inventory_executor_user(inventory, permissions, user): + u = user('executor', False) + perm = Permission(user=u, inventory=inventory, permission_type='read', run_ad_hoc_commands=True) + perm.save() + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_inventory(apps, None) + + assert u not in inventory.admin_role + assert u in inventory.read_role + assert inventory.use_role.members.filter(id=u.id).exists() + assert inventory.update_role.members.filter(id=u.id).exists() is False + + + +@pytest.mark.django_db +def test_inventory_admin_team(inventory, permissions, user, team): + u = user('admin', False) + perm = Permission(team=team, inventory=inventory, permission_type='admin') + perm.save() + team.deprecated_users.add(u) + + assert u not in inventory.admin_role + + rbac.migrate_team(apps, None) + rbac.migrate_inventory(apps, None) + + assert team.member_role.members.count() == 1 + assert inventory.admin_role.members.filter(id=u.id).exists() is False + assert inventory.read_role.members.filter(id=u.id).exists() is False + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + assert u in inventory.read_role + assert u in inventory.admin_role + + +@pytest.mark.django_db +def test_inventory_auditor(inventory, permissions, user, team): + u = user('auditor', False) + perm = Permission(team=team, inventory=inventory, permission_type='read') + perm.save() + team.deprecated_users.add(u) + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_team(apps,None) + rbac.migrate_inventory(apps, None) + + assert team.member_role.members.count() == 1 + assert inventory.admin_role.members.filter(id=u.id).exists() is False + assert inventory.read_role.members.filter(id=u.id).exists() is False + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + assert u in inventory.read_role + assert u not in inventory.admin_role + + +@pytest.mark.django_db +def test_inventory_updater(inventory, permissions, user, team): + u = user('updater', False) + perm = Permission(team=team, inventory=inventory, permission_type='write') + perm.save() + team.deprecated_users.add(u) + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_team(apps,None) + rbac.migrate_inventory(apps, None) + + assert team.member_role.members.count() == 1 + assert inventory.admin_role.members.filter(id=u.id).exists() is False + assert inventory.read_role.members.filter(id=u.id).exists() is False + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + assert team.member_role.is_ancestor_of(inventory.update_role) + assert team.member_role.is_ancestor_of(inventory.use_role) is False + + +@pytest.mark.django_db +def test_inventory_executor(inventory, permissions, user, team): + u = user('executor', False) + perm = Permission(team=team, inventory=inventory, permission_type='read', run_ad_hoc_commands=True) + perm.save() + team.deprecated_users.add(u) + + assert u not in inventory.admin_role + assert u not in inventory.read_role + + rbac.migrate_team(apps, None) + rbac.migrate_inventory(apps, None) + + assert team.member_role.members.count() == 1 + assert inventory.admin_role.members.filter(id=u.id).exists() is False + assert inventory.read_role.members.filter(id=u.id).exists() is False + assert inventory.use_role.members.filter(id=u.id).exists() is False + assert inventory.update_role.members.filter(id=u.id).exists() is False + assert team.member_role.is_ancestor_of(inventory.update_role) is False + assert team.member_role.is_ancestor_of(inventory.use_role) + + +@pytest.mark.django_db +def test_access_admin(organization, inventory, user): + a = user('admin', False) + inventory.organization = organization + organization.admin_role.members.add(a) + + access = InventoryAccess(a) + assert access.can_read(inventory) + assert access.can_add(None) + assert access.can_add({'organization': organization.id}) + assert access.can_change(inventory, None) + assert access.can_change(inventory, {'organization': organization.id}) + assert access.can_admin(inventory, None) + assert access.can_admin(inventory, {'organization': organization.id}) + assert access.can_delete(inventory) + assert access.can_run_ad_hoc_commands(inventory) + + +@pytest.mark.django_db +def test_access_auditor(organization, inventory, user): + u = user('admin', False) + inventory.organization = organization + organization.auditor_role.members.add(u) + + access = InventoryAccess(u) + assert access.can_read(inventory) + assert not access.can_add(None) + assert not access.can_add({'organization': organization.id}) + assert not access.can_change(inventory, None) + assert not access.can_change(inventory, {'organization': organization.id}) + assert not access.can_admin(inventory, None) + assert not access.can_admin(inventory, {'organization': organization.id}) + assert not access.can_delete(inventory) + assert not access.can_run_ad_hoc_commands(inventory) + +@pytest.mark.django_db +def test_inventory_update_org_admin(inventory_update, org_admin): + access = InventoryUpdateAccess(org_admin) + assert access.can_delete(inventory_update) + + +@pytest.mark.django_db +def test_host_access(organization, inventory, group, user, group_factory): + other_inventory = organization.inventories.create(name='other-inventory') + inventory_admin = user('inventory_admin', False) + + inventory_admin_access = HostAccess(inventory_admin) + + host = Host.objects.create(inventory=inventory, name='host1') + host.groups.add(group) + + assert inventory_admin_access.can_read(host) is False + + inventory.admin_role.members.add(inventory_admin) + + assert inventory_admin_access.can_read(host) + + group.hosts.remove(host) + + assert inventory_admin_access.can_read(host) + + host.inventory = other_inventory + host.save() + + assert inventory_admin_access.can_read(host) is False + + + diff --git a/awx/main/tests/functional/test_rbac_job.py b/awx/main/tests/functional/test_rbac_job.py new file mode 100644 index 0000000000..f1688b7046 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_job.py @@ -0,0 +1,161 @@ +import pytest + +from awx.main.access import ( + JobAccess, + AdHocCommandAccess, + InventoryUpdateAccess, + ProjectUpdateAccess +) +from awx.main.models import ( + Job, + AdHocCommand, + InventoryUpdate, + InventorySource, + ProjectUpdate +) + + +@pytest.fixture +def normal_job(deploy_jobtemplate): + return Job.objects.create( + job_template=deploy_jobtemplate, + project=deploy_jobtemplate.project, + inventory=deploy_jobtemplate.inventory + ) + +@pytest.fixture +def jt_user(deploy_jobtemplate, rando): + deploy_jobtemplate.execute_role.members.add(rando) + return rando + +@pytest.fixture +def inv_updater(inventory, rando): + inventory.update_role.members.add(rando) + return rando + +@pytest.fixture +def host_adhoc(host, machine_credential, rando): + host.inventory.adhoc_role.members.add(rando) + machine_credential.use_role.members.add(rando) + return rando + +@pytest.fixture +def proj_updater(project, rando): + project.update_role.members.add(rando) + return rando + + +# Read permissions testing +@pytest.mark.django_db +def test_superuser_sees_orphans(normal_job, admin_user): + normal_job.job_template = None + access = JobAccess(admin_user) + assert access.can_read(normal_job) + +@pytest.mark.django_db +def test_org_member_does_not_see_orphans(normal_job, org_member, project): + normal_job.job_template = None + # Check that privledged access to project still does not grant access + project.admin_role.members.add(org_member) + access = JobAccess(org_member) + assert not access.can_read(normal_job) + +@pytest.mark.django_db +def test_org_admin_sees_orphans(normal_job, org_admin): + normal_job.job_template = None + access = JobAccess(org_admin) + assert access.can_read(normal_job) + +@pytest.mark.django_db +def test_org_auditor_sees_orphans(normal_job, org_auditor): + normal_job.job_template = None + access = JobAccess(org_auditor) + assert access.can_read(normal_job) + +# Delete permissions testing +@pytest.mark.django_db +def test_JT_admin_delete_denied(normal_job, rando): + normal_job.job_template.admin_role.members.add(rando) + access = JobAccess(rando) + assert not access.can_delete(normal_job) + +@pytest.mark.django_db +def test_inventory_admin_delete_denied(normal_job, rando): + normal_job.job_template.inventory.admin_role.members.add(rando) + access = JobAccess(rando) + assert not access.can_delete(normal_job) + +@pytest.mark.django_db +def test_null_related_delete_denied(normal_job, rando): + normal_job.project = None + normal_job.inventory = None + access = JobAccess(rando) + assert not access.can_delete(normal_job) + +@pytest.mark.django_db +def test_inventory_org_admin_delete_allowed(normal_job, org_admin): + normal_job.project = None # do this so we test job->inventory->org->admin connection + access = JobAccess(org_admin) + assert access.can_delete(normal_job) + +@pytest.mark.django_db +def test_project_org_admin_delete_allowed(normal_job, org_admin): + normal_job.inventory = None # do this so we test job->project->org->admin connection + access = JobAccess(org_admin) + assert access.can_delete(normal_job) + +@pytest.mark.django_db +class TestJobAndUpdateCancels: + + # used in view: job_template_launch + def test_jt_self_cancel(self, deploy_jobtemplate, jt_user): + job = Job(job_template=deploy_jobtemplate, created_by=jt_user) + access = JobAccess(jt_user) + assert access.can_cancel(job) + + def test_jt_friend_cancel(self, deploy_jobtemplate, admin_user, jt_user): + job = Job(job_template=deploy_jobtemplate, created_by=admin_user) + access = JobAccess(jt_user) + assert not access.can_cancel(job) + + def test_jt_org_admin_cancel(self, deploy_jobtemplate, org_admin, jt_user): + job = Job(job_template=deploy_jobtemplate, created_by=jt_user) + access = JobAccess(org_admin) + assert access.can_cancel(job) + + # used in view: host_ad_hoc_commands_list + def test_host_self_cancel(self, host, host_adhoc): + adhoc_command = AdHocCommand(inventory=host.inventory, created_by=host_adhoc) + access = AdHocCommandAccess(host_adhoc) + assert access.can_cancel(adhoc_command) + + def test_host_friend_cancel(self, host, admin_user, host_adhoc): + adhoc_command = AdHocCommand(inventory=host.inventory, created_by=admin_user) + access = AdHocCommandAccess(host_adhoc) + assert not access.can_cancel(adhoc_command) + + # used in view: inventory_source_update_view + def test_inventory_self_cancel(self, inventory, inv_updater): + inventory_update = InventoryUpdate(inventory_source=InventorySource( + name=inventory.name, inventory=inventory, source='gce' + ), created_by=inv_updater) + access = InventoryUpdateAccess(inv_updater) + assert access.can_cancel(inventory_update) + + def test_inventory_friend_cancel(self, inventory, admin_user, inv_updater): + inventory_update = InventoryUpdate(inventory_source=InventorySource( + name=inventory.name, inventory=inventory, source='gce' + ), created_by=admin_user) + access = InventoryUpdateAccess(inv_updater) + assert not access.can_cancel(inventory_update) + + # used in view: project_update_view + def test_project_self_cancel(self, project, proj_updater): + project_update = ProjectUpdate(project=project, created_by=proj_updater) + access = ProjectUpdateAccess(proj_updater) + assert access.can_cancel(project_update) + + def test_project_friend_cancel(self, project, admin_user, proj_updater): + project_update = ProjectUpdate(project=project, created_by=admin_user) + access = ProjectUpdateAccess(proj_updater) + assert not access.can_cancel(project_update) diff --git a/awx/main/tests/functional/test_rbac_job_start.py b/awx/main/tests/functional/test_rbac_job_start.py new file mode 100644 index 0000000000..18060126e1 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_job_start.py @@ -0,0 +1,47 @@ +import pytest + +from awx.main.models.inventory import Inventory +from awx.main.models.credential import Credential +from awx.main.models.jobs import JobTemplate + +@pytest.fixture +def machine_credential(): + return Credential.objects.create(name='machine-cred', kind='ssh', username='test_user', password='pas4word') + +@pytest.mark.django_db +@pytest.mark.job_permissions +def test_admin_executing_permissions(deploy_jobtemplate, inventory, machine_credential, user): + + admin_user = user('admin-user', True) + + assert admin_user.can_access(Inventory, 'use', inventory) + assert admin_user.can_access(Inventory, 'run_ad_hoc_commands', inventory) # for ad_hoc + assert admin_user.can_access(JobTemplate, 'start', deploy_jobtemplate) + assert admin_user.can_access(Credential, 'use', machine_credential) + +@pytest.mark.django_db +@pytest.mark.job_permissions +def test_job_template_start_access(deploy_jobtemplate, user): + + common_user = user('test-user', False) + deploy_jobtemplate.execute_role.members.add(common_user) + + assert common_user.can_access(JobTemplate, 'start', deploy_jobtemplate) + +@pytest.mark.django_db +@pytest.mark.job_permissions +def test_credential_use_access(machine_credential, user): + + common_user = user('test-user', False) + machine_credential.use_role.members.add(common_user) + + assert common_user.can_access(Credential, 'use', machine_credential) + +@pytest.mark.django_db +@pytest.mark.job_permissions +def test_inventory_use_access(inventory, user): + + common_user = user('test-user', False) + inventory.use_role.members.add(common_user) + + assert common_user.can_access(Inventory, 'use', inventory) diff --git a/awx/main/tests/functional/test_rbac_job_templates.py b/awx/main/tests/functional/test_rbac_job_templates.py new file mode 100644 index 0000000000..c8cc2b8502 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_job_templates.py @@ -0,0 +1,242 @@ +import mock +import pytest + +from awx.main.access import ( + BaseAccess, + JobTemplateAccess, +) +from awx.main.migrations import _rbac as rbac +from awx.main.models import Permission +from awx.main.models.jobs import JobTemplate +from django.apps import apps + +from django.core.urlresolvers import reverse + + +@pytest.fixture +def jt_objects(job_template_factory): + objects = job_template_factory( + 'testJT', organization='org1', project='proj1', inventory='inventory1', + credential='cred1', cloud_credential='aws1', network_credential='juniper1') + return objects + +@pytest.mark.django_db +def test_job_template_migration_check(credential, deploy_jobtemplate, check_jobtemplate, user): + admin = user('admin', is_superuser=True) + joe = user('joe') + + credential.deprecated_user = joe + credential.save() + + check_jobtemplate.project.organization.deprecated_users.add(joe) + + Permission(user=joe, inventory=check_jobtemplate.inventory, permission_type='read').save() + Permission(user=joe, inventory=check_jobtemplate.inventory, + project=check_jobtemplate.project, permission_type='check').save() + + + rbac.migrate_users(apps, None) + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + rbac.migrate_inventory(apps, None) + + assert joe in check_jobtemplate.project.read_role + assert admin in check_jobtemplate.execute_role + assert joe not in check_jobtemplate.execute_role + + rbac.migrate_job_templates(apps, None) + + assert admin in check_jobtemplate.execute_role + assert joe in check_jobtemplate.execute_role + assert admin in deploy_jobtemplate.execute_role + assert joe not in deploy_jobtemplate.execute_role + +@pytest.mark.django_db +def test_job_template_migration_deploy(credential, deploy_jobtemplate, check_jobtemplate, user): + admin = user('admin', is_superuser=True) + joe = user('joe') + + credential.deprecated_user = joe + credential.save() + + deploy_jobtemplate.project.organization.deprecated_users.add(joe) + + Permission(user=joe, inventory=deploy_jobtemplate.inventory, permission_type='read').save() + Permission(user=joe, inventory=deploy_jobtemplate.inventory, + project=deploy_jobtemplate.project, permission_type='run').save() + + rbac.migrate_users(apps, None) + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + rbac.migrate_inventory(apps, None) + + assert joe in deploy_jobtemplate.project.read_role + assert admin in deploy_jobtemplate.execute_role + assert joe not in deploy_jobtemplate.execute_role + + rbac.migrate_job_templates(apps, None) + + assert admin in deploy_jobtemplate.execute_role + assert joe in deploy_jobtemplate.execute_role + assert admin in check_jobtemplate.execute_role + assert joe in check_jobtemplate.execute_role + + +@pytest.mark.django_db +def test_job_template_team_migration_check(credential, deploy_jobtemplate, check_jobtemplate, organization, team, user): + admin = user('admin', is_superuser=True) + joe = user('joe') + team.deprecated_users.add(joe) + team.organization = organization + team.save() + + credential.deprecated_team = team + credential.save() + + check_jobtemplate.project.organization.deprecated_users.add(joe) + + Permission(team=team, inventory=check_jobtemplate.inventory, permission_type='read').save() + Permission(team=team, inventory=check_jobtemplate.inventory, + project=check_jobtemplate.project, permission_type='check').save() + + rbac.migrate_users(apps, None) + rbac.migrate_team(apps, None) + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + rbac.migrate_inventory(apps, None) + + assert joe not in check_jobtemplate.read_role + assert admin in check_jobtemplate.execute_role + assert joe not in check_jobtemplate.execute_role + + rbac.migrate_job_templates(apps, None) + + assert admin in check_jobtemplate.execute_role + assert joe in check_jobtemplate.execute_role + + assert admin in deploy_jobtemplate.execute_role + assert joe not in deploy_jobtemplate.execute_role + + +@pytest.mark.django_db +def test_job_template_team_deploy_migration(credential, deploy_jobtemplate, check_jobtemplate, organization, team, user): + admin = user('admin', is_superuser=True) + joe = user('joe') + team.deprecated_users.add(joe) + team.organization = organization + team.save() + + credential.deprecated_team = team + credential.save() + + deploy_jobtemplate.project.organization.deprecated_users.add(joe) + + Permission(team=team, inventory=deploy_jobtemplate.inventory, permission_type='read').save() + Permission(team=team, inventory=deploy_jobtemplate.inventory, + project=deploy_jobtemplate.project, permission_type='run').save() + + rbac.migrate_users(apps, None) + rbac.migrate_team(apps, None) + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + rbac.migrate_inventory(apps, None) + + assert joe not in deploy_jobtemplate.read_role + assert admin in deploy_jobtemplate.execute_role + assert joe not in deploy_jobtemplate.execute_role + + rbac.migrate_job_templates(apps, None) + + assert joe in deploy_jobtemplate.read_role + assert admin in deploy_jobtemplate.execute_role + assert joe in deploy_jobtemplate.execute_role + + assert admin in check_jobtemplate.execute_role + assert joe in check_jobtemplate.execute_role + + +@mock.patch.object(BaseAccess, 'check_license', return_value=None) +@pytest.mark.django_db +def test_job_template_access_superuser(check_license, user, deploy_jobtemplate): + # GIVEN a superuser + u = user('admin', True) + # WHEN access to a job template is checked + access = JobTemplateAccess(u) + # THEN all access checks should pass + assert access.can_read(deploy_jobtemplate) + assert access.can_add({}) + +@pytest.mark.django_db +def test_job_template_access_read_level(jt_objects, rando): + + access = JobTemplateAccess(rando) + jt_objects.project.read_role.members.add(rando) + jt_objects.inventory.read_role.members.add(rando) + jt_objects.credential.read_role.members.add(rando) + jt_objects.cloud_credential.read_role.members.add(rando) + jt_objects.network_credential.read_role.members.add(rando) + + proj_pk = jt_objects.project.pk + assert not access.can_add(dict(inventory=jt_objects.inventory.pk, project=proj_pk)) + assert not access.can_add(dict(credential=jt_objects.credential.pk, project=proj_pk)) + assert not access.can_add(dict(cloud_credential=jt_objects.cloud_credential.pk, project=proj_pk)) + assert not access.can_add(dict(network_credential=jt_objects.network_credential.pk, project=proj_pk)) + +@pytest.mark.django_db +def test_job_template_access_use_level(jt_objects, rando): + + access = JobTemplateAccess(rando) + jt_objects.project.use_role.members.add(rando) + jt_objects.inventory.use_role.members.add(rando) + jt_objects.credential.use_role.members.add(rando) + jt_objects.cloud_credential.use_role.members.add(rando) + jt_objects.network_credential.use_role.members.add(rando) + + proj_pk = jt_objects.project.pk + assert access.can_add(dict(inventory=jt_objects.inventory.pk, project=proj_pk)) + assert access.can_add(dict(credential=jt_objects.credential.pk, project=proj_pk)) + assert access.can_add(dict(cloud_credential=jt_objects.cloud_credential.pk, project=proj_pk)) + assert access.can_add(dict(network_credential=jt_objects.network_credential.pk, project=proj_pk)) + +@pytest.mark.django_db +def test_job_template_access_org_admin(jt_objects, rando): + access = JobTemplateAccess(rando) + # Appoint this user as admin of the organization + jt_objects.inventory.organization.admin_role.members.add(rando) + # Assign organization permission in the same way the create view does + organization = jt_objects.inventory.organization + jt_objects.credential.admin_role.parents.add(organization.admin_role) + jt_objects.cloud_credential.admin_role.parents.add(organization.admin_role) + jt_objects.network_credential.admin_role.parents.add(organization.admin_role) + + proj_pk = jt_objects.project.pk + assert access.can_add(dict(inventory=jt_objects.inventory.pk, project=proj_pk)) + assert access.can_add(dict(credential=jt_objects.credential.pk, project=proj_pk)) + assert access.can_add(dict(cloud_credential=jt_objects.cloud_credential.pk, project=proj_pk)) + assert access.can_add(dict(network_credential=jt_objects.network_credential.pk, project=proj_pk)) + + assert access.can_read(jt_objects.job_template) + assert access.can_delete(jt_objects.job_template) + +@pytest.mark.django_db +@pytest.mark.job_permissions +def test_job_template_creator_access(project, rando, post): + + project.admin_role.members.add(rando) + with mock.patch( + 'awx.main.models.projects.ProjectOptions.playbooks', + new_callable=mock.PropertyMock(return_value=['helloworld.yml'])): + response = post(reverse('api:job_template_list', args=[]), dict( + name='newly-created-jt', + job_type='run', + ask_inventory_on_launch=True, + ask_credential_on_launch=True, + project=project.pk, + playbook='helloworld.yml' + ), rando) + + assert response.status_code == 201 + jt_pk = response.data['id'] + jt_obj = JobTemplate.objects.get(pk=jt_pk) + # Creating a JT should place the creator in the admin role + assert rando in jt_obj.admin_role diff --git a/awx/main/tests/functional/test_rbac_label.py b/awx/main/tests/functional/test_rbac_label.py new file mode 100644 index 0000000000..e425d50908 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_label.py @@ -0,0 +1,64 @@ +import pytest + +from awx.main.access import ( + LabelAccess, +) + +from rest_framework.exceptions import ParseError + +@pytest.mark.django_db +def test_label_get_queryset_user(label, user): + access = LabelAccess(user('user', False)) + label.organization.member_role.members.add(user('user', False)) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_label_get_queryset_su(label, user): + access = LabelAccess(user('user', True)) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_label_access(label, user): + access = LabelAccess(user('user', False)) + assert not access.can_read(label) + +@pytest.mark.django_db +def test_label_access_superuser(label, user): + access = LabelAccess(user('admin', True)) + + assert access.can_read(label) + assert access.can_change(label, None) + assert access.can_delete(label) + +@pytest.mark.django_db +def test_label_access_admin(organization_factory): + '''can_change because I am an admin of that org''' + no_members = organization_factory("no_members") + members = organization_factory("has_members", + users=['admin'], + labels=['test']) + + label = members.labels.test + admin = members.users.admin + members.organization.admin_role.members.add(admin) + + access = LabelAccess(admin) + assert not access.can_change(label, {'organization': no_members.organization.id}) + assert access.can_read(label) + assert access.can_change(label, None) + assert access.can_change(label, {'organization': members.organization.id}) + assert access.can_delete(label) + +@pytest.mark.django_db +def test_label_access_user(label, user): + access = LabelAccess(user('user', False)) + label.organization.member_role.members.add(user('user', False)) + + with pytest.raises(ParseError): + access.can_add({'organization': None}) + assert not access.can_change(label, None) + assert not access.can_delete(label) + + assert access.can_read(label) + assert access.can_add({'organization': label.organization.id}) + diff --git a/awx/main/tests/functional/test_rbac_notifications.py b/awx/main/tests/functional/test_rbac_notifications.py new file mode 100644 index 0000000000..a9a5e7c5f9 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_notifications.py @@ -0,0 +1,119 @@ +import pytest + +from awx.main.access import ( + NotificationTemplateAccess, + NotificationAccess +) + +@pytest.mark.django_db +def test_notification_template_get_queryset_orgmember(notification_template, user): + access = NotificationTemplateAccess(user('user', False)) + notification_template.organization.member_role.members.add(user('user', False)) + assert access.get_queryset().count() == 0 + +@pytest.mark.django_db +def test_notification_template_get_queryset_nonorgmember(notification_template, user): + access = NotificationTemplateAccess(user('user', False)) + assert access.get_queryset().count() == 0 + +@pytest.mark.django_db +def test_notification_template_get_queryset_su(notification_template, user): + access = NotificationTemplateAccess(user('user', True)) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_notification_template_get_queryset_orgadmin(notification_template, user): + access = NotificationTemplateAccess(user('admin', False)) + notification_template.organization.admin_role.members.add(user('admin', False)) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_notification_template_get_queryset_org_auditor(notification_template, org_auditor): + access = NotificationTemplateAccess(org_auditor) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_notification_template_access_superuser(notification_template_factory): + nf_objects = notification_template_factory('test-orphaned', organization='test', superusers=['admin']) + admin = nf_objects.superusers.admin + nf = nf_objects.notification_template + + access = NotificationTemplateAccess(admin) + assert access.can_read(nf) + assert access.can_change(nf, None) + assert access.can_delete(nf) + + nf.organization = None + nf.save() + + assert access.can_read(nf) + assert access.can_change(nf, None) + assert access.can_delete(nf) + +@pytest.mark.django_db +def test_notification_template_access_admin(organization_factory, notification_template_factory): + other_objects = organization_factory('other') + present_objects = organization_factory('present', + users=['admin'], + notification_templates=['test-notification'], + roles=['present.admin_role:admin']) + + notification_template = present_objects.notification_templates.test_notification + other_org = other_objects.organization + present_org = present_objects.organization + admin = present_objects.users.admin + + access = NotificationTemplateAccess(admin) + assert not access.can_change(notification_template, {'organization': other_org.id}) + assert access.can_read(notification_template) + assert access.can_change(notification_template, None) + assert access.can_change(notification_template, {'organization': present_org.id}) + assert access.can_delete(notification_template) + + nf = notification_template_factory("test-orphaned") + assert not access.can_read(nf) + assert not access.can_change(nf, None) + assert not access.can_delete(nf) + +@pytest.mark.django_db +def test_notification_template_access_org_user(notification_template, user): + u = user('normal', False) + notification_template.organization.member_role.members.add(u) + access = NotificationTemplateAccess(user('normal', False)) + assert not access.can_read(notification_template) + assert not access.can_change(notification_template, None) + assert not access.can_delete(notification_template) + +@pytest.mark.django_db +def test_notificaiton_template_orphan_access_org_admin(notification_template, organization, org_admin): + notification_template.organization = None + access = NotificationTemplateAccess(org_admin) + assert not access.can_change(notification_template, {'organization': organization.id}) + +@pytest.mark.django_db +def test_notification_access_get_queryset_org_admin(notification, org_admin): + access = NotificationAccess(org_admin) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_notification_access_get_queryset_org_auditor(notification, org_auditor): + access = NotificationAccess(org_auditor) + assert access.get_queryset().count() == 1 + +@pytest.mark.django_db +def test_notification_access_system_admin(notification, admin): + access = NotificationAccess(admin) + assert access.can_read(notification) + assert access.can_delete(notification) + +@pytest.mark.django_db +def test_notification_access_org_admin(notification, org_admin): + access = NotificationAccess(org_admin) + assert access.can_read(notification) + assert access.can_delete(notification) + +@pytest.mark.django_db +def test_notification_access_org_auditor(notification, org_auditor): + access = NotificationAccess(org_auditor) + assert access.can_read(notification) + assert not access.can_delete(notification) diff --git a/awx/main/tests/functional/test_rbac_organization.py b/awx/main/tests/functional/test_rbac_organization.py new file mode 100644 index 0000000000..77558c0e7c --- /dev/null +++ b/awx/main/tests/functional/test_rbac_organization.py @@ -0,0 +1,81 @@ +import mock +import pytest + +from awx.main.migrations import _rbac as rbac +from awx.main.access import ( + BaseAccess, + OrganizationAccess, +) +from django.apps import apps + + +@pytest.mark.django_db +def test_organization_migration_admin(organization, permissions, user): + u = user('admin', False) + organization.deprecated_admins.add(u) + + # Undo some automatic work that we're supposed to be testing with our migration + organization.admin_role.members.remove(u) + assert u not in organization.admin_role + + rbac.migrate_organization(apps, None) + + assert u in organization.admin_role + +@pytest.mark.django_db +def test_organization_migration_user(organization, permissions, user): + u = user('user', False) + organization.deprecated_users.add(u) + + # Undo some automatic work that we're supposed to be testing with our migration + organization.member_role.members.remove(u) + assert u not in organization.read_role + + rbac.migrate_organization(apps, None) + + assert u in organization.read_role + + +@mock.patch.object(BaseAccess, 'check_license', return_value=None) +@pytest.mark.django_db +def test_organization_access_superuser(cl, organization, user): + access = OrganizationAccess(user('admin', True)) + organization.deprecated_users.add(user('user', False)) + + assert access.can_change(organization, None) + assert access.can_delete(organization) + + org = access.get_queryset()[0] + assert len(org.deprecated_admins.all()) == 0 + assert len(org.deprecated_users.all()) == 1 + + +@mock.patch.object(BaseAccess, 'check_license', return_value=None) +@pytest.mark.django_db +def test_organization_access_admin(cl, organization, user): + '''can_change because I am an admin of that org''' + a = user('admin', False) + organization.admin_role.members.add(a) + organization.member_role.members.add(user('user', False)) + + access = OrganizationAccess(a) + assert access.can_change(organization, None) + assert access.can_delete(organization) + + org = access.get_queryset()[0] + assert len(org.admin_role.members.all()) == 1 + assert len(org.member_role.members.all()) == 1 + + +@mock.patch.object(BaseAccess, 'check_license', return_value=None) +@pytest.mark.django_db +def test_organization_access_user(cl, organization, user): + access = OrganizationAccess(user('user', False)) + organization.member_role.members.add(user('user', False)) + + assert not access.can_change(organization, None) + assert not access.can_delete(organization) + + org = access.get_queryset()[0] + assert len(org.admin_role.members.all()) == 0 + assert len(org.member_role.members.all()) == 1 diff --git a/awx/main/tests/functional/test_rbac_project.py b/awx/main/tests/functional/test_rbac_project.py new file mode 100644 index 0000000000..ba88226b2e --- /dev/null +++ b/awx/main/tests/functional/test_rbac_project.py @@ -0,0 +1,219 @@ +import pytest + +from awx.main.migrations import _rbac as rbac +from awx.main.models import Role, Permission, Project, Organization, Credential, JobTemplate, Inventory +from awx.main.access import ProjectAccess +from django.apps import apps +from awx.main.migrations import _old_access as old_access + + +@pytest.mark.django_db +def test_project_migration(): + ''' + + o1 o2 o3 with o1 -- i1 o2 -- i2 + \ | / + \ | / + c1 ---- p1 + / | \ + / | \ + jt1 jt2 jt3 + | | | + i1 i2 i1 + + + goes to + + + o1 + | + | + c1 ---- p1 + / | + / | + jt1 jt3 + | | + i1 i1 + + + o2 + | + | + c1 ---- p2 + | + | + jt2 + | + i2 + + o3 + | + | + c1 ---- p3 + + + ''' + + + o1 = Organization.objects.create(name='o1') + o2 = Organization.objects.create(name='o2') + o3 = Organization.objects.create(name='o3') + + c1 = Credential.objects.create(name='c1') + + project_name = unicode("\xc3\xb4", "utf-8") + p1 = Project.objects.create(name=project_name, credential=c1) + p1.deprecated_organizations.add(o1, o2, o3) + + i1 = Inventory.objects.create(name='i1', organization=o1) + i2 = Inventory.objects.create(name='i2', organization=o2) + + jt1 = JobTemplate.objects.create(name='jt1', project=p1, inventory=i1) + jt2 = JobTemplate.objects.create(name='jt2', project=p1, inventory=i2) + jt3 = JobTemplate.objects.create(name='jt3', project=p1, inventory=i1) + + assert o1.projects.count() == 0 + assert o2.projects.count() == 0 + assert o3.projects.count() == 0 + + rbac.migrate_projects(apps, None) + + jt1 = JobTemplate.objects.get(pk=jt1.pk) + jt2 = JobTemplate.objects.get(pk=jt2.pk) + jt3 = JobTemplate.objects.get(pk=jt3.pk) + + assert jt1.project == jt3.project + assert jt1.project != jt2.project + + assert o1.projects.count() == 1 + assert o2.projects.count() == 1 + assert o3.projects.count() == 1 + assert o1.projects.all()[0].jobtemplates.count() == 2 + assert o2.projects.all()[0].jobtemplates.count() == 1 + assert o3.projects.all()[0].jobtemplates.count() == 0 + +@pytest.mark.django_db +def test_single_org_project_migration(organization): + project = Project.objects.create(name='my project', + description="description", + organization=None) + organization.deprecated_projects.add(project) + assert project.organization is None + rbac.migrate_projects(apps, None) + project = Project.objects.get(id=project.id) + assert project.organization.id == organization.id + +@pytest.mark.django_db +def test_no_org_project_migration(organization): + project = Project.objects.create(name='my project', + description="description", + organization=None) + assert project.organization is None + rbac.migrate_projects(apps, None) + assert project.organization is None + +@pytest.mark.django_db +def test_multi_org_project_migration(): + org1 = Organization.objects.create(name="org1", description="org1 desc") + org2 = Organization.objects.create(name="org2", description="org2 desc") + project = Project.objects.create(name='my project', + description="description", + organization=None) + + assert Project.objects.all().count() == 1 + assert Project.objects.filter(organization=org1).count() == 0 + assert Project.objects.filter(organization=org2).count() == 0 + + project.deprecated_organizations.add(org1) + project.deprecated_organizations.add(org2) + assert project.organization is None + rbac.migrate_projects(apps, None) + assert Project.objects.filter(organization=org1).count() == 1 + assert Project.objects.filter(organization=org2).count() == 1 + + +@pytest.mark.django_db +def test_project_user_project(user_project, project, user): + u = user('owner') + + assert old_access.check_user_access(u, user_project.__class__, 'read', user_project) + assert old_access.check_user_access(u, project.__class__, 'read', project) is False + + assert u not in user_project.read_role + assert u not in project.read_role + rbac.migrate_projects(apps, None) + assert u in user_project.read_role + assert u not in project.read_role + +@pytest.mark.django_db +def test_project_accessible_by_sa(user, project): + u = user('systemadmin', is_superuser=True) + # This gets setup by a signal, but we want to test the migration which will set this up too, so remove it + Role.singleton('system_administrator').members.remove(u) + + assert u not in project.read_role + rbac.migrate_organization(apps, None) + rbac.migrate_users(apps, None) + rbac.migrate_projects(apps, None) + print(project.admin_role.ancestors.all()) + print(project.admin_role.ancestors.all()) + assert u in project.admin_role + +@pytest.mark.django_db +def test_project_org_members(user, organization, project): + admin = user('orgadmin') + member = user('orgmember') + + assert admin not in project.read_role + assert member not in project.read_role + + organization.deprecated_admins.add(admin) + organization.deprecated_users.add(member) + + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + + assert admin in project.admin_role + assert member in project.read_role + +@pytest.mark.django_db +def test_project_team(user, team, project): + nonmember = user('nonmember') + member = user('member') + + team.deprecated_users.add(member) + project.deprecated_teams.add(team) + + assert nonmember not in project.read_role + assert member not in project.read_role + + rbac.migrate_team(apps, None) + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + + assert member in project.read_role + assert nonmember not in project.read_role + +@pytest.mark.django_db +def test_project_explicit_permission(user, team, project, organization): + u = user('prjuser') + + assert old_access.check_user_access(u, project.__class__, 'read', project) is False + + organization.deprecated_users.add(u) + p = Permission(user=u, project=project, permission_type='create', name='Perm name') + p.save() + + assert u not in project.read_role + + rbac.migrate_organization(apps, None) + rbac.migrate_projects(apps, None) + + assert u in project.read_role + +@pytest.mark.django_db +def test_create_project_foreign_org_admin(org_admin, organization, organization_factory): + """Org admins can only create projects in their own org.""" + other_org = organization_factory('not-my-org').organization + access = ProjectAccess(org_admin) + assert not access.can_add({'organization': other_org.pk, 'name': 'new-project'}) diff --git a/awx/main/tests/functional/test_rbac_role.py b/awx/main/tests/functional/test_rbac_role.py new file mode 100644 index 0000000000..613051e395 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_role.py @@ -0,0 +1,32 @@ +import pytest + +from awx.main.access import ( + RoleAccess, + UserAccess, + TeamAccess) + + +@pytest.mark.django_db +def test_team_access_attach(rando, team, inventory): + # rando is admin of the team + team.admin_role.members.add(rando) + inventory.read_role.members.add(rando) + # team has read_role for the inventory + team.member_role.children.add(inventory.read_role) + + access = TeamAccess(rando) + data = {'id': inventory.admin_role.pk} + assert not access.can_attach(team, inventory.admin_role, 'member_role.children', data, False) + +@pytest.mark.django_db +def test_user_access_attach(rando, inventory): + inventory.read_role.members.add(rando) + access = UserAccess(rando) + data = {'id': inventory.admin_role.pk} + assert not access.can_attach(rando, inventory.admin_role, 'roles', data, False) + +@pytest.mark.django_db +def test_role_access_attach(rando, inventory): + inventory.read_role.members.add(rando) + access = RoleAccess(rando) + assert not access.can_attach(inventory.admin_role, rando, 'members', None) diff --git a/awx/main/tests/functional/test_rbac_team.py b/awx/main/tests/functional/test_rbac_team.py new file mode 100644 index 0000000000..0c16ba9f6f --- /dev/null +++ b/awx/main/tests/functional/test_rbac_team.py @@ -0,0 +1,112 @@ +import pytest + +from awx.main.access import TeamAccess +from awx.main.models import Project + + +@pytest.mark.django_db +def test_team_attach_unattach(team, user): + u = user('member', False) + access = TeamAccess(u) + + team.member_role.members.add(u) + assert not access.can_attach(team, u.admin_role, 'member_role.children', None) + assert not access.can_unattach(team, u.admin_role, 'member_role.children') + + team.admin_role.members.add(u) + assert access.can_attach(team, u.admin_role, 'member_role.children', None) + assert access.can_unattach(team, u.admin_role, 'member_role.children') + + u2 = user('non-member', False) + access = TeamAccess(u2) + assert not access.can_attach(team, u2.admin_role, 'member_role.children', None) + assert not access.can_unattach(team, u2.admin_role, 'member_role.chidlren') + +@pytest.mark.django_db +def test_team_access_superuser(team, user): + team.member_role.members.add(user('member', False)) + + access = TeamAccess(user('admin', True)) + + assert access.can_add(None) + assert access.can_change(team, None) + assert access.can_delete(team) + + t = access.get_queryset()[0] + assert len(t.member_role.members.all()) == 1 + assert len(t.organization.admin_role.members.all()) == 0 + +@pytest.mark.django_db +def test_team_access_org_admin(organization, team, user): + a = user('admin', False) + organization.admin_role.members.add(a) + team.organization = organization + team.save() + + access = TeamAccess(a) + assert access.can_add({'organization': organization.pk}) + assert access.can_change(team, None) + assert access.can_delete(team) + + t = access.get_queryset()[0] + assert len(t.member_role.members.all()) == 0 + assert len(t.organization.admin_role.members.all()) == 1 + +@pytest.mark.django_db +def test_team_access_member(organization, team, user): + u = user('member', False) + team.member_role.members.add(u) + team.organization = organization + team.save() + + access = TeamAccess(u) + assert not access.can_add({'organization': organization.pk}) + assert not access.can_change(team, None) + assert not access.can_delete(team) + + t = access.get_queryset()[0] + assert len(t.member_role.members.all()) == 1 + assert len(t.organization.admin_role.members.all()) == 0 + +@pytest.mark.django_db +def test_team_accessible_by(team, user, project): + u = user('team_member', False) + + team.member_role.children.add(project.use_role) + assert team in project.read_role + assert u not in project.read_role + + team.member_role.members.add(u) + assert u in project.read_role + +@pytest.mark.django_db +def test_team_accessible_objects(team, user, project): + u = user('team_member', False) + + team.member_role.children.add(project.use_role) + assert len(Project.accessible_objects(team, 'read_role')) == 1 + assert not Project.accessible_objects(u, 'read_role') + + team.member_role.members.add(u) + assert len(Project.accessible_objects(u, 'read_role')) == 1 + +@pytest.mark.django_db +def test_team_admin_member_access(team, user, project): + u = user('team_admin', False) + team.member_role.children.add(project.use_role) + team.admin_role.members.add(u) + + assert len(Project.accessible_objects(u, 'use_role')) == 1 + + +@pytest.mark.django_db +def test_org_admin_team_access(organization, team, user, project): + u = user('team_admin', False) + organization.admin_role.members.add(u) + + team.organization = organization + team.save() + + team.member_role.children.add(project.use_role) + + assert len(Project.accessible_objects(u, 'use_role')) == 1 diff --git a/awx/main/tests/functional/test_rbac_user.py b/awx/main/tests/functional/test_rbac_user.py new file mode 100644 index 0000000000..c5959a2c32 --- /dev/null +++ b/awx/main/tests/functional/test_rbac_user.py @@ -0,0 +1,77 @@ +import pytest + +from django.apps import apps +from django.contrib.auth.models import User + +from awx.main.migrations import _rbac as rbac +from awx.main.access import UserAccess +from awx.main.models import Role + +@pytest.mark.django_db +def test_user_admin(user_project, project, user): + username = unicode("\xc3\xb4", "utf-8") + + joe = user(username, is_superuser = False) + admin = user('admin', is_superuser = True) + sa = Role.singleton('system_administrator') + + # this should happen automatically with our signal + assert sa.members.filter(id=admin.id).exists() is True + sa.members.remove(admin) + + assert sa.members.filter(id=joe.id).exists() is False + assert sa.members.filter(id=admin.id).exists() is False + + rbac.migrate_users(apps, None) + + # The migration should add the admin back in + assert sa.members.filter(id=joe.id).exists() is False + assert sa.members.filter(id=admin.id).exists() is True + +@pytest.mark.django_db +def test_user_queryset(user): + u = user('pete', False) + + access = UserAccess(u) + qs = access.get_queryset() + assert qs.count() == 1 + +@pytest.mark.django_db +def test_user_accessible_objects(user, organization): + admin = user('admin', False) + u = user('john', False) + assert User.accessible_objects(admin, 'admin_role').count() == 1 + + organization.member_role.members.add(u) + organization.admin_role.members.add(admin) + assert User.accessible_objects(admin, 'admin_role').count() == 2 + + organization.member_role.members.remove(u) + assert User.accessible_objects(admin, 'admin_role').count() == 1 + +@pytest.mark.django_db +def test_org_user_admin(user, organization): + admin = user('orgadmin') + member = user('orgmember') + + organization.member_role.members.add(member) + assert admin not in member.admin_role + + organization.admin_role.members.add(admin) + assert admin in member.admin_role + + organization.admin_role.members.remove(admin) + assert admin not in member.admin_role + +@pytest.mark.django_db +def test_org_user_removed(user, organization): + admin = user('orgadmin') + member = user('orgmember') + + organization.admin_role.members.add(admin) + organization.member_role.members.add(member) + + assert admin in member.admin_role + + organization.member_role.members.remove(member) + assert admin not in member.admin_role diff --git a/awx/main/tests/functional/test_teams.py b/awx/main/tests/functional/test_teams.py new file mode 100644 index 0000000000..eda57579ce --- /dev/null +++ b/awx/main/tests/functional/test_teams.py @@ -0,0 +1,14 @@ +import pytest + + +@pytest.mark.django_db() +def test_admin_not_member(team): + """Test to ensure we don't add admin_role as a parent to team.member_role, as + this creates a cycle with organization administration, which we've decided + to remove support for + + (2016-06-16) I think this might have been resolved. I'm asserting + this to be true in the mean time. + """ + + assert team.admin_role.is_ancestor_of(team.member_role) is True diff --git a/awx/main/tests/ha.py b/awx/main/tests/ha.py deleted file mode 100644 index 4fd0ae1c40..0000000000 --- a/awx/main/tests/ha.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. - -# Python -import mock - -# Django -from django.test import SimpleTestCase - -# AWX -from awx.main.models import * # noqa -from awx.main.ha import * # noqa - -__all__ = ['HAUnitTest',] - -class HAUnitTest(SimpleTestCase): - - @mock.patch('awx.main.models.Instance.objects.count', return_value=2) - def test_multiple_instances(self, ignore): - self.assertTrue(is_ha_environment()) - - @mock.patch('awx.main.models.Instance.objects.count', return_value=1) - def test_db_localhost(self, ignore): - self.assertFalse(is_ha_environment()) - diff --git a/awx/main/tests/jobs/base.py b/awx/main/tests/job_base.py similarity index 78% rename from awx/main/tests/jobs/base.py rename to awx/main/tests/job_base.py index dcb056abb7..d215c0fb25 100644 --- a/awx/main/tests/jobs/base.py +++ b/awx/main/tests/job_base.py @@ -66,69 +66,69 @@ class BaseJobTestMixin(BaseTestMixin): # Alex is Sue's IT assistant who can also administer all of the # organizations. self.user_alex = self.make_user('alex') - self.org_eng.admins.add(self.user_alex) - self.org_sup.admins.add(self.user_alex) - self.org_ops.admins.add(self.user_alex) + self.org_eng.admin_role.members.add(self.user_alex) + self.org_sup.admin_role.members.add(self.user_alex) + self.org_ops.admin_role.members.add(self.user_alex) # Bob is the head of engineering. He's an admin for engineering, but # also a user within the operations organization (so he can see the # results if things go wrong in production). self.user_bob = self.make_user('bob') - self.org_eng.admins.add(self.user_bob) - self.org_ops.users.add(self.user_bob) + self.org_eng.admin_role.members.add(self.user_bob) + self.org_ops.member_role.members.add(self.user_bob) # Chuck is the lead engineer. He has full reign over engineering, but # no other organizations. self.user_chuck = self.make_user('chuck') - self.org_eng.admins.add(self.user_chuck) + self.org_eng.admin_role.members.add(self.user_chuck) # Doug is the other engineer working under Chuck. He can write # playbooks and check them, but Chuck doesn't quite think he's ready to # run them yet. Poor Doug. self.user_doug = self.make_user('doug') - self.org_eng.users.add(self.user_doug) + self.org_eng.member_role.members.add(self.user_doug) # Juan is another engineer working under Chuck. He has a little more freedom # to run playbooks but can't create job templates self.user_juan = self.make_user('juan') - self.org_eng.users.add(self.user_juan) + self.org_eng.member_role.members.add(self.user_juan) # Hannibal is Chuck's right-hand man. Chuck usually has him create the job # templates that the rest of the team will use self.user_hannibal = self.make_user('hannibal') - self.org_eng.users.add(self.user_hannibal) + self.org_eng.member_role.members.add(self.user_hannibal) # Eve is the head of support. She can also see what goes on in # operations to help them troubleshoot problems. self.user_eve = self.make_user('eve') - self.org_sup.admins.add(self.user_eve) - self.org_ops.users.add(self.user_eve) + self.org_sup.admin_role.members.add(self.user_eve) + self.org_ops.member_role.members.add(self.user_eve) # Frank is the other support guy. self.user_frank = self.make_user('frank') - self.org_sup.users.add(self.user_frank) + self.org_sup.member_role.members.add(self.user_frank) # Greg is the head of operations. self.user_greg = self.make_user('greg') - self.org_ops.admins.add(self.user_greg) + self.org_ops.admin_role.members.add(self.user_greg) # Holly is an operations engineer. self.user_holly = self.make_user('holly') - self.org_ops.users.add(self.user_holly) + self.org_ops.member_role.members.add(self.user_holly) # Iris is another operations engineer. self.user_iris = self.make_user('iris') - self.org_ops.users.add(self.user_iris) + self.org_ops.member_role.members.add(self.user_iris) # Randall and Billybob are new ops interns that ops uses to test # their playbooks and inventory self.user_randall = self.make_user('randall') - self.org_ops.users.add(self.user_randall) + self.org_ops.member_role.members.add(self.user_randall) # He works with Randall self.user_billybob = self.make_user('billybob') - self.org_ops.users.add(self.user_billybob) - + self.org_ops.member_role.members.add(self.user_billybob) + # Jim is the newest intern. He can login, but can't do anything quite yet # except make everyone else fresh coffee. self.user_jim = self.make_user('jim') @@ -142,12 +142,12 @@ class BaseJobTestMixin(BaseTestMixin): self.org_eng.projects.add(self.proj_dev) self.proj_test = self.make_project('test', 'testing branch', self.user_sue, TEST_PLAYBOOK) - self.org_eng.projects.add(self.proj_test) + #self.org_eng.projects.add(self.proj_test) # No more multi org projects self.org_sup.projects.add(self.proj_test) self.proj_prod = self.make_project('prod', 'production branch', self.user_sue, TEST_PLAYBOOK) - self.org_eng.projects.add(self.proj_prod) - self.org_sup.projects.add(self.proj_prod) + #self.org_eng.projects.add(self.proj_prod) # No more multi org projects + #self.org_sup.projects.add(self.proj_prod) # No more multi org projects self.org_ops.projects.add(self.proj_prod) # Operations also has 2 additional projects specific to the east/west @@ -216,34 +216,39 @@ class BaseJobTestMixin(BaseTestMixin): self.team_ops_east = self.org_ops.teams.create( name='easterners', created_by=self.user_sue) - self.team_ops_east.projects.add(self.proj_prod) - self.team_ops_east.projects.add(self.proj_prod_east) - self.team_ops_east.users.add(self.user_greg) - self.team_ops_east.users.add(self.user_holly) + self.team_ops_east.member_role.children.add(self.proj_prod.admin_role) + self.team_ops_east.member_role.children.add(self.proj_prod_east.admin_role) + self.team_ops_east.member_role.members.add(self.user_greg) + self.team_ops_east.member_role.members.add(self.user_holly) self.team_ops_west = self.org_ops.teams.create( name='westerners', created_by=self.user_sue) - self.team_ops_west.projects.add(self.proj_prod) - self.team_ops_west.projects.add(self.proj_prod_west) - self.team_ops_west.users.add(self.user_greg) - self.team_ops_west.users.add(self.user_iris) + self.team_ops_west.member_role.children.add(self.proj_prod.admin_role) + self.team_ops_west.member_role.children.add(self.proj_prod_west.admin_role) + self.team_ops_west.member_role.members.add(self.user_greg) + self.team_ops_west.member_role.members.add(self.user_iris) # The south team is no longer active having been folded into the east team - self.team_ops_south = self.org_ops.teams.create( - name='southerners', - created_by=self.user_sue, - active=False, - ) - self.team_ops_south.projects.add(self.proj_prod) - self.team_ops_south.users.add(self.user_greg) + # FIXME: This code can be removed (probably) + # - this case has been removed as we've gotten rid of the active flag, keeping + # code around in case this has ramifications on some test failures.. if + # you find this message and all tests are passing, then feel free to remove this + # - anoek 2016-03-10 + #self.team_ops_south = self.org_ops.teams.create( + # name='southerners', + # created_by=self.user_sue, + # active=False, + #) + #self.team_ops_south.member_role.children.add(self.proj_prod.admin_role) + #self.team_ops_south.member_role.members.add(self.user_greg) # The north team is going to be deleted self.team_ops_north = self.org_ops.teams.create( name='northerners', created_by=self.user_sue, ) - self.team_ops_north.projects.add(self.proj_prod) - self.team_ops_north.users.add(self.user_greg) + self.team_ops_north.member_role.children.add(self.proj_prod.admin_role) + self.team_ops_north.member_role.members.add(self.user_greg) # The testers team are interns that can only check playbooks but can't # run them @@ -251,25 +256,29 @@ class BaseJobTestMixin(BaseTestMixin): name='testers', created_by=self.user_sue, ) - self.team_ops_testers.projects.add(self.proj_prod) - self.team_ops_testers.users.add(self.user_randall) - self.team_ops_testers.users.add(self.user_billybob) + self.team_ops_testers.member_role.children.add(self.proj_prod.admin_role) + self.team_ops_testers.member_role.members.add(self.user_randall) + self.team_ops_testers.member_role.members.add(self.user_billybob) # Each user has his/her own set of credentials. - from awx.main.tests.tasks import (TEST_SSH_KEY_DATA, - TEST_SSH_KEY_DATA_LOCKED, - TEST_SSH_KEY_DATA_UNLOCK) - self.cred_sue = self.user_sue.credentials.create( + from awx.main.tests.data.ssh import (TEST_SSH_KEY_DATA, + TEST_SSH_KEY_DATA_LOCKED, + TEST_SSH_KEY_DATA_UNLOCK) + self.cred_sue = Credential.objects.create( username='sue', password=TEST_SSH_KEY_DATA, created_by=self.user_sue, ) - self.cred_sue_ask = self.user_sue.credentials.create( + self.cred_sue.admin_role.members.add(self.user_sue) + + self.cred_sue_ask = Credential.objects.create( username='sue', password='ASK', created_by=self.user_sue, ) - self.cred_sue_ask_many = self.user_sue.credentials.create( + self.cred_sue_ask.admin_role.members.add(self.user_sue) + + self.cred_sue_ask_many = Credential.objects.create( username='sue', password='ASK', become_method='sudo', @@ -279,23 +288,31 @@ class BaseJobTestMixin(BaseTestMixin): ssh_key_unlock='ASK', created_by=self.user_sue, ) - self.cred_bob = self.user_bob.credentials.create( + self.cred_sue_ask_many.admin_role.members.add(self.user_sue) + + self.cred_bob = Credential.objects.create( username='bob', password='ASK', created_by=self.user_sue, ) - self.cred_chuck = self.user_chuck.credentials.create( + self.cred_bob.use_role.members.add(self.user_bob) + + self.cred_chuck = Credential.objects.create( username='chuck', ssh_key_data=TEST_SSH_KEY_DATA, created_by=self.user_sue, ) - self.cred_doug = self.user_doug.credentials.create( + self.cred_chuck.use_role.members.add(self.user_chuck) + + self.cred_doug = Credential.objects.create( username='doug', password='doug doesn\'t mind his password being saved. this ' 'is why we dont\'t let doug actually run jobs.', created_by=self.user_sue, ) - self.cred_eve = self.user_eve.credentials.create( + self.cred_doug.use_role.members.add(self.user_doug) + + self.cred_eve = Credential.objects.create( username='eve', password='ASK', become_method='sudo', @@ -303,57 +320,78 @@ class BaseJobTestMixin(BaseTestMixin): become_password='ASK', created_by=self.user_sue, ) - self.cred_frank = self.user_frank.credentials.create( + self.cred_eve.use_role.members.add(self.user_eve) + + self.cred_frank = Credential.objects.create( username='frank', password='fr@nk the t@nk', created_by=self.user_sue, ) - self.cred_greg = self.user_greg.credentials.create( + self.cred_frank.use_role.members.add(self.user_frank) + + self.cred_greg = Credential.objects.create( username='greg', ssh_key_data=TEST_SSH_KEY_DATA_LOCKED, ssh_key_unlock='ASK', created_by=self.user_sue, ) - self.cred_holly = self.user_holly.credentials.create( + self.cred_greg.use_role.members.add(self.user_greg) + + self.cred_holly = Credential.objects.create( username='holly', password='holly rocks', created_by=self.user_sue, ) - self.cred_iris = self.user_iris.credentials.create( + self.cred_holly.use_role.members.add(self.user_holly) + + self.cred_iris = Credential.objects.create( username='iris', password='ASK', created_by=self.user_sue, ) + self.cred_iris.use_role.members.add(self.user_iris) # Each operations team also has shared credentials they can use. - self.cred_ops_east = self.team_ops_east.credentials.create( + self.cred_ops_east = Credential.objects.create( username='east', ssh_key_data=TEST_SSH_KEY_DATA_LOCKED, ssh_key_unlock=TEST_SSH_KEY_DATA_UNLOCK, created_by = self.user_sue, ) - self.cred_ops_west = self.team_ops_west.credentials.create( + self.team_ops_east.member_role.children.add(self.cred_ops_east.use_role) + + self.cred_ops_west = Credential.objects.create( username='west', password='Heading270', created_by = self.user_sue, ) - self.cred_ops_south = self.team_ops_south.credentials.create( - username='south', - password='Heading180', - created_by = self.user_sue, - ) + self.team_ops_west.member_role.children.add(self.cred_ops_west.use_role) - self.cred_ops_north = self.team_ops_north.credentials.create( + + # FIXME: This code can be removed (probably) + # - this case has been removed as we've gotten rid of the active flag, keeping + # code around in case this has ramifications on some test failures.. if + # you find this message and all tests are passing, then feel free to remove this + # - anoek 2016-03-10 + #self.cred_ops_south = self.team_ops_south.credentials.create( + # username='south', + # password='Heading180', + # created_by = self.user_sue, + #) + + self.cred_ops_north = Credential.objects.create( username='north', password='Heading0', created_by = self.user_sue, ) + self.team_ops_north.member_role.children.add(self.cred_ops_north.admin_role) - self.cred_ops_test = self.team_ops_testers.credentials.create( + self.cred_ops_test = Credential.objects.create( username='testers', password='HeadingNone', created_by = self.user_sue, ) + self.team_ops_testers.member_role.children.add(self.cred_ops_test.use_role) self.ops_east_permission = Permission.objects.create( inventory = self.inv_ops_east, @@ -429,7 +467,7 @@ class BaseJobTestMixin(BaseTestMixin): #self.permission1 = Permission.objects.create( # inventory = self.inventory, # project = self.project, - # team = self.team, + # team = self.team, # permission_type = PERM_INVENTORY_DEPLOY, # created_by = self.normal_django_user #) @@ -441,7 +479,7 @@ class BaseJobTestMixin(BaseTestMixin): # permission_type = PERM_INVENTORY_CHECK, # created_by = self.normal_django_user #) - + # Engineering has job templates to check/run the dev project onto # their own inventory. self.jt_eng_check = JobTemplate.objects.create( @@ -465,6 +503,7 @@ class BaseJobTestMixin(BaseTestMixin): playbook=self.proj_dev.playbooks[0], host_config_key=uuid.uuid4().hex, created_by=self.user_sue, + ask_credential_on_launch=True, ) # self.job_eng_run = self.jt_eng_run.create_job( # created_by=self.user_sue, diff --git a/awx/main/tests/jobs/__init__.py b/awx/main/tests/jobs/__init__.py deleted file mode 100644 index 092826ccf0..0000000000 --- a/awx/main/tests/jobs/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -from __future__ import absolute_import - -from .jobs_monolithic import * # noqa -from .job_launch import * # noqa -from .job_relaunch import * # noqa -from .survey_password import * # noqa -from .start_cancel import * # noqa -from .base import * # noqa diff --git a/awx/main/tests/licenses.py b/awx/main/tests/licenses.py deleted file mode 100644 index 6703db54cd..0000000000 --- a/awx/main/tests/licenses.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -import json -import os -import tempfile - -from awx.main.models import Host, Inventory, Organization -from awx.main.tests.base import BaseTest -import awx.main.task_engine -from awx.main.task_engine import * # noqa - -class LicenseTests(BaseTest): - - def setUp(self): - self.start_redis() - self.setup_instances() - super(LicenseTests, self).setUp() - self.setup_users() - u = self.super_django_user - org = Organization.objects.create(name='o1', created_by=u) - org.admins.add(self.normal_django_user) - self.inventory = Inventory.objects.create(name='hi', organization=org, created_by=u) - Host.objects.create(name='a1', inventory=self.inventory, created_by=u) - Host.objects.create(name='a2', inventory=self.inventory, created_by=u) - Host.objects.create(name='a3', inventory=self.inventory, created_by=u) - Host.objects.create(name='a4', inventory=self.inventory, created_by=u) - Host.objects.create(name='a5', inventory=self.inventory, created_by=u) - Host.objects.create(name='a6', inventory=self.inventory, created_by=u) - Host.objects.create(name='a7', inventory=self.inventory, created_by=u) - Host.objects.create(name='a8', inventory=self.inventory, created_by=u) - Host.objects.create(name='a9', inventory=self.inventory, created_by=u) - Host.objects.create(name='a10', inventory=self.inventory, created_by=u) - Host.objects.create(name='a11', inventory=self.inventory, created_by=u) - Host.objects.create(name='a12', inventory=self.inventory, created_by=u) - self._temp_task_file = awx.main.task_engine.TEMPORARY_TASK_FILE - self._temp_task_fetch_ami = awx.main.task_engine.TemporaryTaskEngine.fetch_ami - self._temp_task_fetch_instance = awx.main.task_engine.TemporaryTaskEngine.fetch_instance - - def tearDown(self): - awx.main.task_engine.TEMPORARY_TASK_FILE = self._temp_task_file - awx.main.task_engine.TemporaryTaskEngine.fetch_ami = self._temp_task_fetch_ami - awx.main.task_engine.TemporaryTaskEngine.fetch_instance = self._temp_task_fetch_instance - super(LicenseTests, self).tearDown() - self.stop_redis() - - def test_license_writer(self): - - writer = TaskEngager( - company_name='acmecorp', - contact_name='Michael DeHaan', - contact_email='michael@ansibleworks.com', - license_date=25000, # seconds since epoch - instance_count=500) - - data = writer.get_data() - - assert data['instance_count'] == 500 - assert data['contact_name'] == 'Michael DeHaan' - assert data['contact_email'] == 'michael@ansibleworks.com' - assert data['license_date'] == 25000 - assert data['license_key'] == "11bae31f31c6a6cdcb483a278cdbe98bd8ac5761acd7163a50090b0f098b3a13" - - strdata = writer.get_string() - strdata_loaded = json.loads(strdata) - assert strdata_loaded == data - - reader = TaskSerializer() - - vdata = reader.from_string(strdata) - - assert vdata['available_instances'] == 500 - assert vdata['current_instances'] == 12 - assert vdata['free_instances'] == 488 - assert vdata['date_warning'] is True - assert vdata['date_expired'] is True - assert vdata['license_date'] == 25000 - assert vdata['time_remaining'] < 0 - assert vdata['valid_key'] is True - assert vdata['compliant'] is False - assert vdata['subscription_name'] - - def test_expired_licenses(self): - reader = TaskSerializer() - writer = TaskEngager( - company_name='Tower', - contact_name='Tower Admin', - contact_email='tower@ansible.com', - license_date=int(time.time() - 3600), - instance_count=100, - trial=True) - strdata = writer.get_string() - vdata = reader.from_string(strdata) - - assert vdata['compliant'] is False - assert vdata['grace_period_remaining'] < 0 - - writer = TaskEngager( - company_name='Tower', - contact_name='Tower Admin', - contact_email='tower@ansible.com', - license_date=int(time.time() - 2592001), - instance_count=100, - trial=False) - strdata = writer.get_string() - vdata = reader.from_string(strdata) - - assert vdata['compliant'] is False - assert vdata['grace_period_remaining'] < 0 - - writer = TaskEngager( - company_name='Tower', - contact_name='Tower Admin', - contact_email='tower@ansible.com', - license_date=int(time.time() - 3600), - instance_count=100, - trial=False) - strdata = writer.get_string() - vdata = reader.from_string(strdata) - - assert vdata['compliant'] is False - assert vdata['grace_period_remaining'] > 0 - - def test_aws_license(self): - os.environ['AWX_LICENSE_FILE'] = 'non-existent-license-file.json' - h, path = tempfile.mkstemp() - self._temp_paths.append(path) - with os.fdopen(h, 'w') as f: - json.dump({'instance_count': 100}, f) - awx.main.task_engine.TEMPORARY_TASK_FILE = path - - def fetch_ami(_self): - _self.attributes['ami-id'] = 'ami-00000000' - return True - - def fetch_instance(_self): - _self.attributes['instance-id'] = 'i-00000000' - return True - - awx.main.task_engine.TemporaryTaskEngine.fetch_ami = fetch_ami - awx.main.task_engine.TemporaryTaskEngine.fetch_instance = fetch_instance - reader = TaskSerializer() - license = reader.from_file() - self.assertTrue(license['is_aws']) - self.assertTrue(license['time_remaining']) - self.assertTrue(license['free_instances'] > 0) - self.assertTrue(license['grace_period_remaining'] > 0) diff --git a/awx/main/tests/old/README.md b/awx/main/tests/old/README.md new file mode 100644 index 0000000000..92582d890d --- /dev/null +++ b/awx/main/tests/old/README.md @@ -0,0 +1,7 @@ +Old Tests +========= +This are the old django.TestCase / unittest.TestCase tests for Tower. + +No new tests should be added to this folder. Overtime, we will be refactoring +tests out of this folder as py.test tests and into their respective functional +and unit folders. diff --git a/awx/main/tests/ad_hoc.py b/awx/main/tests/old/ad_hoc.py similarity index 75% rename from awx/main/tests/ad_hoc.py rename to awx/main/tests/old/ad_hoc.py index 2b9cfe6866..2c81ec71a0 100644 --- a/awx/main/tests/ad_hoc.py +++ b/awx/main/tests/old/ad_hoc.py @@ -7,6 +7,8 @@ import os import subprocess import tempfile import mock +import unittest2 as unittest + # Django from django.conf import settings @@ -18,8 +20,13 @@ from crum import impersonate # AWX from awx.main.utils import * # noqa from awx.main.models import * # noqa +from awx.main.conf import tower_settings from awx.main.tests.base import BaseJobExecutionTest -from awx.main.tests.tasks import TEST_SSH_KEY_DATA, TEST_SSH_KEY_DATA_LOCKED, TEST_SSH_KEY_DATA_UNLOCK +from awx.main.tests.data.ssh import ( + TEST_SSH_KEY_DATA, + TEST_SSH_KEY_DATA_LOCKED, + TEST_SSH_KEY_DATA_UNLOCK, +) __all__ = ['RunAdHocCommandTest', 'AdHocCommandApiTest'] @@ -34,7 +41,7 @@ class BaseAdHocCommandTest(BaseJobExecutionTest): self.setup_instances() self.setup_users() self.organization = self.make_organizations(self.super_django_user, 1)[0] - self.organization.admins.add(self.normal_django_user) + self.organization.admin_role.members.add(self.normal_django_user) self.inventory = self.organization.inventories.create(name='test-inventory', description='description for test-inventory') self.host = self.inventory.hosts.create(name='host.example.com') self.host2 = self.inventory.hosts.create(name='host2.example.com') @@ -53,6 +60,7 @@ class BaseAdHocCommandTest(BaseJobExecutionTest): return self.credential +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class RunAdHocCommandTest(BaseAdHocCommandTest): ''' Test cases for RunAdHocCommand celery task. @@ -370,6 +378,7 @@ class RunAdHocCommandTest(BaseAdHocCommandTest): def run_pexpect_mock(self, *args, **kwargs): return 'successful', 0 +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class AdHocCommandApiTest(BaseAdHocCommandTest): ''' Test API list/detail views for ad hoc commands. @@ -395,186 +404,6 @@ class AdHocCommandApiTest(BaseAdHocCommandTest): del data[k] return self.post(url, data, expect=expect) - @mock.patch('awx.main.tasks.BaseTask.run_pexpect', side_effect=run_pexpect_mock) - def test_ad_hoc_command_list(self, ignore): - url = reverse('api:ad_hoc_command_list') - - # Retrieve the empty list of ad hoc commands. - qs = AdHocCommand.objects.none() - self.check_get_list(url, 'admin', qs) - self.check_get_list(url, 'normal', qs) - self.check_get_list(url, 'other', qs) - self.check_get_list(url, 'nobody', qs) - self.check_get_list(url, None, qs, expect=401) - - # Start a new ad hoc command. Only admin and normal user (org admin) - # can run commands by default. - with self.current_user('admin'): - response = self.run_test_ad_hoc_command() - self.assertEqual(response['job_type'], 'run') - self.assertEqual(response['inventory'], self.inventory.pk) - self.assertEqual(response['credential'], self.credential.pk) - self.assertEqual(response['module_name'], 'command') - self.assertEqual(response['module_args'], 'uptime') - self.assertEqual(response['limit'], '') - self.assertEqual(response['forks'], 0) - self.assertEqual(response['verbosity'], 0) - self.assertEqual(response['become_enabled'], False) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user('normal'): - self.run_test_ad_hoc_command() - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user('other'): - self.run_test_ad_hoc_command(expect=403) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user('nobody'): - self.run_test_ad_hoc_command(expect=403) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user(None): - self.run_test_ad_hoc_command(expect=401) - self.put(url, {}, expect=401) - self.patch(url, {}, expect=401) - self.delete(url, expect=401) - - # Retrieve the list of ad hoc commands (only admin/normal can see by default). - qs = AdHocCommand.objects.all() - self.assertEqual(qs.count(), 2) - self.check_get_list(url, 'admin', qs) - self.check_get_list(url, 'normal', qs) - qs = AdHocCommand.objects.none() - self.check_get_list(url, 'other', qs) - self.check_get_list(url, 'nobody', qs) - self.check_get_list(url, None, qs, expect=401) - - # Explicitly give other user admin permission on the inventory (still - # not allowed to run ad hoc commands). - user_perm_url = reverse('api:user_permissions_list', args=(self.other_django_user.pk,)) - user_perm_data = { - 'name': 'Allow Other to Admin Inventory', - 'inventory': self.inventory.pk, - 'permission_type': 'admin', - } - with self.current_user('admin'): - response = self.post(user_perm_url, user_perm_data, expect=201) - user_perm_id = response['id'] - with self.current_user('other'): - self.run_test_ad_hoc_command(expect=403) - self.check_get_list(url, 'other', qs) - - # Update permission to allow other user to run ad hoc commands. Fails - # when other user can't read credential. - user_perm_url = reverse('api:permission_detail', args=(user_perm_id,)) - user_perm_data.update({ - 'name': 'Allow Other to Admin Inventory and Run Ad Hoc Commands', - 'run_ad_hoc_commands': True, - }) - with self.current_user('admin'): - response = self.patch(user_perm_url, user_perm_data, expect=200) - with self.current_user('other'): - self.run_test_ad_hoc_command(expect=403) - - # Succeeds once other user has a readable credential. Other user can - # only see his own ad hoc command (because of credential permissions). - other_cred = self.create_test_credential(user=self.other_django_user) - with self.current_user('other'): - self.run_test_ad_hoc_command(credential=other_cred.pk) - qs = AdHocCommand.objects.filter(created_by=self.other_django_user) - self.assertEqual(qs.count(), 1) - self.check_get_list(url, 'other', qs) - - # Explicitly give nobody user read permission on the inventory. - user_perm_url = reverse('api:user_permissions_list', args=(self.nobody_django_user.pk,)) - user_perm_data = { - 'name': 'Allow Nobody to Read Inventory', - 'inventory': self.inventory.pk, - 'permission_type': 'read', - } - with self.current_user('admin'): - response = self.post(user_perm_url, user_perm_data, expect=201) - user_perm_id = response['id'] - with self.current_user('nobody'): - self.run_test_ad_hoc_command(credential=other_cred.pk, expect=403) - self.check_get_list(url, 'other', qs) - - # Create a cred for the nobody user, run an ad hoc command as the admin - # user with that cred. Nobody user can still not see the ad hoc command - # without the run_ad_hoc_commands permission flag. - nobody_cred = self.create_test_credential(user=self.nobody_django_user) - with self.current_user('admin'): - self.run_test_ad_hoc_command(credential=nobody_cred.pk) - qs = AdHocCommand.objects.none() - self.check_get_list(url, 'nobody', qs) - - # Give the nobody user the run_ad_hoc_commands flag, and can now see - # the one ad hoc command previously run. - user_perm_url = reverse('api:permission_detail', args=(user_perm_id,)) - user_perm_data.update({ - 'name': 'Allow Nobody to Read Inventory and Run Ad Hoc Commands', - 'run_ad_hoc_commands': True, - }) - with self.current_user('admin'): - response = self.patch(user_perm_url, user_perm_data, expect=200) - qs = AdHocCommand.objects.filter(credential_id=nobody_cred.pk) - self.assertEqual(qs.count(), 1) - self.check_get_list(url, 'nobody', qs) - - # Post without inventory (should fail). - with self.current_user('admin'): - self.run_test_ad_hoc_command(inventory=None, expect=400) - - # Post without credential (should fail). - with self.current_user('admin'): - self.run_test_ad_hoc_command(credential=None, expect=400) - - # Post with empty or unsupported module name (empty defaults to command). - with self.current_user('admin'): - response = self.run_test_ad_hoc_command(module_name=None) - self.assertEqual(response['module_name'], 'command') - with self.current_user('admin'): - response = self.run_test_ad_hoc_command(module_name='') - self.assertEqual(response['module_name'], 'command') - with self.current_user('admin'): - self.run_test_ad_hoc_command(module_name='transcombobulator', expect=400) - - # Post with empty module args for shell/command modules (should fail), - # empty args for other modules ok. - with self.current_user('admin'): - self.run_test_ad_hoc_command(module_args=None, expect=400) - with self.current_user('admin'): - self.run_test_ad_hoc_command(module_name='shell', module_args=None, expect=400) - with self.current_user('admin'): - self.run_test_ad_hoc_command(module_name='shell', module_args='', expect=400) - with self.current_user('admin'): - self.run_test_ad_hoc_command(module_name='ping', module_args=None) - - # Post with invalid values for other parameters. - with self.current_user('admin'): - self.run_test_ad_hoc_command(job_type='something', expect=400) - with self.current_user('admin'): - response = self.run_test_ad_hoc_command(job_type='check') - self.assertEqual(response['job_type'], 'check') - with self.current_user('admin'): - self.run_test_ad_hoc_command(verbosity=-1, expect=400) - with self.current_user('admin'): - self.run_test_ad_hoc_command(forks=-1, expect=400) - with self.current_user('admin'): - response = self.run_test_ad_hoc_command(become_enabled=True) - self.assertEqual(response['become_enabled'], True) - - # Try to run with expired license. - self.create_expired_license_file() - with self.current_user('admin'): - self.run_test_ad_hoc_command(expect=403) - with self.current_user('normal'): - self.run_test_ad_hoc_command(expect=403) @mock.patch('awx.main.tasks.BaseTask.run_pexpect', side_effect=run_pexpect_mock) def test_ad_hoc_command_detail(self, ignore): @@ -632,8 +461,8 @@ class AdHocCommandApiTest(BaseAdHocCommandTest): # Verify that the credential and inventory are null when they have # been deleted, can delete an ad hoc command without inventory or # credential. - self.credential.mark_inactive() - self.inventory.mark_inactive() + self.credential.delete() + self.inventory.delete() with self.current_user('admin'): response = self.get(url, expect=200) self.assertEqual(response['credential'], None) @@ -742,14 +571,18 @@ class AdHocCommandApiTest(BaseAdHocCommandTest): # Try to relaunch ad hoc command when module has been removed from # allowed list of modules. - with self.settings(AD_HOC_COMMANDS=[]): + try: + ad_hoc_commands = tower_settings.AD_HOC_COMMANDS + tower_settings.AD_HOC_COMMANDS = [] with self.current_user('admin'): response = self.get(url, expect=200) self.assertEqual(response['passwords_needed_to_start'], []) response = self.post(url, {}, expect=400) + finally: + tower_settings.AD_HOC_COMMANDS = ad_hoc_commands # Try to relaunch after the inventory has been marked inactive. - self.inventory.mark_inactive() + self.inventory.delete() with self.current_user('admin'): response = self.get(url, expect=200) self.assertEqual(response['passwords_needed_to_start'], []) @@ -938,7 +771,7 @@ class AdHocCommandApiTest(BaseAdHocCommandTest): self.delete(url, expect=405) with self.current_user('normal'): response = self.get(url, expect=200) - #self.assertEqual(response['count'], 1) # FIXME: Enable once activity stream RBAC is fixed. + self.assertEqual(response['count'], 1) self.post(url, {}, expect=405) self.put(url, {}, expect=405) self.patch(url, {}, expect=405) @@ -962,115 +795,6 @@ class AdHocCommandApiTest(BaseAdHocCommandTest): self.patch(url, {}, expect=401) self.delete(url, expect=401) - @mock.patch('awx.main.tasks.BaseTask.run_pexpect', side_effect=run_pexpect_mock) - def test_inventory_ad_hoc_commands_list(self, ignore): - with self.current_user('admin'): - response = self.run_test_ad_hoc_command() - response = self.run_test_ad_hoc_command(inventory=self.inventory2.pk) - - # Test the ad hoc commands list for an inventory. Should only return - # the ad hoc command(s) run against that inventory. Posting should - # start a new ad hoc command and always set the inventory from the URL. - url = reverse('api:inventory_ad_hoc_commands_list', args=(self.inventory.pk,)) - inventory_url = reverse('api:inventory_detail', args=(self.inventory.pk,)) - with self.current_user('admin'): - response = self.get(url, expect=200) - self.assertEqual(response['count'], 1) - response = self.run_test_ad_hoc_command(url=url, inventory=None, expect=201) - self.assertEqual(response['inventory'], self.inventory.pk) - response = self.run_test_ad_hoc_command(url=url, inventory=self.inventory2.pk, expect=201) - self.assertEqual(response['inventory'], self.inventory.pk) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - response = self.get(inventory_url, expect=200) - self.assertTrue(response['can_run_ad_hoc_commands']) - with self.current_user('normal'): - response = self.get(url, expect=200) - self.assertEqual(response['count'], 3) - response = self.run_test_ad_hoc_command(url=url, inventory=None, expect=201) - self.assertEqual(response['inventory'], self.inventory.pk) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - response = self.get(inventory_url, expect=200) - self.assertTrue(response['can_run_ad_hoc_commands']) - with self.current_user('other'): - self.get(url, expect=403) - self.post(url, {}, expect=403) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user('nobody'): - self.get(url, expect=403) - self.post(url, {}, expect=403) - self.put(url, {}, expect=405) - self.patch(url, {}, expect=405) - self.delete(url, expect=405) - with self.current_user(None): - self.get(url, expect=401) - self.post(url, {}, expect=401) - self.put(url, {}, expect=401) - self.patch(url, {}, expect=401) - self.delete(url, expect=401) - - # Create another unrelated inventory permission with run_ad_hoc_commands - # set; this tests an edge case in the RBAC query where we'll return - # can_run_ad_hoc_commands = True when we shouldn't. - nobody_perm_url = reverse('api:user_permissions_list', args=(self.nobody_django_user.pk,)) - nobody_perm_data = { - 'name': 'Allow Nobody to Read Inventory', - 'inventory': self.inventory.pk, - 'permission_type': 'read', - 'run_ad_hoc_commands': True, - } - with self.current_user('admin'): - response = self.post(nobody_perm_url, nobody_perm_data, expect=201) - - # Create a credential for the other user and explicitly give other - # user admin permission on the inventory (still not allowed to run ad - # hoc commands; can get the list but can't see any items). - other_cred = self.create_test_credential(user=self.other_django_user) - user_perm_url = reverse('api:user_permissions_list', args=(self.other_django_user.pk,)) - user_perm_data = { - 'name': 'Allow Other to Admin Inventory', - 'inventory': self.inventory.pk, - 'permission_type': 'admin', - } - with self.current_user('admin'): - response = self.post(user_perm_url, user_perm_data, expect=201) - user_perm_id = response['id'] - with self.current_user('other'): - response = self.get(url, expect=200) - self.assertEqual(response['count'], 0) - response = self.get(inventory_url, expect=200) - self.assertFalse(response['can_run_ad_hoc_commands']) - self.run_test_ad_hoc_command(url=url, inventory=None, credential=other_cred.pk, expect=403) - - # Update permission to allow other user to run ad hoc commands. Can - # only see his own ad hoc commands (because of credential permission). - user_perm_url = reverse('api:permission_detail', args=(user_perm_id,)) - user_perm_data.update({ - 'name': 'Allow Other to Admin Inventory and Run Ad Hoc Commands', - 'run_ad_hoc_commands': True, - }) - with self.current_user('admin'): - response = self.patch(user_perm_url, user_perm_data, expect=200) - with self.current_user('other'): - response = self.get(url, expect=200) - self.assertEqual(response['count'], 0) - self.run_test_ad_hoc_command(url=url, inventory=None, credential=other_cred.pk, expect=201) - response = self.get(url, expect=200) - self.assertEqual(response['count'], 1) - response = self.get(inventory_url, expect=200) - self.assertTrue(response['can_run_ad_hoc_commands']) - - # Try to run with expired license. - self.create_expired_license_file() - with self.current_user('admin'): - self.run_test_ad_hoc_command(url=url, expect=403) - with self.current_user('normal'): - self.run_test_ad_hoc_command(url=url, expect=403) def test_host_ad_hoc_commands_list(self): # TODO: Figure out why this test needs pexpect diff --git a/awx/api/tests/decorator_paginated.py b/awx/main/tests/old/api/decorator_paginated.py similarity index 100% rename from awx/api/tests/decorator_paginated.py rename to awx/main/tests/old/api/decorator_paginated.py diff --git a/awx/api/tests/job_tasks.py b/awx/main/tests/old/api/job_tasks.py similarity index 90% rename from awx/api/tests/job_tasks.py rename to awx/main/tests/old/api/job_tasks.py index 36c7eb6fb0..2471f9e614 100644 --- a/awx/api/tests/job_tasks.py +++ b/awx/main/tests/old/api/job_tasks.py @@ -1,13 +1,17 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. +import os +import unittest2 as unittest + from django.conf import settings from django.test import LiveServerTestCase from django.test.utils import override_settings -from awx.main.tests.jobs import BaseJobTestMixin +from awx.main.tests.job_base import BaseJobTestMixin +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, ANSIBLE_TRANSPORT='local') diff --git a/awx/main/tests/commands/base.py b/awx/main/tests/old/commands/command_base.py similarity index 100% rename from awx/main/tests/commands/base.py rename to awx/main/tests/old/commands/command_base.py diff --git a/awx/main/tests/commands/commands_monolithic.py b/awx/main/tests/old/commands/commands_monolithic.py similarity index 82% rename from awx/main/tests/commands/commands_monolithic.py rename to awx/main/tests/old/commands/commands_monolithic.py index d13bbe05f2..39632673c1 100644 --- a/awx/main/tests/commands/commands_monolithic.py +++ b/awx/main/tests/old/commands/commands_monolithic.py @@ -14,9 +14,7 @@ import urlparse import unittest2 as unittest # Django -import django from django.conf import settings -from django.contrib.auth.models import User from django.core.management import call_command from django.core.management.base import CommandError from django.utils.timezone import now @@ -110,6 +108,7 @@ grandchild parent ''' + class BaseCommandMixin(object): ''' Base class for tests that run management commands. @@ -193,32 +192,23 @@ class CreateDefaultOrgTest(BaseCommandMixin, BaseTest): def setUp(self): super(CreateDefaultOrgTest, self).setUp() + self.setup_instances() def test_create_default_org(self): self.setup_users() self.assertEqual(Organization.objects.count(), 0) - result, stdout, stderr = self.run_command('create_default_org') + result, stdout, stderr = self.run_command('create_preload_data') self.assertEqual(result, None) self.assertTrue('Default organization added' in stdout) self.assertEqual(Organization.objects.count(), 1) org = Organization.objects.all()[0] self.assertEqual(org.created_by, self.super_django_user) self.assertEqual(org.modified_by, self.super_django_user) - result, stdout, stderr = self.run_command('create_default_org') + result, stdout, stderr = self.run_command('create_preload_data') self.assertEqual(result, None) self.assertFalse('Default organization added' in stdout) self.assertEqual(Organization.objects.count(), 1) - def test_create_default_org_when_no_superuser_exists(self): - self.assertEqual(Organization.objects.count(), 0) - result, stdout, stderr = self.run_command('create_default_org') - self.assertEqual(result, None) - self.assertTrue('Default organization added' in stdout) - self.assertEqual(Organization.objects.count(), 1) - org = Organization.objects.all()[0] - self.assertEqual(org.created_by, None) - self.assertEqual(org.modified_by, None) - class DumpDataTest(BaseCommandMixin, BaseTest): ''' Test cases for dumpdata management command. @@ -233,126 +223,6 @@ class DumpDataTest(BaseCommandMixin, BaseTest): self.assertEqual(result, None) json.loads(stdout) -class CleanupDeletedTest(BaseCommandMixin, BaseTest): - ''' - Test cases for cleanup_deleted management command. - ''' - - def setUp(self): - self.start_redis() - super(CleanupDeletedTest, self).setUp() - self.create_test_inventories() - - def tearDown(self): - super(CleanupDeletedTest, self).tearDown() - self.stop_redis() - - def get_model_counts(self): - def get_models(m): - if not m._meta.abstract: - yield m - for sub in m.__subclasses__(): - for subm in get_models(sub): - yield subm - counts = {} - for model in get_models(PrimordialModel): - active = model.objects.filter(active=True).count() - inactive = model.objects.filter(active=False).count() - counts[model] = (active, inactive) - return counts - - def test_cleanup_our_models(self): - # Test with nothing to be deleted. - counts_before = self.get_model_counts() - self.assertFalse(sum(x[1] for x in counts_before.values())) - result, stdout, stderr = self.run_command('cleanup_deleted') - self.assertEqual(result, None) - counts_after = self.get_model_counts() - self.assertEqual(counts_before, counts_after) - # "Delete" some hosts. - for host in Host.objects.all(): - host.mark_inactive() - # With no parameters, "days" defaults to 90, which won't cleanup any of - # the hosts we just removed. - counts_before = self.get_model_counts() - self.assertTrue(sum(x[1] for x in counts_before.values())) - result, stdout, stderr = self.run_command('cleanup_deleted') - self.assertEqual(result, None) - counts_after = self.get_model_counts() - self.assertEqual(counts_before, counts_after) - # Even with days=1, the hosts will remain. - counts_before = self.get_model_counts() - self.assertTrue(sum(x[1] for x in counts_before.values())) - result, stdout, stderr = self.run_command('cleanup_deleted', days=1) - self.assertEqual(result, None) - counts_after = self.get_model_counts() - self.assertEqual(counts_before, counts_after) - # With days=0, the hosts will be deleted. - counts_before = self.get_model_counts() - self.assertTrue(sum(x[1] for x in counts_before.values())) - result, stdout, stderr = self.run_command('cleanup_deleted', days=0) - self.assertEqual(result, None) - counts_after = self.get_model_counts() - self.assertNotEqual(counts_before, counts_after) - self.assertFalse(sum(x[1] for x in counts_after.values())) - return # Don't test how long it takes (for now). - - # Create lots of hosts already marked as deleted. - t = time.time() - dtnow = now() - for x in xrange(1000): - hostname = "_deleted_%s_host-%d" % (dtnow.isoformat(), x) - host = self.inventories[0].hosts.create(name=hostname, active=False) - create_elapsed = time.time() - t - - # Time how long it takes to cleanup deleted items, should be no more - # then the time taken to create them. - counts_before = self.get_model_counts() - self.assertTrue(sum(x[1] for x in counts_before.values())) - t = time.time() - result, stdout, stderr = self.run_command('cleanup_deleted', days=0) - cleanup_elapsed = time.time() - t - self.assertEqual(result, None) - counts_after = self.get_model_counts() - self.assertNotEqual(counts_before, counts_after) - self.assertFalse(sum(x[1] for x in counts_after.values())) - self.assertTrue(cleanup_elapsed < create_elapsed, - 'create took %0.3fs, cleanup took %0.3fs, expected < %0.3fs' % (create_elapsed, cleanup_elapsed, create_elapsed)) - - def get_user_counts(self): - active = User.objects.filter(is_active=True).count() - inactive = User.objects.filter(is_active=False).count() - return active, inactive - - def test_cleanup_user_model(self): - # Test with nothing to be deleted. - counts_before = self.get_user_counts() - self.assertFalse(counts_before[1]) - result, stdout, stderr = self.run_command('cleanup_deleted') - self.assertEqual(result, None) - counts_after = self.get_user_counts() - self.assertEqual(counts_before, counts_after) - # "Delete some users". - for user in User.objects.all(): - user.mark_inactive() - self.assertTrue(len(user.username) <= 30, - 'len(%r) == %d' % (user.username, len(user.username))) - # With days=1, no users will be deleted. - counts_before = self.get_user_counts() - self.assertTrue(counts_before[1]) - result, stdout, stderr = self.run_command('cleanup_deleted', days=1) - self.assertEqual(result, None) - counts_after = self.get_user_counts() - self.assertEqual(counts_before, counts_after) - # With days=0, inactive users will be deleted. - counts_before = self.get_user_counts() - self.assertTrue(counts_before[1]) - result, stdout, stderr = self.run_command('cleanup_deleted', days=0) - self.assertEqual(result, None) - counts_after = self.get_user_counts() - self.assertNotEqual(counts_before, counts_after) - self.assertFalse(counts_after[1]) - @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, ANSIBLE_TRANSPORT='local') @@ -471,7 +341,7 @@ class CleanupJobsTest(BaseCommandMixin, BaseLiveServerTest): self.assertTrue(ad_hoc_command.signal_start()) ad_hoc_command = AdHocCommand.objects.get(pk=ad_hoc_command.pk) self.assertEqual(ad_hoc_command.status, 'successful') - + # With days=1, no jobs will be deleted. jobs_before = Job.objects.all().count() self.assertTrue(jobs_before) @@ -512,6 +382,7 @@ class CleanupJobsTest(BaseCommandMixin, BaseLiveServerTest): self.assertFalse(ad_hoc_commands_after) +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class CleanupActivityStreamTest(BaseCommandMixin, BaseTest): ''' Test cases for cleanup_activitystream management command. @@ -578,6 +449,7 @@ class CleanupActivityStreamTest(BaseCommandMixin, BaseTest): 'create took %0.3fs, cleanup took %0.3fs, expected < %0.3fs' % (create_elapsed, cleanup_elapsed, create_elapsed / 4)) +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): ''' Test cases for inventory_import management command. @@ -642,12 +514,12 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertEqual(inventory_source.inventory_updates.count(), 1) inventory_update = inventory_source.inventory_updates.all()[0] self.assertEqual(inventory_update.status, 'successful') - for host in inventory.hosts.filter(active=True): + for host in inventory.hosts.all(): if host.pk in (except_host_pks or []): continue source_pks = host.inventory_sources.values_list('pk', flat=True) self.assertTrue(inventory_source.pk in source_pks) - for group in inventory.groups.filter(active=True): + for group in inventory.groups.all(): if group.pk in (except_group_pks or []): continue source_pks = group.inventory_sources.values_list('pk', flat=True) @@ -690,7 +562,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertTrue('required' in str(result)) # Inventory ID, with invalid source. invalid_source = ''.join([os.path.splitext(self.ini_path)[0] + '-invalid', - os.path.splitext(self.ini_path)[1]]) + os.path.splitext(self.ini_path)[1]]) result, stdout, stderr = self.run_command('inventory_import', inventory_id=inventory_id, source=invalid_source) @@ -766,7 +638,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertEqual(group.children.count(), 0) hosts = set(group.hosts.values_list('name', flat=True)) host_names = set(['db1.example.com','db2.example.com']) - self.assertEqual(hosts, host_names) + self.assertEqual(hosts, host_names) elif group.name == 'webservers': self.assertEqual(group.variables_dict, {'webvar': 'blah'}) self.assertEqual(group.children.count(), 0) @@ -815,7 +687,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): 'lbservers', 'others']) if overwrite: expected_group_names.remove('lbservers') - group_names = set(new_inv.groups.filter(active=True).values_list('name', flat=True)) + group_names = set(new_inv.groups.values_list('name', flat=True)) self.assertEqual(expected_group_names, group_names) expected_host_names = set(['web1.example.com', 'web2.example.com', 'web3.example.com', 'db1.example.com', @@ -825,13 +697,13 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): 'fe80::1610:9fff:fedd:b654', '::1']) if overwrite: expected_host_names.remove('lb.example.com') - host_names = set(new_inv.hosts.filter(active=True).values_list('name', flat=True)) + host_names = set(new_inv.hosts.values_list('name', flat=True)) self.assertEqual(expected_host_names, host_names) expected_inv_vars = {'vara': 'A', 'varc': 'C'} if overwrite_vars: expected_inv_vars.pop('varc') self.assertEqual(new_inv.variables_dict, expected_inv_vars) - for host in new_inv.hosts.filter(active=True): + for host in new_inv.hosts.all(): if host.name == 'web1.example.com': self.assertEqual(host.variables_dict, {'ansible_ssh_host': 'w1.example.net'}) @@ -843,35 +715,35 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertEqual(host.variables_dict, {'lbvar': 'ni!'}) else: self.assertEqual(host.variables_dict, {}) - for group in new_inv.groups.filter(active=True): + for group in new_inv.groups.all(): if group.name == 'servers': expected_vars = {'varb': 'B', 'vard': 'D'} if overwrite_vars: expected_vars.pop('vard') self.assertEqual(group.variables_dict, expected_vars) - children = set(group.children.filter(active=True).values_list('name', flat=True)) + children = set(group.children.values_list('name', flat=True)) expected_children = set(['dbservers', 'webservers', 'lbservers']) if overwrite: expected_children.remove('lbservers') self.assertEqual(children, expected_children) - self.assertEqual(group.hosts.filter(active=True).count(), 0) + self.assertEqual(group.hosts.count(), 0) elif group.name == 'dbservers': self.assertEqual(group.variables_dict, {'dbvar': 'ugh'}) - self.assertEqual(group.children.filter(active=True).count(), 0) - hosts = set(group.hosts.filter(active=True).values_list('name', flat=True)) + self.assertEqual(group.children.count(), 0) + hosts = set(group.hosts.values_list('name', flat=True)) host_names = set(['db1.example.com','db2.example.com']) - self.assertEqual(hosts, host_names) + self.assertEqual(hosts, host_names) elif group.name == 'webservers': self.assertEqual(group.variables_dict, {'webvar': 'blah'}) - self.assertEqual(group.children.filter(active=True).count(), 0) - hosts = set(group.hosts.filter(active=True).values_list('name', flat=True)) + self.assertEqual(group.children.count(), 0) + hosts = set(group.hosts.values_list('name', flat=True)) host_names = set(['web1.example.com','web2.example.com', 'web3.example.com']) self.assertEqual(hosts, host_names) elif group.name == 'lbservers': self.assertEqual(group.variables_dict, {}) - self.assertEqual(group.children.filter(active=True).count(), 0) - hosts = set(group.hosts.filter(active=True).values_list('name', flat=True)) + self.assertEqual(group.children.count(), 0) + hosts = set(group.hosts.values_list('name', flat=True)) host_names = set(['lb.example.com']) self.assertEqual(hosts, host_names) if overwrite: @@ -921,7 +793,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): # Check hosts in dotcom group. group = new_inv.groups.get(name='dotcom') self.assertEqual(group.hosts.count(), 65) - for host in group.hosts.filter(active=True, name__startswith='web'): + for host in group.hosts.filter( name__startswith='web'): self.assertEqual(host.variables_dict.get('ansible_ssh_user', ''), 'example') # Check hosts in dotnet group. group = new_inv.groups.get(name='dotnet') @@ -929,7 +801,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): # Check hosts in dotorg group. group = new_inv.groups.get(name='dotorg') self.assertEqual(group.hosts.count(), 61) - for host in group.hosts.filter(active=True): + for host in group.hosts.all(): if host.name.startswith('mx.'): continue self.assertEqual(host.variables_dict.get('ansible_ssh_user', ''), 'example') @@ -937,7 +809,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): # Check hosts in dotus group. group = new_inv.groups.get(name='dotus') self.assertEqual(group.hosts.count(), 10) - for host in group.hosts.filter(active=True): + for host in group.hosts.all(): if int(host.name[2:4]) % 2 == 0: self.assertEqual(host.variables_dict.get('even_odd', ''), 'even') else: @@ -1013,8 +885,8 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): rest_api_url = urlparse.urlunsplit([parts.scheme, netloc, parts.path, parts.query, parts.fragment]) os.environ.setdefault('REST_API_URL', rest_api_url) - os.environ['INVENTORY_ID'] = str(old_inv.pk) - source = os.path.join(os.path.dirname(__file__), '..', '..', '..', 'plugins', + os.environ['INVENTORY_ID'] = str(old_inv.pk) + source = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'plugins', 'inventory', 'awxrest.py') result, stdout, stderr = self.run_command('inventory_import', inventory_id=new_inv.pk, @@ -1051,7 +923,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): new_inv = self.organizations[0].inventories.create(name='newec2') self.assertEqual(new_inv.hosts.count(), 0) self.assertEqual(new_inv.groups.count(), 0) - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'data')) + os.chdir(os.path.join(os.path.dirname(__file__), '..', '..', 'data')) inv_file = 'large_ec2_inventory.py' result, stdout, stderr = self.run_command('inventory_import', inventory_id=new_inv.pk, @@ -1064,28 +936,7 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertNotEqual(new_inv.groups.count(), 0) self.assertNotEqual(new_inv.total_hosts, 0) self.assertNotEqual(new_inv.total_groups, 0) - self.assertElapsedLessThan(30) - - @unittest.skipIf(hasattr(django.db.backend, 'sqlite3'), - 'Skip this test if we are on sqlite') - def test_splunk_inventory(self): - new_inv = self.organizations[0].inventories.create(name='splunk') - self.assertEqual(new_inv.hosts.count(), 0) - self.assertEqual(new_inv.groups.count(), 0) - inv_file = os.path.join(os.path.dirname(__file__), '..', 'data', - 'splunk_inventory.py') - result, stdout, stderr = self.run_command('inventory_import', - inventory_id=new_inv.pk, - source=inv_file, verbosity=0) - self.assertEqual(result, None, stdout + stderr) - # Check that inventory is populated as expected within a reasonable - # amount of time. Computed fields should also be updated. - new_inv = Inventory.objects.get(pk=new_inv.pk) - self.assertNotEqual(new_inv.hosts.count(), 0) - self.assertNotEqual(new_inv.groups.count(), 0) - self.assertNotEqual(new_inv.total_hosts, 0) - self.assertNotEqual(new_inv.total_groups, 0) - self.assertElapsedLessThan(120) + self.assertElapsedLessThan(60) def _get_ngroups_for_nhosts(self, n): if n > 0: @@ -1093,9 +944,9 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): else: return 0 - def _check_largeinv_import(self, new_inv, nhosts, nhosts_inactive=0): + def _check_largeinv_import(self, new_inv, nhosts): self._start_time = time.time() - inv_file = os.path.join(os.path.dirname(__file__), '..', 'data', 'largeinv.py') + inv_file = os.path.join(os.path.dirname(__file__), '..', '..', 'data', 'largeinv.py') ngroups = self._get_ngroups_for_nhosts(nhosts) os.environ['NHOSTS'] = str(nhosts) result, stdout, stderr = self.run_command('inventory_import', @@ -1106,12 +957,11 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): # Check that inventory is populated as expected within a reasonable # amount of time. Computed fields should also be updated. new_inv = Inventory.objects.get(pk=new_inv.pk) - self.assertEqual(new_inv.hosts.filter(active=True).count(), nhosts) - self.assertEqual(new_inv.groups.filter(active=True).count(), ngroups) - self.assertEqual(new_inv.hosts.filter(active=False).count(), nhosts_inactive) + self.assertEqual(new_inv.hosts.count(), nhosts) + self.assertEqual(new_inv.groups.count(), ngroups) self.assertEqual(new_inv.total_hosts, nhosts) self.assertEqual(new_inv.total_groups, ngroups) - self.assertElapsedLessThan(45) + self.assertElapsedLessThan(120) @unittest.skipIf(getattr(settings, 'LOCAL_DEVELOPMENT', False), 'Skip this test in local development environments, ' @@ -1122,10 +972,10 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): self.assertEqual(new_inv.groups.count(), 0) nhosts = 2000 # Test initial import into empty inventory. - self._check_largeinv_import(new_inv, nhosts, 0) + self._check_largeinv_import(new_inv, nhosts) # Test re-importing and overwriting. - self._check_largeinv_import(new_inv, nhosts, 0) + self._check_largeinv_import(new_inv, nhosts) # Test re-importing with only half as many hosts. - self._check_largeinv_import(new_inv, nhosts / 2, nhosts / 2) + self._check_largeinv_import(new_inv, nhosts / 2) # Test re-importing that clears all hosts. - self._check_largeinv_import(new_inv, 0, nhosts) + self._check_largeinv_import(new_inv, 0) diff --git a/awx/main/tests/commands/run_socketio_service.py b/awx/main/tests/old/commands/run_socketio_service.py similarity index 100% rename from awx/main/tests/commands/run_socketio_service.py rename to awx/main/tests/old/commands/run_socketio_service.py diff --git a/awx/main/tests/inventory.py b/awx/main/tests/old/inventory.py similarity index 86% rename from awx/main/tests/inventory.py rename to awx/main/tests/old/inventory.py index de7149df3e..efa952e64a 100644 --- a/awx/main/tests/inventory.py +++ b/awx/main/tests/old/inventory.py @@ -2,19 +2,19 @@ # All Rights Reserved. # Python -import datetime import glob import json import os import re import tempfile import time +import unittest2 as unittest + # Django from django.conf import settings from django.core.urlresolvers import reverse from django.test.utils import override_settings -from django.utils.timezone import now # AWX from awx.main.models import * # noqa @@ -39,6 +39,7 @@ inventory['group-\u037c\u03b4\u0138\u0137\u03cd\u03a1\u0121\u0137\u0138\u01a1']. print json.dumps(inventory) """ +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class InventoryTest(BaseTest): def setUp(self): @@ -47,9 +48,9 @@ class InventoryTest(BaseTest): self.setup_instances() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 3) - self.organizations[0].admins.add(self.normal_django_user) - self.organizations[0].users.add(self.other_django_user) - self.organizations[0].users.add(self.normal_django_user) + self.organizations[0].admin_role.members.add(self.normal_django_user) + self.organizations[0].member_role.members.add(self.other_django_user) + self.organizations[0].member_role.members.add(self.normal_django_user) self.inventory_a = Inventory.objects.create(name='inventory-a', description='foo', organization=self.organizations[0]) self.inventory_b = Inventory.objects.create(name='inventory-b', description='bar', organization=self.organizations[1]) @@ -58,10 +59,7 @@ class InventoryTest(BaseTest): # create a permission here on the 'other' user so they have edit access on the org # we may add another permission type later. - self.perm_read = Permission.objects.create( - inventory = self.inventory_b, - user = self.other_django_user, - permission_type = 'read') + self.inventory_b.read_role.members.add(self.other_django_user) def tearDown(self): super(InventoryTest, self).tearDown() @@ -69,7 +67,7 @@ class InventoryTest(BaseTest): def test_get_inventory_list(self): url = reverse('api:inventory_list') - qs = Inventory.objects.filter(active=True).distinct() + qs = Inventory.objects.distinct() # Check list view with invalid authentication. self.check_invalid_auth(url) @@ -78,11 +76,11 @@ class InventoryTest(BaseTest): self.check_get_list(url, self.super_django_user, qs) # an org admin can list inventories but is filtered to what he adminsters - normal_qs = qs.filter(organization__admins__in=[self.normal_django_user]) + normal_qs = qs.filter(organization__admin_role__members=self.normal_django_user) self.check_get_list(url, self.normal_django_user, normal_qs) # a user who is on a team who has a read permissions on an inventory can see filtered inventories - other_qs = qs.filter(permissions__user__in=[self.other_django_user]) + other_qs = Inventory.accessible_objects(self.other_django_user, 'read_role').distinct() self.check_get_list(url, self.other_django_user, other_qs) # a regular user not part of anything cannot see any inventories @@ -151,11 +149,11 @@ class InventoryTest(BaseTest): def test_put_inventory_detail(self): url_a = reverse('api:inventory_detail', args=(self.inventory_a.pk,)) url_b = reverse('api:inventory_detail', args=(self.inventory_b.pk,)) - + # Check put to detail view with invalid authentication. self.check_invalid_auth(url_a, methods=('put',)) self.check_invalid_auth(url_b, methods=('put',)) - + # a super user can update inventory records with self.current_user(self.super_django_user): data = self.get(url_a, expect=200) @@ -200,7 +198,7 @@ class InventoryTest(BaseTest): self.put(url_a, data, expect=403) # Via AC-376: - # Create an inventory. Leave the description empty. + # Create an inventory. Leave the description empty. # Edit the new inventory, change the Name, click Save. list_url = reverse('api:inventory_list') new_data = dict(name='inventory-c', description='', @@ -220,13 +218,15 @@ class InventoryTest(BaseTest): def test_delete_inventory_detail(self): url_a = reverse('api:inventory_detail', args=(self.inventory_a.pk,)) url_b = reverse('api:inventory_detail', args=(self.inventory_b.pk,)) - + # Create test hosts and groups within each inventory. self.inventory_a.hosts.create(name='host-a') self.inventory_a.groups.create(name='group-a') self.inventory_b.hosts.create(name='host-b') self.inventory_b.groups.create(name='group-b') - + a_pk = self.inventory_a.pk + b_pk = self.inventory_b.pk + # Check put to detail view with invalid authentication. self.check_invalid_auth(url_a, methods=('delete',)) self.check_invalid_auth(url_b, methods=('delete',)) @@ -248,45 +248,33 @@ class InventoryTest(BaseTest): self.delete(url_a, expect=204) self.delete(url_b, expect=403) - # Verify that the inventory is marked inactive, along with all its - # hosts and groups. - self.inventory_a = Inventory.objects.get(pk=self.inventory_a.pk) - self.assertFalse(self.inventory_a.active) - self.assertFalse(self.inventory_a.hosts.filter(active=True).count()) - self.assertFalse(self.inventory_a.groups.filter(active=True).count()) + # Verify that the inventory was deleted + assert Inventory.objects.filter(pk=a_pk).count() == 0 # a super user can delete inventory records with self.current_user(self.super_django_user): self.delete(url_a, expect=404) self.delete(url_b, expect=204) - # Verify that the inventory is marked inactive, along with all its - # hosts and groups. - self.inventory_b = Inventory.objects.get(pk=self.inventory_b.pk) - self.assertFalse(self.inventory_b.active) - self.assertFalse(self.inventory_b.hosts.filter(active=True).count()) - self.assertFalse(self.inventory_b.groups.filter(active=True).count()) + # Verify that the inventory was deleted + assert Inventory.objects.filter(pk=b_pk).count() == 0 def test_inventory_access_deleted_permissions(self): temp_org = self.make_organizations(self.super_django_user, 1)[0] - temp_org.admins.add(self.normal_django_user) - temp_org.users.add(self.other_django_user) - temp_org.users.add(self.normal_django_user) + temp_org.admin_role.members.add(self.normal_django_user) + temp_org.member_role.members.add(self.other_django_user) + temp_org.member_role.members.add(self.normal_django_user) temp_inv = temp_org.inventories.create(name='Delete Org Inventory') temp_inv.groups.create(name='Delete Org Inventory Group') - temp_perm_read = Permission.objects.create( - inventory = temp_inv, - user = self.other_django_user, - permission_type = 'read' - ) + temp_inv.read_role.members.add(self.other_django_user) reverse('api:organization_detail', args=(temp_org.pk,)) inventory_detail = reverse('api:inventory_detail', args=(temp_inv.pk,)) - permission_detail = reverse('api:permission_detail', args=(temp_perm_read.pk,)) + read_role_users_list = reverse('api:role_users_list', args=(temp_inv.read_role.pk,)) self.get(inventory_detail, expect=200, auth=self.get_other_credentials()) - self.delete(permission_detail, expect=204, auth=self.get_super_credentials()) + self.post(read_role_users_list, data={'disassociate': True, "id": self.other_django_user.id}, expect=204, auth=self.get_super_credentials()) self.get(inventory_detail, expect=403, auth=self.get_other_credentials()) def test_create_inventory_script(self): @@ -297,10 +285,10 @@ class InventoryTest(BaseTest): got = self.get(inventory_scripts, expect=200, auth=self.get_super_credentials()) self.assertEquals(got['count'], 1) - new_failed_script = dict(name="Shouldfail", description="This test should fail", script=TEST_SIMPLE_INVENTORY_SCRIPT, organization=self.organizations[0].id) - self.post(inventory_scripts, data=new_failed_script, expect=403, auth=self.get_normal_credentials()) + new_failed_script = dict(name="Should not fail", description="This test should not fail", script=TEST_SIMPLE_INVENTORY_SCRIPT, organization=self.organizations[0].id) + self.post(inventory_scripts, data=new_failed_script, expect=201, auth=self.get_normal_credentials()) - failed_no_shebang = dict(name="ShouldAlsoFail", descript="This test should also fail", script=TEST_SIMPLE_INVENTORY_SCRIPT_WITHOUT_HASHBANG, + failed_no_shebang = dict(name="ShouldFail", descript="This test should fail", script=TEST_SIMPLE_INVENTORY_SCRIPT_WITHOUT_HASHBANG, organization=self.organizations[0].id) self.post(inventory_scripts, data=failed_no_shebang, expect=400, auth=self.get_super_credentials()) @@ -341,10 +329,8 @@ class InventoryTest(BaseTest): self.post(hosts, data=new_host_b, expect=403, auth=self.get_nobody_credentials()) # a normal user with inventory edit permissions (on any inventory) can create hosts - Permission.objects.create( - user = self.other_django_user, - inventory = Inventory.objects.get(pk=inv.pk), - permission_type = PERM_INVENTORY_WRITE) + + inv.admin_role.members.add(self.other_django_user) host_data3 = self.post(hosts, data=new_host_c, expect=201, auth=self.get_other_credentials()) # Port should be split out into host variables, other variables kept intact. @@ -399,11 +385,6 @@ class InventoryTest(BaseTest): # a normal user with inventory edit permissions (on any inventory) can create groups # already done! - #edit_perm = Permission.objects.create( - # user = self.other_django_user, - # inventory = Inventory.objects.get(pk=inv.pk), - # permission_type = PERM_INVENTORY_WRITE - #) self.post(groups, data=new_group_c, expect=201, auth=self.get_other_credentials()) # hostnames must be unique inside an organization @@ -423,9 +404,10 @@ class InventoryTest(BaseTest): del_children_url = reverse('api:group_children_list', args=(del_group.pk,)) nondel_url = reverse('api:group_detail', args=(Group.objects.get(name='nondel').pk,)) - del_group.mark_inactive() + assert self.normal_django_user in inv.read_role + del_group.delete() nondel_detail = self.get(nondel_url, expect=200, auth=self.get_normal_credentials()) - self.post(del_children_url, data=nondel_detail, expect=403, auth=self.get_normal_credentials()) + self.post(del_children_url, data=nondel_detail, expect=400, auth=self.get_normal_credentials()) ################################################# @@ -487,7 +469,7 @@ class InventoryTest(BaseTest): self.post(url5, data=new_group_d, expect=400, auth=self.get_other_credentials()) got = self.get(url5, expect=200, auth=self.get_other_credentials()) self.assertEquals(got['count'], 5) - + # side check: see if root groups URL is operational. These are groups without parents. root_groups = self.get(root_groups, expect=200, auth=self.get_super_credentials()) self.assertEquals(root_groups['count'], 2) @@ -497,7 +479,7 @@ class InventoryTest(BaseTest): self.post(url5, data=remove_me, expect=204, auth=self.get_other_credentials()) got = self.get(url5, expect=200, auth=self.get_other_credentials()) self.assertEquals(got['count'], 4) - + ################################################### # VARIABLES @@ -507,35 +489,35 @@ class InventoryTest(BaseTest): # attempting to get a variable object creates it, even though it does not already exist vdata_url = reverse('api:host_variable_data', args=(added_by_collection_a['id'],)) - + got = self.get(vdata_url, expect=200, auth=self.get_super_credentials()) self.assertEquals(got, {}) # super user can create variable objects # an org admin can create variable objects (defers to inventory permissions) got = self.put(vdata_url, data=vars_a, expect=200, auth=self.get_super_credentials()) - self.assertEquals(got, vars_a) + self.assertEquals(got, vars_a) - # verify that we can update things and get them back + # verify that we can update things and get them back got = self.put(vdata_url, data=vars_c, expect=200, auth=self.get_super_credentials()) - self.assertEquals(got, vars_c) + self.assertEquals(got, vars_c) got = self.get(vdata_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(got, vars_c) + self.assertEquals(got, vars_c) # a normal user cannot edit variable objects self.put(vdata_url, data=vars_a, expect=403, auth=self.get_nobody_credentials()) # a normal user with inventory write permissions can edit variable objects... got = self.put(vdata_url, data=vars_b, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(got, vars_b) + self.assertEquals(got, vars_b) ################################################### # VARIABLES -> GROUPS - + vars_a = dict(asdf=7777, dog='droopy', cat='battlecat', unstructured=dict(a=[1,1,1],b=dict(x=1,y=2))) vars_b = dict(asdf=8888, dog='snoopy', cat='cheshire', unstructured=dict(a=[2,2,2],b=dict(x=3,y=4))) vars_c = dict(asdf=9999, dog='pluto', cat='five', unstructured=dict(a=[3,3,3],b=dict(z=5))) - group = Group.objects.get(id=1) + group = Group.objects.order_by('pk')[0] vdata1_url = reverse('api:group_variable_data', args=(group.pk,)) @@ -547,7 +529,7 @@ class InventoryTest(BaseTest): # an org admin can associate variable objects with groups put = self.put(vdata1_url, data=vars_b, expect=200, auth=self.get_normal_credentials()) - + # a normal user cannot associate variable objects with groups put = self.put(vdata1_url, data=vars_b, expect=403, auth=self.get_nobody_credentials()) @@ -557,11 +539,11 @@ class InventoryTest(BaseTest): ################################################### # VARIABLES -> INVENTORY - + vars_a = dict(asdf=9873, dog='lassie', cat='heathcliff', unstructured=dict(a=[1,1,1],b=dict(x=1,y=2))) vars_b = dict(asdf=2736, dog='benji', cat='garfield', unstructured=dict(a=[2,2,2],b=dict(x=3,y=4))) vars_c = dict(asdf=7692, dog='buck', cat='sylvester', unstructured=dict(a=[3,3,3],b=dict(z=5))) - + vdata_url = reverse('api:inventory_variable_data', args=(self.inventory_a.pk,)) # a super user can associate variable objects with inventory @@ -662,11 +644,7 @@ class InventoryTest(BaseTest): gx5 = Group.objects.create(name='group-X5', inventory=inva) gx5.parents.add(gx4) - Permission.objects.create( - inventory = inva, - user = self.other_django_user, - permission_type = PERM_INVENTORY_WRITE - ) + inva.admin_role.members.add(self.other_django_user) # data used for testing listing all hosts that are transitive members of a group g2 = Group.objects.get(name='web4') @@ -700,7 +678,7 @@ class InventoryTest(BaseTest): new_data = dict(inventory=inv.pk, name='completely new', description='blarg?') kids = self.get(subgroups_url2, expect=200, auth=self.get_normal_credentials()) self.assertEqual(kids['count'], 1) - posted2 = self.post(subgroups_url2, data=new_data, expect=201, auth=self.get_normal_credentials()) + posted2 = self.post(subgroups_url2, data=new_data, expect=201, auth=self.get_normal_credentials()) # a group can't be it's own grandparent subsub = posted2['related']['children'] @@ -715,16 +693,16 @@ class InventoryTest(BaseTest): # double post causes conflict error (actually, should it? -- just got a 204, already associated) # self.post(subgroups_url2, data=got, expect=409, auth=self.get_normal_credentials()) - checked = self.get(subgroups_url2, expect=200, auth=self.get_normal_credentials()) + checked = self.get(subgroups_url2, expect=200, auth=self.get_normal_credentials()) # a normal user cannot set subgroups self.post(subgroups_url3, data=got, expect=403, auth=self.get_nobody_credentials()) # a normal user with inventory edit permissions can associate subgroups (but not when they belong to different inventories!) #self.post(subgroups_url3, data=got, expect=204, auth=self.get_other_credentials()) - #checked = self.get(subgroups_url3, expect=200, auth=self.get_normal_credentials()) + #checked = self.get(subgroups_url3, expect=200, auth=self.get_normal_credentials()) #self.assertEqual(checked['count'], 1) - + # slight detour # can see all hosts under a group, even if it has subgroups # this URL is NOT postable @@ -739,7 +717,7 @@ class InventoryTest(BaseTest): result = checked['results'][0] result['disassociate'] = 1 self.post(subgroups_url3, data=result, expect=204, auth=self.get_other_credentials()) - checked = self.get(subgroups_url3, expect=200, auth=self.get_normal_credentials()) + checked = self.get(subgroups_url3, expect=200, auth=self.get_normal_credentials()) self.assertEqual(checked['count'], 0) # try to double disassociate to see what happens (should no-op) self.post(subgroups_url3, data=result, expect=204, auth=self.get_other_credentials()) @@ -747,13 +725,11 @@ class InventoryTest(BaseTest): # removed group should be automatically marked inactive once it no longer has any parents. removed_group = Group.objects.get(pk=result['id']) self.assertTrue(removed_group.parents.count()) - self.assertTrue(removed_group.active) for parent in removed_group.parents.all(): parent_children_url = reverse('api:group_children_list', args=(parent.pk,)) data = {'id': removed_group.pk, 'disassociate': 1} self.post(parent_children_url, data, expect=204, auth=self.get_super_credentials()) removed_group = Group.objects.get(pk=result['id']) - #self.assertFalse(removed_group.active) # FIXME: Disabled for now because automatically deleting group with no parents is also disabled. # Removing a group from a hierarchy should migrate its children to the # parent. The group itself will be deleted (marked inactive), and all @@ -766,7 +742,6 @@ class InventoryTest(BaseTest): with self.current_user(self.super_django_user): self.post(url, data, expect=204) gx3 = Group.objects.get(pk=gx3.pk) - #self.assertFalse(gx3.active) # FIXME: Disabled for now.... self.assertFalse(gx3 in gx2.children.all()) #self.assertTrue(gx4 in gx2.children.all()) @@ -803,7 +778,7 @@ class InventoryTest(BaseTest): # FIXME: RELATED FIELDS # on an inventory resource, I can see related resources for hosts and groups and permissions - # and these work + # and these work # on a host resource, I can see related resources variables and inventories # and these work # on a group resource, I can see related resources for variables, inventories, and children @@ -884,11 +859,11 @@ class InventoryTest(BaseTest): g_d = self.inventory_a.groups.create(name='D') g_d.inventory_source g_d.parents.add(g_c) - + url = reverse('api:inventory_tree_view', args=(self.inventory_a.pk,)) with self.current_user(self.super_django_user): response = self.get(url, expect=200) - + self.assertTrue(isinstance(response, list)) self.assertEqual(len(response), 1) self.assertEqual(response[0]['id'], g_a.pk) @@ -944,13 +919,10 @@ class InventoryTest(BaseTest): # Mark group C inactive. Its child groups and hosts should now also be # attached to group A. Group D hosts should be unchanged. Group C # should also no longer have any group or host relationships. - g_c.mark_inactive() + g_c.delete() self.assertTrue(g_d in g_a.children.all()) self.assertTrue(h_c in g_a.hosts.all()) self.assertFalse(h_d in g_a.hosts.all()) - self.assertFalse(g_c.parents.all()) - self.assertFalse(g_c.children.all()) - self.assertFalse(g_c.hosts.all()) def test_safe_delete_recursion(self): # First hierarchy @@ -989,11 +961,9 @@ class InventoryTest(BaseTest): self.assertTrue(other_sub_group in sub_group.children.all()) # Now recursively remove its parent and the reference from subgroup should remain - other_top_group.mark_inactive_recursive() - other_top_group = Group.objects.get(pk=other_top_group.pk) + other_top_group.delete_recursive() self.assertTrue(s2 in sub_group.all_hosts.all()) self.assertTrue(other_sub_group in sub_group.children.all()) - self.assertFalse(other_top_group.active) def test_group_parents_and_children(self): # Test for various levels of group parent/child relations, with hosts, @@ -1129,60 +1099,8 @@ class InventoryTest(BaseTest): self.assertEqual(response['hosts']['total'], 8) self.assertEqual(response['hosts']['failed'], 8) - def test_dashboard_inventory_graph_view(self): - url = reverse('api:dashboard_inventory_graph_view') - # Test with zero hosts. - with self.current_user(self.super_django_user): - response = self.get(url) - self.assertFalse(sum([x[1] for x in response['hosts']])) - # Create hosts in inventory_a, with created one day apart, and check - # the time series results. - dtnow = now() - hostnames = list('abcdefg') - for x in xrange(len(hostnames) - 1, -1, -1): - hostname = hostnames[x] - created = dtnow - datetime.timedelta(days=x, seconds=60) - self.inventory_a.hosts.create(name=hostname, created=created) - with self.current_user(self.super_django_user): - response = self.get(url) - for n, d in enumerate(reversed(response['hosts'])): - self.assertEqual(d[1], max(len(hostnames) - n, 0)) - # Create more hosts a day apart in inventory_b and check the time - # series results. - hostnames2 = list('hijklmnop') - for x in xrange(len(hostnames2) - 1, -1, -1): - hostname = hostnames2[x] - created = dtnow - datetime.timedelta(days=x, seconds=120) - self.inventory_b.hosts.create(name=hostname, created=created) - with self.current_user(self.super_django_user): - response = self.get(url) - for n, d in enumerate(reversed(response['hosts'])): - self.assertEqual(d[1], max(len(hostnames2) - n, 0) + max(len(hostnames) - n, 0)) - # Now create some hosts in inventory_a with the same hostnames already - # used in inventory_b; duplicate hostnames should only be counted the - # first time they were seen in inventory_b. - hostnames3 = list('lmnop') - for x in xrange(len(hostnames3) - 1, -1, -1): - hostname = hostnames3[x] - created = dtnow - datetime.timedelta(days=x, seconds=180) - self.inventory_a.hosts.create(name=hostname, created=created) - with self.current_user(self.super_django_user): - response = self.get(url) - for n, d in enumerate(reversed(response['hosts'])): - self.assertEqual(d[1], max(len(hostnames2) - n, 0) + max(len(hostnames) - n, 0)) - # Delete recently added hosts and verify the count drops. - hostnames4 = list('defg') - for host in Host.objects.filter(name__in=hostnames4): - host.mark_inactive() - with self.current_user(self.super_django_user): - response = self.get(url) - for n, d in enumerate(reversed(response['hosts'])): - count = max(len(hostnames2) - n, 0) + max(len(hostnames) - n, 0) - if n == 0: - count -= 4 - self.assertEqual(d[1], count) - +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, IGNORE_CELERY_INSPECTOR=True, @@ -1195,9 +1113,9 @@ class InventoryUpdatesTest(BaseTransactionTest): self.setup_instances() self.setup_users() self.organization = self.make_organizations(self.super_django_user, 1)[0] - self.organization.admins.add(self.normal_django_user) - self.organization.users.add(self.other_django_user) - self.organization.users.add(self.normal_django_user) + self.organization.admin_role.members.add(self.normal_django_user) + self.organization.member_role.members.add(self.other_django_user) + self.organization.member_role.members.add(self.normal_django_user) self.inventory = self.organization.inventories.create(name='Cloud Inventory') self.group = self.inventory.groups.create(name='Cloud Group') self.inventory2 = self.organization.inventories.create(name='Cloud Inventory 2') @@ -1270,7 +1188,7 @@ class InventoryUpdatesTest(BaseTransactionTest): url = reverse('api:inventory_source_hosts_list', args=(inventory_source.pk,)) response = self.get(url, expect=200) self.assertNotEqual(response['count'], 0) - for host in inventory.hosts.filter(active=True): + for host in inventory.hosts.all(): source_pks = host.inventory_sources.values_list('pk', flat=True) self.assertTrue(inventory_source.pk in source_pks) self.assertTrue(host.has_inventory_sources) @@ -1284,12 +1202,12 @@ class InventoryUpdatesTest(BaseTransactionTest): url = reverse('api:host_inventory_sources_list', args=(host.pk,)) response = self.get(url, expect=200) self.assertNotEqual(response['count'], 0) - for group in inventory.groups.filter(active=True): + for group in inventory.groups.all(): source_pks = group.inventory_sources.values_list('pk', flat=True) self.assertTrue(inventory_source.pk in source_pks) self.assertTrue(group.has_inventory_sources) - self.assertTrue(group.children.filter(active=True).exists() or - group.hosts.filter(active=True).exists()) + self.assertTrue(group.children.exists() or + group.hosts.exists()) # Make sure EC2 instance ID groups and RDS groups are excluded. if inventory_source.source == 'ec2' and not instance_id_group_ok: self.assertFalse(re.match(r'^i-[0-9a-f]{8}$', group.name, re.I), @@ -1307,7 +1225,7 @@ class InventoryUpdatesTest(BaseTransactionTest): self.assertNotEqual(response['count'], 0) # Try to set a source on a child group that was imported. Should not # be allowed. - for group in inventory_source.group.children.filter(active=True): + for group in inventory_source.group.children.all(): inv_src_2 = group.inventory_source inv_src_url2 = reverse('api:inventory_source_detail', args=(inv_src_2.pk,)) with self.current_user(self.super_django_user): @@ -1330,6 +1248,18 @@ class InventoryUpdatesTest(BaseTransactionTest): self.delete(inv_up_url, expect=204) self.get(inv_up_url, expect=404) + def print_group_tree(self, group, depth=0): + print (' ' * depth) + '+ ' + group.name + for host in group.hosts.order_by('name'): + print (' ' * depth) + ' - ' + host.name + for child in group.children.order_by('name'): + self.print_group_tree(child, depth + 1) + + def print_inventory_tree(self, inventory): + # Print out group/host tree for debugging. + for group in inventory.root_groups.order_by('name'): + self.print_group_tree(group) + def test_put_inventory_source_detail_with_regions(self): creds_url = reverse('api:credential_list') inv_src_url1 = reverse('api:inventory_source_detail', @@ -1494,93 +1424,6 @@ class InventoryUpdatesTest(BaseTransactionTest): response = self.put(inv_src_url2, inv_src_data, expect=200) self.assertEqual(response['source_regions'], 'ORD,IAD') - def test_post_inventory_source_update(self): - creds_url = reverse('api:credential_list') - inv_src_url = reverse('api:inventory_source_detail', - args=(self.group.inventory_source.pk,)) - inv_src_update_url = reverse('api:inventory_source_update_view', - args=(self.group.inventory_source.pk,)) - # Create a credential to use for this inventory source. - aws_cred_data = { - 'name': 'AWS key that does not need to have valid info because we ' - 'do not care if the update actually succeeds', - 'kind': 'aws', - 'user': self.super_django_user.pk, - 'username': 'aws access key id goes here', - 'password': 'aws secret access key goes here', - } - with self.current_user(self.super_django_user): - aws_cred_response = self.post(creds_url, aws_cred_data, expect=201) - aws_cred_id = aws_cred_response['id'] - # Updaate the inventory source to use EC2. - inv_src_data = { - 'source': 'ec2', - 'credential': aws_cred_id, - } - with self.current_user(self.super_django_user): - self.put(inv_src_url, inv_src_data, expect=200) - # Read the inventory source, verify the update URL returns can_update. - with self.current_user(self.super_django_user): - self.get(inv_src_url, expect=200) - response = self.get(inv_src_update_url, expect=200) - self.assertTrue(response['can_update']) - # Now do the update. - with self.current_user(self.super_django_user): - self.post(inv_src_update_url, {}, expect=202) - # Normal user should be allowed as an org admin. - with self.current_user(self.normal_django_user): - self.get(inv_src_url, expect=200) - response = self.get(inv_src_update_url, expect=200) - self.assertTrue(response['can_update']) - with self.current_user(self.normal_django_user): - self.post(inv_src_update_url, {}, expect=202) - # Other user should be denied as only an org user. - with self.current_user(self.other_django_user): - self.get(inv_src_url, expect=403) - response = self.get(inv_src_update_url, expect=403) - with self.current_user(self.other_django_user): - self.post(inv_src_update_url, {}, expect=403) - # If given read permission to the inventory, other user should be able - # to see the inventory source and update view, but not start an update. - other_perms_url = reverse('api:user_permissions_list', - args=(self.other_django_user.pk,)) - other_perms_data = { - 'name': 'read only inventory permission for other', - 'user': self.other_django_user.pk, - 'inventory': self.inventory.pk, - 'permission_type': 'read', - } - with self.current_user(self.super_django_user): - self.post(other_perms_url, other_perms_data, expect=201) - with self.current_user(self.other_django_user): - self.get(inv_src_url, expect=200) - response = self.get(inv_src_update_url, expect=200) - with self.current_user(self.other_django_user): - self.post(inv_src_update_url, {}, expect=403) - # Once given write permission, the normal user is able to update the - # inventory source. - other_perms_data = { - 'name': 'read-write inventory permission for other', - 'user': self.other_django_user.pk, - 'inventory': self.inventory.pk, - 'permission_type': 'write', - } - with self.current_user(self.super_django_user): - self.post(other_perms_url, other_perms_data, expect=201) - with self.current_user(self.other_django_user): - self.get(inv_src_url, expect=200) - response = self.get(inv_src_update_url, expect=200) - # FIXME: This is misleading, as an update would fail... - self.assertTrue(response['can_update']) - with self.current_user(self.other_django_user): - self.post(inv_src_update_url, {}, expect=202) - # Nobody user should be denied as well. - with self.current_user(self.nobody_django_user): - self.get(inv_src_url, expect=403) - response = self.get(inv_src_update_url, expect=403) - with self.current_user(self.nobody_django_user): - self.post(inv_src_update_url, {}, expect=403) - def test_update_from_ec2(self): source_username = getattr(settings, 'TEST_AWS_ACCESS_KEY_ID', '') source_password = getattr(settings, 'TEST_AWS_SECRET_ACCESS_KEY', '') @@ -1589,9 +1432,9 @@ class InventoryUpdatesTest(BaseTransactionTest): self.skipTest('no test ec2 credentials defined!') self.create_test_license_file() credential = Credential.objects.create(kind='aws', - user=self.super_django_user, username=source_username, password=source_password) + credential.admin_role.members.add(self.super_django_user) # Set parent group name to one that might be created by the sync. group = self.group group.name = 'ec2' @@ -1651,7 +1494,7 @@ class InventoryUpdatesTest(BaseTransactionTest): inventory_source.overwrite = True inventory_source.save() self.check_inventory_source(inventory_source, initial=False) - for host in self.inventory.hosts.filter(active=True): + for host in self.inventory.hosts.all(): self.assertEqual(host.variables_dict['ec2_instance_type'], instance_type) # Try invalid instance filters that should be ignored: @@ -1675,10 +1518,10 @@ class InventoryUpdatesTest(BaseTransactionTest): self.skipTest('no test ec2 sts credentials defined!') self.create_test_license_file() credential = Credential.objects.create(kind='aws', - user=self.super_django_user, username=source_username, password=source_password, security_token=source_token) + credential.admin_role.members.add(self.super_django_user) # Set parent group name to one that might be created by the sync. group = self.group group.name = 'ec2' @@ -1697,10 +1540,11 @@ class InventoryUpdatesTest(BaseTransactionTest): source_regions = getattr(settings, 'TEST_AWS_REGIONS', 'all') self.create_test_license_file() credential = Credential.objects.create(kind='aws', - user=self.super_django_user, username=source_username, password=source_password, security_token="BADTOKEN") + credential.admin_role.members.add(self.super_django_user) + # Set parent group name to one that might be created by the sync. group = self.group group.name = 'ec2' @@ -1732,9 +1576,9 @@ class InventoryUpdatesTest(BaseTransactionTest): self.skipTest('no test ec2 credentials defined!') self.create_test_license_file() credential = Credential.objects.create(kind='aws', - user=self.super_django_user, username=source_username, password=source_password) + credential.admin_role.members.add(self.super_django_user) group = self.group group.name = 'AWS Inventory' group.save() @@ -1749,6 +1593,7 @@ class InventoryUpdatesTest(BaseTransactionTest): # its own child). self.assertTrue(self.group in self.inventory.root_groups) # Verify that returned groups are nested: + #self.print_inventory_tree(self.inventory) child_names = self.group.children.values_list('name', flat=True) for name in child_names: self.assertFalse(name.startswith('us-')) @@ -1766,7 +1611,10 @@ class InventoryUpdatesTest(BaseTransactionTest): self.assertTrue('tags' in child_names) self.assertTrue('images' in child_names) self.assertFalse('tag_none' in child_names) - self.assertTrue('tag_none' in self.group.children.get(name='tags').children.values_list('name', flat=True)) + # Only check for tag_none as a child of tags if there is a tag_none group; + # the test inventory *may* have tags set for all hosts. + if self.inventory.groups.filter(name='tag_none').exists(): + self.assertTrue('tag_none' in self.group.children.get(name='tags').children.values_list('name', flat=True)) self.assertFalse('instances' in child_names) # Make sure we clean up the cache path when finished (when one is not # provided explicitly via source_vars). @@ -1781,12 +1629,12 @@ class InventoryUpdatesTest(BaseTransactionTest): inventory_source.save() self.check_inventory_source(inventory_source, initial=False) # Verify that only the desired groups are returned. - child_names = self.group.children.filter(active=True).values_list('name', flat=True) + child_names = self.group.children.values_list('name', flat=True) self.assertTrue('ec2' in child_names) self.assertTrue('regions' in child_names) - self.assertTrue(self.group.children.get(name='regions').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='regions').children.count()) self.assertTrue('types' in child_names) - self.assertTrue(self.group.children.get(name='types').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='types').children.count()) self.assertFalse('keys' in child_names) self.assertFalse('security_groups' in child_names) self.assertFalse('tags' in child_names) @@ -1803,24 +1651,27 @@ class InventoryUpdatesTest(BaseTransactionTest): self.check_inventory_source(inventory_source, initial=False, instance_id_group_ok=True) # Verify that only the desired groups are returned. # Skip vpcs as selected inventory may or may not have any. - child_names = self.group.children.filter(active=True).values_list('name', flat=True) + child_names = self.group.children.values_list('name', flat=True) self.assertTrue('ec2' in child_names) self.assertFalse('tag_none' in child_names) self.assertTrue('regions' in child_names) - self.assertTrue(self.group.children.get(name='regions').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='regions').children.count()) self.assertTrue('types' in child_names) - self.assertTrue(self.group.children.get(name='types').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='types').children.count()) self.assertTrue('keys' in child_names) - self.assertTrue(self.group.children.get(name='keys').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='keys').children.count()) self.assertTrue('security_groups' in child_names) - self.assertTrue(self.group.children.get(name='security_groups').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='security_groups').children.count()) self.assertTrue('tags' in child_names) - self.assertTrue(self.group.children.get(name='tags').children.filter(active=True).count()) - self.assertTrue('tag_none' in self.group.children.get(name='tags').children.values_list('name', flat=True)) + self.assertTrue(self.group.children.get(name='tags').children.count()) + # Only check for tag_none as a child of tags if there is a tag_none group; + # the test inventory *may* have tags set for all hosts. + if self.inventory.groups.filter(name='tag_none').exists(): + self.assertTrue('tag_none' in self.group.children.get(name='tags').children.values_list('name', flat=True)) self.assertTrue('images' in child_names) - self.assertTrue(self.group.children.get(name='images').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='images').children.count()) self.assertTrue('instances' in child_names) - self.assertTrue(self.group.children.get(name='instances').children.filter(active=True).count()) + self.assertTrue(self.group.children.get(name='instances').children.count()) # Sync again with overwrite set to False after renaming a group that # was created by the sync. With overwrite false, the renamed group and # the original group (created again by the sync) will both exist. @@ -1834,29 +1685,18 @@ class InventoryUpdatesTest(BaseTransactionTest): inventory_source.overwrite = False inventory_source.save() self.check_inventory_source(inventory_source, initial=False, instance_id_group_ok=True) - child_names = self.group.children.filter(active=True).values_list('name', flat=True) + child_names = self.group.children.values_list('name', flat=True) self.assertTrue(region_group_original_name in self.group.children.get(name='regions').children.values_list('name', flat=True)) self.assertTrue(region_group.name in self.group.children.get(name='regions').children.values_list('name', flat=True)) # Replacement text should not be left in inventory source name. self.assertFalse(InventorySource.objects.filter(name__icontains='__replace_').exists()) # Inventory update name should be based on inventory/group names and need not have the inventory source pk. - print InventoryUpdate.objects.values_list('name', 'inventory_source__name') + #print InventoryUpdate.objects.values_list('name', 'inventory_source__name') for inventory_update in InventoryUpdate.objects.all(): self.assertFalse(inventory_update.name.endswith(inventory_update.inventory_source.name), inventory_update.name) - return - # Print out group/host tree for debugging. - print - - def draw_tree(g, d=0): - print (' ' * d) + '+ ' + g.name - for h in g.hosts.order_by('name'): - print (' ' * d) + ' - ' + h.name - for c in g.children.order_by('name'): - draw_tree(c, d + 1) - for g in self.inventory.root_groups.order_by('name'): - draw_tree(g) def test_update_from_rax(self): + self.skipTest('Skipping until we can resolve the CERTIFICATE_VERIFY_FAILED issue: #1706') source_username = getattr(settings, 'TEST_RACKSPACE_USERNAME', '') source_password = getattr(settings, 'TEST_RACKSPACE_API_KEY', '') source_regions = getattr(settings, 'TEST_RACKSPACE_REGIONS', '') @@ -1864,9 +1704,9 @@ class InventoryUpdatesTest(BaseTransactionTest): self.skipTest('no test rackspace credentials defined!') self.create_test_license_file() credential = Credential.objects.create(kind='rax', - user=self.super_django_user, username=source_username, password=source_password) + credential.admin_role.members.add(self.super_django_user) # Set parent group name to one that might be created by the sync. group = self.group group.name = 'DFW' @@ -1916,10 +1756,10 @@ class InventoryUpdatesTest(BaseTransactionTest): self.skipTest('no test vmware credentials defined!') self.create_test_license_file() credential = Credential.objects.create(kind='vmware', - user=self.super_django_user, username=source_username, password=source_password, host=source_host) + credential.admin_role.members.add(self.super_django_user) inventory_source = self.update_inventory_source(self.group, source='vmware', credential=credential) # Check first without instance_id set (to import by name only). @@ -2061,6 +1901,26 @@ class InventoryUpdatesTest(BaseTransactionTest): self.check_inventory_source(inventory_source) self.assertFalse(self.group.all_hosts.filter(instance_id='').exists()) + def test_update_from_openstack_with_domain(self): + # Check that update works with Keystone v3 identity service + api_url = getattr(settings, 'TEST_OPENSTACK_HOST_V3', '') + api_user = getattr(settings, 'TEST_OPENSTACK_USER', '') + api_password = getattr(settings, 'TEST_OPENSTACK_PASSWORD', '') + api_project = getattr(settings, 'TEST_OPENSTACK_PROJECT', '') + api_domain = getattr(settings, 'TEST_OPENSTACK_DOMAIN', '') + if not all([api_url, api_user, api_password, api_project, api_domain]): + self.skipTest("No test openstack credentials defined with a domain") + self.create_test_license_file() + credential = Credential.objects.create(kind='openstack', + host=api_url, + username=api_user, + password=api_password, + project=api_project, + domain=api_domain) + inventory_source = self.update_inventory_source(self.group, source='openstack', credential=credential) + self.check_inventory_source(inventory_source) + self.assertFalse(self.group.all_hosts.filter(instance_id='').exists()) + def test_update_from_azure(self): source_username = getattr(settings, 'TEST_AZURE_USERNAME', '') source_key_data = getattr(settings, 'TEST_AZURE_KEY_DATA', '') @@ -2074,34 +1934,3 @@ class InventoryUpdatesTest(BaseTransactionTest): self.check_inventory_source(inventory_source) self.assertFalse(self.group.all_hosts.filter(instance_id='').exists()) - -class InventoryCredentialTest(BaseTest): - def setUp(self): - super(InventoryCredentialTest, self).setUp() - #self.start_redis() - self.setup_instances() - self.setup_users() - - self.url = reverse('api:credential_list') - - def test_openstack_create_ok(self): - data = { - 'kind': 'openstack', - 'name': 'Best credential ever', - 'username': 'some_user', - 'password': 'some_password', - 'project': 'some_project', - 'host': 'some_host', - } - self.post(self.url, data=data, expect=201, auth=self.get_super_credentials()) - - def test_openstack_create_fail_required_fields(self): - data = { - 'kind': 'openstack', - 'name': 'Best credential ever', - } - response = self.post(self.url, data=data, expect=400, auth=self.get_super_credentials()) - self.assertIn('username', response) - self.assertIn('password', response) - self.assertIn('host', response) - self.assertIn('project', response) diff --git a/awx/main/tests/jobs/job_launch.py b/awx/main/tests/old/jobs/job_launch.py similarity index 88% rename from awx/main/tests/jobs/job_launch.py rename to awx/main/tests/old/jobs/job_launch.py index 66a0ca5a72..dabf3568bc 100644 --- a/awx/main/tests/jobs/job_launch.py +++ b/awx/main/tests/old/jobs/job_launch.py @@ -3,6 +3,8 @@ # Python from __future__ import absolute_import +import os +import unittest2 as unittest # Django import django @@ -10,12 +12,13 @@ from django.core.urlresolvers import reverse # AWX from awx.main.models import * # noqa -from .base import BaseJobTestMixin +from awx.main.tests.job_base import BaseJobTestMixin import yaml __all__ = ['JobTemplateLaunchTest', 'JobTemplateLaunchPasswordsTest'] -class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') +class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase): def setUp(self): super(JobTemplateLaunchTest, self).setUp() @@ -27,6 +30,8 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): project = self.proj_dev.pk, credential = self.cred_sue.pk, playbook = self.proj_dev.playbooks[0], + ask_variables_on_launch = True, + ask_credential_on_launch = True, ) self.data_no_cred = dict( name = 'launched job template no credential', @@ -34,6 +39,8 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): inventory = self.inv_eng.pk, project = self.proj_dev.pk, playbook = self.proj_dev.playbooks[0], + ask_credential_on_launch = True, + ask_variables_on_launch = True, ) self.data_cred_ask = dict(self.data) self.data_cred_ask['name'] = 'launched job templated with ask passwords' @@ -67,7 +74,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_credential_implicit(self): # Implicit, attached credentials with self.current_user(self.user_sue): - response = self.post(self.launch_url, {}, expect=202) + response = self.post(self.launch_url, {}, expect=201) j = Job.objects.get(pk=response['job']) self.assertTrue(j.status == 'new') @@ -75,7 +82,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): # Sending extra_vars as a JSON string, implicit credentials with self.current_user(self.user_sue): data = dict(extra_vars = '{\"a\":3}') - response = self.post(self.launch_url, data, expect=202) + response = self.post(self.launch_url, data, expect=201) j = Job.objects.get(pk=response['job']) ev_dict = yaml.load(j.extra_vars) self.assertIn('a', ev_dict) @@ -86,7 +93,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): # Sending extra_vars as a JSON string, implicit credentials with self.current_user(self.user_sue): data = dict(extra_vars = 'a: 3') - response = self.post(self.launch_url, data, expect=202) + response = self.post(self.launch_url, data, expect=201) j = Job.objects.get(pk=response['job']) ev_dict = yaml.load(j.extra_vars) self.assertIn('a', ev_dict) @@ -96,8 +103,8 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_credential_explicit(self): # Explicit, credential with self.current_user(self.user_sue): - self.cred_sue.mark_inactive() - response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202) + self.cred_sue.delete() + response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201) j = Job.objects.get(pk=response['job']) self.assertEqual(j.status, 'new') self.assertEqual(j.credential.pk, self.cred_doug.pk) @@ -105,8 +112,8 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_credential_explicit_via_credential_id(self): # Explicit, credential with self.current_user(self.user_sue): - self.cred_sue.mark_inactive() - response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202) + self.cred_sue.delete() + response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201) j = Job.objects.get(pk=response['job']) self.assertEqual(j.status, 'new') self.assertEqual(j.credential.pk, self.cred_doug.pk) @@ -114,7 +121,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_credential_override(self): # Explicit, credential with self.current_user(self.user_sue): - response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202) + response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201) j = Job.objects.get(pk=response['job']) self.assertEqual(j.status, 'new') self.assertEqual(j.credential.pk, self.cred_doug.pk) @@ -122,7 +129,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_credential_override_via_credential_id(self): # Explicit, credential with self.current_user(self.user_sue): - response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202) + response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201) j = Job.objects.get(pk=response['job']) self.assertEqual(j.status, 'new') self.assertEqual(j.credential.pk, self.cred_doug.pk) @@ -131,15 +138,16 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): # Can't launch a job template without a credential defined (or if we # pass an invalid/inactive credential value). with self.current_user(self.user_sue): - self.cred_sue.mark_inactive() + self.cred_sue.delete() self.post(self.launch_url, {}, expect=400) self.post(self.launch_url, {'credential': 0}, expect=400) self.post(self.launch_url, {'credential_id': 0}, expect=400) self.post(self.launch_url, {'credential': 'one'}, expect=400) self.post(self.launch_url, {'credential_id': 'one'}, expect=400) - self.cred_doug.mark_inactive() - self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=400) - self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=400) + cred_doug_pk = self.cred_doug.pk + self.cred_doug.delete() + self.post(self.launch_url, {'credential': cred_doug_pk}, expect=400) + self.post(self.launch_url, {'credential_id': cred_doug_pk}, expect=400) def test_explicit_unowned_cred(self): # Explicitly specify a credential that we don't have access to @@ -174,11 +182,12 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TestCase): def test_deleted_credential_fail(self): # Job Templates with deleted credentials cannot be launched. - self.cred_sue.mark_inactive() + self.cred_sue.delete() with self.current_user(self.user_sue): self.post(self.launch_url, {}, expect=400) -class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TestCase): +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') +class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TransactionTestCase): def setUp(self): super(JobTemplateLaunchPasswordsTest, self).setUp() @@ -190,6 +199,7 @@ class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TestCase): project = self.proj_dev.pk, credential = self.cred_sue_ask.pk, playbook = self.proj_dev.playbooks[0], + ask_credential_on_launch = True, ) with self.current_user(self.user_sue): @@ -202,7 +212,7 @@ class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TestCase): passwords_required = ['ssh_password', 'become_password', 'ssh_key_unlock'] # Job Templates with deleted credentials cannot be launched. with self.current_user(self.user_sue): - self.cred_sue_ask.mark_inactive() + self.cred_sue_ask.delete() response = self.post(self.launch_url, {'credential_id': self.cred_sue_ask_many.pk}, expect=400) for p in passwords_required: self.assertIn(p, response['passwords_needed_to_start']) @@ -210,7 +220,7 @@ class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TestCase): def test_explicit_cred_with_ask_password(self): with self.current_user(self.user_sue): - response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=202) + response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=201) j = Job.objects.get(pk=response['job']) self.assertEqual(j.status, 'new') diff --git a/awx/main/tests/jobs/job_relaunch.py b/awx/main/tests/old/jobs/job_relaunch.py similarity index 94% rename from awx/main/tests/jobs/job_relaunch.py rename to awx/main/tests/old/jobs/job_relaunch.py index 04ae95ba75..3a9e050288 100644 --- a/awx/main/tests/jobs/job_relaunch.py +++ b/awx/main/tests/old/jobs/job_relaunch.py @@ -4,6 +4,8 @@ # Python from __future__ import absolute_import import json +import os +import unittest2 as unittest # Django from django.core.urlresolvers import reverse @@ -11,10 +13,11 @@ from django.core.urlresolvers import reverse # AWX from awx.main.models import * # noqa from awx.main.tests.base import BaseLiveServerTest -from .base import BaseJobTestMixin +from awx.main.tests.job_base import BaseJobTestMixin __all__ = ['JobRelaunchTest',] +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class JobRelaunchTest(BaseJobTestMixin, BaseLiveServerTest): def test_job_relaunch(self): @@ -63,7 +66,7 @@ class JobRelaunchTest(BaseJobTestMixin, BaseLiveServerTest): self.jt_ops_east_run.extra_vars = jt_extra_vars self.jt_ops_east_run.save() - + response = self.post(url, {}, expect=201) j = Job.objects.get(pk=response['job']) self.assertTrue(j.status == 'successful') diff --git a/awx/main/tests/jobs/jobs_monolithic.py b/awx/main/tests/old/jobs/jobs_monolithic.py similarity index 91% rename from awx/main/tests/jobs/jobs_monolithic.py rename to awx/main/tests/old/jobs/jobs_monolithic.py index 7f3e337503..b7321bb611 100644 --- a/awx/main/tests/jobs/jobs_monolithic.py +++ b/awx/main/tests/old/jobs/jobs_monolithic.py @@ -9,20 +9,23 @@ import struct import threading import time import urlparse +import os +import unittest2 as unittest + # Django import django.test from django.conf import settings from django.core.urlresolvers import reverse from django.test.utils import override_settings -from django.utils.encoding import smart_str +from django.utils.encoding import smart_text # Requests import requests # AWX from awx.main.models import * # noqa -from base import BaseJobTestMixin +from awx.main.tests.job_base import BaseJobTestMixin __all__ = ['JobTemplateTest', 'JobTest', 'JobTemplateCallbackTest', 'JobTransactionTest', 'JobTemplateSurveyTest'] @@ -183,7 +186,8 @@ TEST_SURVEY_REQUIREMENTS = ''' } ''' -class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') +class JobTemplateTest(BaseJobTestMixin, django.test.TransactionTestCase): JOB_TEMPLATE_FIELDS = ('id', 'type', 'url', 'related', 'summary_fields', 'created', 'modified', 'name', 'description', @@ -197,6 +201,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): 'last_job_failed', 'survey_enabled') def test_get_job_template_list(self): + self.skipTest('This test makes assumptions about projects being multi-org and needs to be updated/rewritten') url = reverse('api:job_template_list') qs = JobTemplate.objects.distinct() fields = self.JOB_TEMPLATE_FIELDS @@ -216,26 +221,26 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): # due to being an org admin for that project and no credential assigned to that template with self.current_user(self.user_bob): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 3) - + # Chuck has permission to see all Eng Job Templates as Lead Engineer # Note: Since chuck is an org admin he can also see the support scan template with self.current_user(self.user_chuck): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 3) # Doug is in engineering but can only run scan jobs so he can only see the one Job Template with self.current_user(self.user_doug): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 1) # Juan can't see any job templates in Engineering because he lacks the inventory read permission with self.current_user(self.user_juan): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 0) # We give Juan inventory permission and he can see both Job Templates because he already has deploy permission @@ -248,29 +253,29 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): ) with self.current_user(self.user_juan): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 2) # Randall is on the ops testers team that has permission to run a single check playbook on ops west with self.current_user(self.user_randall): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 1) # Holly is on the ops east team and can see all of that team's job templates with self.current_user(self.user_holly): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 3) # Chuck is temporarily assigned to ops east team to help them running some playbooks # even though he's in a different group and org entirely he'll now see their job templates - self.team_ops_east.users.add(self.user_chuck) + self.team_ops_east.deprecated_users.add(self.user_chuck) with self.current_user(self.user_chuck): resp = self.get(url, expect=200) - print [x['name'] for x in resp['results']] + #print [x['name'] for x in resp['results']] self.assertEquals(resp['count'], 6) - + def test_credentials_list(self): url = reverse('api:credential_list') @@ -280,13 +285,20 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): self.assertFalse('south' in [x['username'] for x in all_credentials['results']]) url2 = reverse('api:team_detail', args=(self.team_ops_north.id,)) - # Sue shouldn't be able to see the north credential once deleting its team - with self.current_user(self.user_sue): + # Greg shouldn't be able to see the north credential once deleting its team + with self.current_user(self.user_greg): + all_credentials = self.get(url, expect=200) + self.assertTrue('north' in [x['username'] for x in all_credentials['results']]) self.delete(url2, expect=204) all_credentials = self.get(url, expect=200) self.assertFalse('north' in [x['username'] for x in all_credentials['results']]) + # Sue can still see the credential, she's a super user + with self.current_user(self.user_sue): + all_credentials = self.get(url, expect=200) + self.assertTrue('north' in [x['username'] for x in all_credentials['results']]) def test_post_job_template_list(self): + self.skipTest('This test makes assumptions about projects being multi-org and needs to be updated/rewritten') url = reverse('api:job_template_list') data = dict( name = 'new job template', @@ -313,7 +325,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): self.assertEqual(jt.inventory.pk, data['inventory']) self.assertEqual(jt.credential, None) self.assertEqual(jt.project.pk, data['project']) - self.assertEqual(smart_str(jt.playbook), data['playbook']) + self.assertEqual(smart_text(jt.playbook), data['playbook']) # Test that all required fields are really required. data['name'] = 'another new job template' @@ -331,7 +343,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): d['job_type'] = 'world domination' response = self.post(url, d, expect=400) self.assertTrue('job_type' in response) - + # Test playbook not in list of project playbooks. with self.current_user(self.user_sue): d = dict(data.items()) @@ -460,6 +472,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): # FIXME: Check other credentials and optional fields. def test_post_scan_job_template(self): + self.skipTest('This test makes assumptions about projects being multi-org and needs to be updated/rewritten') url = reverse('api:job_template_list') data = dict( name = 'scan job template 1', @@ -492,7 +505,8 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): with self.current_user(self.user_doug): self.get(detail_url, expect=403) -class JobTest(BaseJobTestMixin, django.test.TestCase): +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') +class JobTest(BaseJobTestMixin, django.test.TransactionTestCase): def test_get_job_list(self): url = reverse('api:job_list') @@ -603,11 +617,11 @@ class JobTest(BaseJobTestMixin, django.test.TestCase): data = self.get('/api/v1/job_templates/', expect=401) data = self.get('/api/v1/job_templates/', expect=200, auth=self.get_normal_credentials()) self.assertTrue(data['count'], 2) - + rec = dict( - name = 'job-foo', - credential = self.credential.pk, - inventory = self.inventory.pk, + name = 'job-foo', + credential = self.credential.pk, + inventory = self.inventory.pk, project = self.project.pk, job_type = PERM_INVENTORY_DEPLOY ) @@ -617,7 +631,7 @@ class JobTest(BaseJobTestMixin, django.test.TestCase): self.assertEquals(posted['url'], '/api/v1/job_templates/3/') # other_django_user is on a team that can deploy, so can create both deploy and check type jobs - rec['name'] = 'job-foo2' + rec['name'] = 'job-foo2' posted = self.post('/api/v1/job_templates/', rec, expect=201, auth=self.get_other_credentials()) rec['name'] = 'job-foo3' rec['job_type'] = PERM_INVENTORY_CHECK @@ -644,6 +658,7 @@ class JobTest(BaseJobTestMixin, django.test.TestCase): # and that jobs come back nicely serialized with related resources and so on ... # that we can drill all the way down and can get at host failure lists, etc ... +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, ANSIBLE_TRANSPORT='local') @@ -732,7 +747,7 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): raise socket.herror('unknown test host') raddr = '.'.join(list(reversed(ip.split('.'))) + ['in-addr', 'arpa']) return (host, [raddr], [ip]) - + def getaddrinfo(self, host, port, family=0, socktype=0, proto=0, flags=0): if family or socktype or proto or flags: return self._original_getaddrinfo(host, port, family, socktype, @@ -765,7 +780,7 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): host_vars['ansible_ssh_host'] = ip host.variables = json.dumps(host_vars) host.save() - + # Find a valid job template to use to test the callback. job_template = None qs = JobTemplate.objects.filter(job_type='run', @@ -789,7 +804,7 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): self.assertEqual(jobs_qs.count(), 0) # Create the job itself. - result = self.post(url, data, expect=202, remote_addr=host_ip) + result = self.post(url, data, expect=201, remote_addr=host_ip) # Establish that we got back what we expect, and made the changes # that we expect. @@ -803,9 +818,24 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): self.assertEqual(job.hosts.count(), 1) self.assertEqual(job.hosts.all()[0], host) + # Create the job itself using URL-encoded form data instead of JSON. + result = self.post(url, data, expect=201, remote_addr=host_ip, data_type='form') + + # Establish that we got back what we expect, and made the changes + # that we expect. + self.assertTrue('Location' in result.response, result.response) + self.assertEqual(jobs_qs.count(), 2) + job = jobs_qs[0] + self.assertEqual(urlparse.urlsplit(result.response['Location']).path, + job.get_absolute_url()) + self.assertEqual(job.launch_type, 'callback') + self.assertEqual(job.limit, host.name) + self.assertEqual(job.hosts.count(), 1) + self.assertEqual(job.hosts.all()[0], host) + # Run the callback job again with extra vars and verify their presence data.update(dict(extra_vars=dict(key="value"))) - result = self.post(url, data, expect=202, remote_addr=host_ip) + result = self.post(url, data, expect=201, remote_addr=host_ip) jobs_qs = job_template.jobs.filter(launch_type='callback').order_by('-pk') job = jobs_qs[0] self.assertTrue("key" in job.extra_vars) @@ -853,9 +883,9 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): if host_ip: break self.assertTrue(host) - self.assertEqual(jobs_qs.count(), 2) - self.post(url, data, expect=202, remote_addr=host_ip) self.assertEqual(jobs_qs.count(), 3) + self.post(url, data, expect=201, remote_addr=host_ip) + self.assertEqual(jobs_qs.count(), 4) job = jobs_qs[0] self.assertEqual(job.launch_type, 'callback') self.assertEqual(job.limit, host.name) @@ -878,9 +908,9 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): if host_ip: break self.assertTrue(host) - self.assertEqual(jobs_qs.count(), 3) - self.post(url, data, expect=202, remote_addr=host_ip) self.assertEqual(jobs_qs.count(), 4) + self.post(url, data, expect=201, remote_addr=host_ip) + self.assertEqual(jobs_qs.count(), 5) job = jobs_qs[0] self.assertEqual(job.launch_type, 'callback') self.assertEqual(job.limit, host.name) @@ -892,9 +922,9 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): host_qs = host_qs.filter(variables__icontains='ansible_ssh_host') host = host_qs[0] host_ip = host.variables_dict['ansible_ssh_host'] - self.assertEqual(jobs_qs.count(), 4) - self.post(url, data, expect=202, remote_addr=host_ip) self.assertEqual(jobs_qs.count(), 5) + self.post(url, data, expect=201, remote_addr=host_ip) + self.assertEqual(jobs_qs.count(), 6) job = jobs_qs[0] self.assertEqual(job.launch_type, 'callback') self.assertEqual(job.limit, host.name) @@ -903,8 +933,10 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): # Set a limit on the job template to verify the callback job limit is # set to the intersection of this limit and the host name. - job_template.limit = 'bakers:slicers:packagers' - job_template.save(update_fields=['limit']) + # job_template.limit = 'bakers:slicers:packagers' + # job_template.save(update_fields=['limit']) + JobTemplate.objects.filter(pk=job_template.pk).update(limit='bakers:slicers:packagers') + job_template = JobTemplate.objects.get(pk=job_template.pk) # Try when hostname is also an IP address, even if a different one is # specified via ansible_ssh_host. @@ -924,12 +956,12 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): host_ip = list(ips)[0] break self.assertTrue(host) - self.assertEqual(jobs_qs.count(), 5) - self.post(url, data, expect=202, remote_addr=host_ip) self.assertEqual(jobs_qs.count(), 6) + self.post(url, data, expect=201, remote_addr=host_ip) + self.assertEqual(jobs_qs.count(), 7) job = jobs_qs[0] self.assertEqual(job.launch_type, 'callback') - self.assertEqual(job.limit, ':&'.join([job_template.limit, host.name])) + self.assertEqual(job.limit, host.name) self.assertEqual(job.hosts.count(), 1) self.assertEqual(job.hosts.all()[0], host) @@ -1002,6 +1034,7 @@ class JobTemplateCallbackTest(BaseJobTestMixin, django.test.LiveServerTestCase): self.post(url, data, expect=400, remote_addr=host_ip) +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, ANSIBLE_TRANSPORT='local') @@ -1025,7 +1058,7 @@ class JobTransactionTest(BaseJobTestMixin, django.test.LiveServerTestCase): data = json.loads(response.content) if data.get('status', '') not in ('new', 'pending', 'running'): break - except Exception, e: + except Exception as e: errors.append(e) break @@ -1061,12 +1094,13 @@ class JobTransactionTest(BaseJobTestMixin, django.test.LiveServerTestCase): response = self.get(url) self.assertTrue(response['can_start']) self.assertFalse(response['passwords_needed_to_start']) - response = self.post(url, {}, expect=202) + response = self.post(url, {}, expect=201) job = Job.objects.get(pk=job.pk) self.assertEqual(job.status, 'successful', job.result_stdout) self.assertFalse(errors) -class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') +class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase): def setUp(self): super(JobTemplateSurveyTest, self).setUp() # TODO: Test non-enterprise license @@ -1075,27 +1109,6 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): def tearDown(self): super(JobTemplateSurveyTest, self).tearDown() - def test_post_patch_job_template_survey_wrong_license(self): - url = reverse('api:job_template_list') - data = dict( - name = 'launched job template', - job_type = PERM_INVENTORY_DEPLOY, - inventory = self.inv_eng.pk, - project = self.proj_dev.pk, - playbook = self.proj_dev.playbooks[0], - credential = self.cred_sue.pk, - survey_enabled = True, - ) - self.create_test_license_file(features=dict(surveys=False)) - with self.current_user(self.user_sue): - self.post(url, data, expect=402) - data['survey_enabled'] = False - with self.current_user(self.user_sue): - response = self.post(url, data, expect=201) - jt_url = reverse('api:job_template_detail', args=(response['id'],)) - with self.current_user(self.user_sue): - self.patch(jt_url, dict(survey_enabled=True), expect=402) - def test_post_job_template_survey(self): url = reverse('api:job_template_list') data = dict( @@ -1120,14 +1133,14 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): # should return, and should be able to launch template without error. response = self.get(launch_url) self.assertFalse(response['survey_enabled']) - self.post(launch_url, {}, expect=202) + self.post(launch_url, {}, expect=201) # Now post a survey spec and check that the answer is set in the # job's extra vars. self.post(url, json.loads(TEST_SIMPLE_REQUIRED_SURVEY), expect=200) response = self.get(launch_url) self.assertTrue(response['survey_enabled']) self.assertTrue('favorite_color' in response['variables_needed_to_start']) - response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=202) + response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=201) job = Job.objects.get(pk=response["job"]) job_extra = json.loads(job.extra_vars) self.assertTrue("favorite_color" in job_extra) @@ -1161,7 +1174,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): with self.current_user(self.user_sue): response = self.post(url, json.loads(TEST_SURVEY_REQUIREMENTS), expect=200) # Just the required answer should work - self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=202) + self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=201) # Short answer but requires a long answer self.post(launch_url, dict(extra_vars=dict(long_answer='a', reqd_answer="foo")), expect=400) # Long answer but requires a short answer @@ -1173,9 +1186,9 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): # Integer that's too big self.post(launch_url, dict(extra_vars=dict(int_answer=10, reqd_answer="foo")), expect=400) # Integer that's just riiiiight - self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=202) + self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=201) # Integer bigger than min with no max defined - self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=202) + self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=201) # Integer answer that's the wrong type self.post(launch_url, dict(extra_vars=dict(int_answer="test", reqd_answer="foo")), expect=400) # Float that's too big @@ -1183,7 +1196,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): # Float that's too small self.post(launch_url, dict(extra_vars=dict(float_answer=1.995, reqd_answer="foo")), expect=400) # float that's just riiiiight - self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=202) + self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=201) # float answer that's the wrong type self.post(launch_url, dict(extra_vars=dict(float_answer="test", reqd_answer="foo")), expect=400) # Wrong choice in single choice @@ -1193,11 +1206,11 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): # Wrong type for multi choicen self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice="two")), expect=400) # Right choice in single choice - self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=202) + self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=201) # Right choices in multi choice - self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=202) + self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=201) # Nested json - self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=202) + self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=201) # Bob can access and update the survey because he's an org-admin with self.current_user(self.user_bob): @@ -1220,11 +1233,11 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TestCase): self.get(url, expect=200) with self.current_user(self.user_chuck): - self.get(url, expect=200) + self.get(url, expect=200) # Doug and Juan can't with self.current_user(self.user_doug): self.get(url, expect=403) - + with self.current_user(self.user_juan): - self.get(url, expect=403) + self.get(url, expect=403) diff --git a/awx/main/tests/jobs/start_cancel.py b/awx/main/tests/old/jobs/start_cancel.py similarity index 97% rename from awx/main/tests/jobs/start_cancel.py rename to awx/main/tests/old/jobs/start_cancel.py index 54ff2255d9..3a6957af69 100644 --- a/awx/main/tests/jobs/start_cancel.py +++ b/awx/main/tests/old/jobs/start_cancel.py @@ -3,6 +3,8 @@ # Python from __future__ import absolute_import +import os +import unittest2 as unittest # Django from django.core.urlresolvers import reverse @@ -11,10 +13,11 @@ from django.conf import settings # AWX from awx.main.models import * # noqa from awx.main.tests.base import BaseLiveServerTest -from .base import BaseJobTestMixin +from awx.main.tests.job_base import BaseJobTestMixin __all__ = ['JobStartCancelTest',] +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class JobStartCancelTest(BaseJobTestMixin, BaseLiveServerTest): def test_job_start(self): @@ -92,7 +95,7 @@ class JobStartCancelTest(BaseJobTestMixin, BaseLiveServerTest): # self.assertEqual(job.status, 'failed') # Test with a job that prompts for SSH unlock key, given the right key. - from awx.main.tests.tasks import TEST_SSH_KEY_DATA_UNLOCK + from awx.main.tests.data.ssh import TEST_SSH_KEY_DATA_UNLOCK # job = self.jt_ops_west_run.create_job( # credential=self.cred_greg, # created_by=self.user_sue, diff --git a/awx/main/tests/jobs/survey_password.py b/awx/main/tests/old/jobs/survey_password.py similarity index 99% rename from awx/main/tests/jobs/survey_password.py rename to awx/main/tests/old/jobs/survey_password.py index c5243712b5..f7588301d8 100644 --- a/awx/main/tests/jobs/survey_password.py +++ b/awx/main/tests/old/jobs/survey_password.py @@ -87,7 +87,7 @@ TEST_COMPLEX_SURVEY = ''' TEST_SINGLE_PASSWORDS = [ - { + { 'description': 'Single instance with a . after', 'text' : 'See spot. See spot run. See spot run %s. That is a fast run.' % PASSWORD, 'passwords': [PASSWORD], @@ -233,5 +233,5 @@ class SurveyPasswordRedactedTest(SurveyPasswordBaseTest): # should redact values in extra_vars def test_redact_job_extra_vars(self): for test in self.tests['simple']: - response = self._get_url_job_details(test['job']) + response = self._get_url_job_details(test['job']) self.check_extra_vars_redacted(test, response) diff --git a/awx/main/tests/projects.py b/awx/main/tests/old/projects.py similarity index 80% rename from awx/main/tests/projects.py rename to awx/main/tests/old/projects.py index d12fd89e7b..01c459b794 100644 --- a/awx/main/tests/projects.py +++ b/awx/main/tests/old/projects.py @@ -21,7 +21,13 @@ from django.utils.timezone import now # AWX from awx.main.models import * # noqa from awx.main.tests.base import BaseTransactionTest -from awx.main.tests.tasks import TEST_SSH_KEY_DATA, TEST_SSH_KEY_DATA_LOCKED, TEST_SSH_KEY_DATA_UNLOCK, TEST_OPENSSH_KEY_DATA, TEST_OPENSSH_KEY_DATA_LOCKED +from awx.main.tests.data.ssh import ( + #TEST_SSH_KEY_DATA, + TEST_SSH_KEY_DATA_LOCKED, + TEST_SSH_KEY_DATA_UNLOCK, + #TEST_OPENSSH_KEY_DATA, + #TEST_OPENSSH_KEY_DATA_LOCKED, +) from awx.main.utils import decrypt_field, update_scm_url TEST_PLAYBOOK = '''- hosts: mygroup @@ -53,8 +59,8 @@ class ProjectsTest(BaseTransactionTest): self.organizations[1].projects.add(project) for project in self.projects[9:10]: self.organizations[2].projects.add(project) - self.organizations[0].projects.add(self.projects[-1]) - self.organizations[9].projects.add(self.projects[-2]) + #self.organizations[0].projects.add(self.projects[-1]) + #self.organizations[9].projects.add(self.projects[-2]) # get the URL for various organization records self.a_detail_url = "%s%s" % (self.collection(), self.organizations[0].pk) @@ -69,10 +75,10 @@ class ProjectsTest(BaseTransactionTest): for x in self.organizations: # NOTE: superuser does not have to be explicitly added to admin group # x.admins.add(self.super_django_user) - x.users.add(self.super_django_user) + x.member_role.members.add(self.super_django_user) - self.organizations[0].users.add(self.normal_django_user) - self.organizations[1].admins.add(self.normal_django_user) + self.organizations[0].member_role.members.add(self.normal_django_user) + self.organizations[1].admin_role.members.add(self.normal_django_user) self.team1 = Team.objects.create( name = 'team1', organization = self.organizations[0] @@ -83,16 +89,18 @@ class ProjectsTest(BaseTransactionTest): ) # create some teams in the first org - self.team1.projects.add(self.projects[0]) - self.team2.projects.add(self.projects[1]) - self.team2.projects.add(self.projects[2]) - self.team2.projects.add(self.projects[3]) - self.team2.projects.add(self.projects[4]) - self.team2.projects.add(self.projects[5]) + #self.team1.projects.add(self.projects[0]) + self.projects[0].admin_role.parents.add(self.team1.member_role) + #self.team1.projects.add(self.projects[0]) + self.team2.member_role.children.add(self.projects[1].admin_role) + self.team2.member_role.children.add(self.projects[2].admin_role) + self.team2.member_role.children.add(self.projects[3].admin_role) + self.team2.member_role.children.add(self.projects[4].admin_role) + self.team2.member_role.children.add(self.projects[5].admin_role) self.team1.save() self.team2.save() - self.team1.users.add(self.normal_django_user) - self.team2.users.add(self.other_django_user) + self.team1.member_role.members.add(self.normal_django_user) + self.team2.member_role.members.add(self.other_django_user) def test_playbooks(self): def write_test_file(project, name, content): @@ -156,14 +164,14 @@ class ProjectsTest(BaseTransactionTest): set(Project.get_local_path_choices())) # return local paths are only the ones not used by any active project. - qs = Project.objects.filter(active=True) + qs = Project.objects used_paths = qs.values_list('local_path', flat=True) self.assertFalse(set(response['project_local_paths']) & set(used_paths)) for project in self.projects: local_path = project.local_path response = self.get(url, expect=200, auth=self.get_super_credentials()) self.assertTrue(local_path not in response['project_local_paths']) - project.mark_inactive() + project.delete() response = self.get(url, expect=200, auth=self.get_super_credentials()) self.assertTrue(local_path in response['project_local_paths']) @@ -209,7 +217,7 @@ class ProjectsTest(BaseTransactionTest): self.assertEquals(results['count'], 10) # org admin results = self.get(projects, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(results['count'], 9) + self.assertEquals(results['count'], 6) # user on a team results = self.get(projects, expect=200, auth=self.get_other_credentials()) self.assertEquals(results['count'], 5) @@ -225,12 +233,20 @@ class ProjectsTest(BaseTransactionTest): 'description': 'Does amazing things', 'local_path': os.path.basename(project_dir), 'scm_type': None, + 'scm_update_on_launch': '', + 'scm_delete_on_update': None, + 'scm_clean': False, + 'organization': self.organizations[0].pk, } # Adding a project with scm_type=None should work, but scm_type will be - # changed to an empty string. + # changed to an empty string. Other boolean fields should accept null + # or an empty string for False, but save the value as a boolean. response = self.post(projects, project_data, expect=201, auth=self.get_super_credentials()) self.assertEqual(response['scm_type'], u'') + self.assertEqual(response['scm_update_on_launch'], False) + self.assertEqual(response['scm_delete_on_update'], False) + self.assertEqual(response['scm_clean'], False) # can edit project using same local path. project_detail = reverse('api:project_detail', args=(response['id'],)) @@ -238,7 +254,7 @@ class ProjectsTest(BaseTransactionTest): auth=self.get_super_credentials()) response = self.put(project_detail, project_data, expect=200, auth=self.get_super_credentials()) - + # cannot update using local_path from another project. project_data['local_path'] = self.projects[2].local_path response = self.put(project_detail, project_data, expect=400, @@ -281,35 +297,7 @@ class ProjectsTest(BaseTransactionTest): # can list playbooks for projects proj_playbooks = reverse('api:project_playbooks', args=(self.projects[2].pk,)) got = self.get(proj_playbooks, expect=200, auth=self.get_super_credentials()) - got_new = [] - for g in got: - got_new.append(g.encode('utf-8')) - self.assertEqual(got_new, self.projects[2].playbooks) - - # can list member organizations for projects - proj_orgs = reverse('api:project_organizations_list', args=(self.projects[0].pk,)) - # only usable as superuser - got = self.get(proj_orgs, expect=200, auth=self.get_normal_credentials()) - got = self.get(proj_orgs, expect=200, auth=self.get_super_credentials()) - self.get(proj_orgs, expect=403, auth=self.get_other_credentials()) - self.assertEquals(got['count'], 1) - self.assertEquals(got['results'][0]['url'], reverse('api:organization_detail', args=(self.organizations[0].pk,))) - - # post to create new org associated with this project. - self.post(proj_orgs, data={'name': 'New Org'}, expect=201, auth=self.get_super_credentials()) - got = self.get(proj_orgs, expect=200, auth=self.get_super_credentials()) - self.assertEquals(got['count'], 2) - - # Verify that creatorship doesn't imply access if access is removed - a_new_proj = self.make_project(created_by=self.other_django_user, playbook_content=TEST_PLAYBOOK) - self.organizations[0].admins.add(self.other_django_user) - self.organizations[0].projects.add(a_new_proj) - proj_detail = reverse('api:project_detail', args=(a_new_proj.pk,)) - self.patch(proj_detail, data=dict(description="test"), expect=200, auth=self.get_other_credentials()) - self.organizations[0].admins.remove(self.other_django_user) - self.patch(proj_detail, data=dict(description="test_now"), expect=403, auth=self.get_other_credentials()) - self.delete(proj_detail, expect=403, auth=self.get_other_credentials()) - a_new_proj.delete() + self.assertEqual(got, self.projects[2].playbooks) # ===================================================================== # TEAMS @@ -327,7 +315,7 @@ class ProjectsTest(BaseTransactionTest): self.assertEquals(got['url'], reverse('api:team_detail', args=(self.team1.pk,))) got = self.get(team1, expect=200, auth=self.get_normal_credentials()) got = self.get(team1, expect=403, auth=self.get_other_credentials()) - self.team1.users.add(User.objects.get(username='other')) + self.team1.member_role.members.add(User.objects.get(username='other')) self.team1.save() got = self.get(team1, expect=200, auth=self.get_other_credentials()) got = self.get(team1, expect=403, auth=self.get_nobody_credentials()) @@ -391,14 +379,14 @@ class ProjectsTest(BaseTransactionTest): # ===================================================================== # TEAM PROJECTS - - team = Team.objects.filter(active=True, organization__pk=self.organizations[1].pk)[0] + + team = Team.objects.filter( organization__pk=self.organizations[1].pk)[0] team_projects = reverse('api:team_projects_list', args=(team.pk,)) - + p1 = self.projects[0] - team.projects.add(p1) + team.member_role.children.add(p1.admin_role) team.save() - + got = self.get(team_projects, expect=200, auth=self.get_super_credentials()) # FIXME: project postablility tests somewhat incomplete. @@ -409,10 +397,10 @@ class ProjectsTest(BaseTransactionTest): # ===================================================================== # TEAMS USER MEMBERSHIP - team = Team.objects.filter(active=True, organization__pk=self.organizations[1].pk)[0] + team = Team.objects.filter( organization__pk=self.organizations[1].pk)[0] team_users = reverse('api:team_users_list', args=(team.pk,)) - for x in team.users.all(): - team.users.remove(x) + for x in team.member_role.members.all(): + team.member_role.members.remove(x) team.save() # can list uses on teams @@ -430,13 +418,13 @@ class ProjectsTest(BaseTransactionTest): self.post(team_users, data=dict(x, is_superuser=False), expect=204, auth=self.get_normal_credentials()) # The normal admin user can't create a super user vicariously through the team/project - self.post(team_users, data=dict(username='attempted_superuser_create', password='thepassword', + self.post(team_users, data=dict(username='attempted_superuser_create', password='thepassword', is_superuser=True), expect=403, auth=self.get_normal_credentials()) # ... but a superuser can self.post(team_users, data=dict(username='attempted_superuser_create', password='thepassword', is_superuser=True), expect=201, auth=self.get_super_credentials()) - self.assertEqual(Team.objects.get(pk=team.pk).users.count(), 5) + self.assertEqual(Team.objects.get(pk=team.pk).member_role.members.count(), all_users['count'] + 1) # can remove users from teams for x in all_users['results']: @@ -444,7 +432,7 @@ class ProjectsTest(BaseTransactionTest): self.post(team_users, data=y, expect=403, auth=self.get_nobody_credentials()) self.post(team_users, data=y, expect=204, auth=self.get_normal_credentials()) - self.assertEquals(Team.objects.get(pk=team.pk).users.count(), 1) # Leaving just the super user we created + self.assertEquals(Team.objects.get(pk=team.pk).member_role.members.count(), 1) # Leaving just the super user we created # ===================================================================== # USER TEAMS @@ -455,9 +443,12 @@ class ProjectsTest(BaseTransactionTest): self.get(url, expect=401) self.get(url, expect=401, auth=self.get_invalid_credentials()) self.get(url, expect=403, auth=self.get_nobody_credentials()) - other.organizations.add(Organization.objects.get(pk=self.organizations[1].pk)) + self.organizations[1].member_role.members.add(other) # Normal user can only see some teams that other user is a part of, # since normal user is not an admin of that organization. + my_teams1 = self.get(url, expect=200, auth=self.get_normal_credentials()) + my_teams2 = self.get(url, expect=200, auth=self.get_other_credentials()) + my_teams1 = self.get(url, expect=200, auth=self.get_normal_credentials()) self.assertEqual(my_teams1['count'], 1) # Other user should be able to see all his own teams. @@ -478,301 +469,7 @@ class ProjectsTest(BaseTransactionTest): got = self.get(url, expect=401) got = self.get(url, expect=200, auth=self.get_super_credentials()) - # ===================================================================== - # CREDENTIALS - other_creds = reverse('api:user_credentials_list', args=(other.pk,)) - team_creds = reverse('api:team_credentials_list', args=(team.pk,)) - - new_credentials = dict( - name = 'credential', - project = Project.objects.order_by('pk')[0].pk, - default_username = 'foo', - ssh_key_data = TEST_SSH_KEY_DATA_LOCKED, - ssh_key_unlock = TEST_SSH_KEY_DATA_UNLOCK, - ssh_password = 'narf', - sudo_password = 'troz' - ) - - # can add credentials to a user (if user or org admin or super user) - self.post(other_creds, data=new_credentials, expect=401) - self.post(other_creds, data=new_credentials, expect=401, auth=self.get_invalid_credentials()) - new_credentials['team'] = team.pk - result = self.post(other_creds, data=new_credentials, expect=201, auth=self.get_super_credentials()) - cred_user = result['id'] - self.assertEqual(result['team'], None) - del new_credentials['team'] - new_credentials['name'] = 'credential2' - self.post(other_creds, data=new_credentials, expect=201, auth=self.get_normal_credentials()) - new_credentials['name'] = 'credential3' - result = self.post(other_creds, data=new_credentials, expect=201, auth=self.get_other_credentials()) - new_credentials['name'] = 'credential4' - self.post(other_creds, data=new_credentials, expect=403, auth=self.get_nobody_credentials()) - - # can add credentials to a team - new_credentials['name'] = 'credential' - new_credentials['user'] = other.pk - self.post(team_creds, data=new_credentials, expect=401) - self.post(team_creds, data=new_credentials, expect=401, auth=self.get_invalid_credentials()) - result = self.post(team_creds, data=new_credentials, expect=201, auth=self.get_super_credentials()) - self.assertEqual(result['user'], None) - del new_credentials['user'] - new_credentials['name'] = 'credential2' - result = self.post(team_creds, data=new_credentials, expect=201, auth=self.get_normal_credentials()) - new_credentials['name'] = 'credential3' - self.post(team_creds, data=new_credentials, expect=403, auth=self.get_other_credentials()) - self.post(team_creds, data=new_credentials, expect=403, auth=self.get_nobody_credentials()) - cred_team = result['id'] - - # can list credentials on a user - self.get(other_creds, expect=401) - self.get(other_creds, expect=401, auth=self.get_invalid_credentials()) - self.get(other_creds, expect=200, auth=self.get_super_credentials()) - self.get(other_creds, expect=200, auth=self.get_normal_credentials()) - self.get(other_creds, expect=200, auth=self.get_other_credentials()) - self.get(other_creds, expect=403, auth=self.get_nobody_credentials()) - - # can list credentials on a team - self.get(team_creds, expect=401) - self.get(team_creds, expect=401, auth=self.get_invalid_credentials()) - self.get(team_creds, expect=200, auth=self.get_super_credentials()) - self.get(team_creds, expect=200, auth=self.get_normal_credentials()) - self.get(team_creds, expect=403, auth=self.get_other_credentials()) - self.get(team_creds, expect=403, auth=self.get_nobody_credentials()) - - # Check /api/v1/credentials (GET) - url = reverse('api:credential_list') - with self.current_user(self.super_django_user): - self.options(url) - self.head(url) - response = self.get(url) - qs = Credential.objects.all() - self.check_pagination_and_size(response, qs.count()) - self.check_list_ids(response, qs) - - # POST should now work for all users. - with self.current_user(self.super_django_user): - data = dict(name='xyz', user=self.super_django_user.pk) - self.post(url, data, expect=201) - - # Repeating the same POST should violate a unique constraint. - with self.current_user(self.super_django_user): - data = dict(name='xyz', user=self.super_django_user.pk) - self.post(url, data, expect=400) - - # Test with null where we expect a string value. - with self.current_user(self.super_django_user): - data = dict(name='zyx', user=self.super_django_user.pk, kind='ssh', - become_username=None) - self.post(url, data, expect=400) - - # Test with encrypted ssh key and no unlock password. - with self.current_user(self.super_django_user): - data = dict(name='wxy', user=self.super_django_user.pk, kind='ssh', - ssh_key_data=TEST_SSH_KEY_DATA_LOCKED) - self.post(url, data, expect=400) - data['ssh_key_unlock'] = TEST_SSH_KEY_DATA_UNLOCK - self.post(url, data, expect=201) - - # Test with invalid ssh key data. - with self.current_user(self.super_django_user): - bad_key_data = TEST_SSH_KEY_DATA.replace('PRIVATE', 'PUBLIC') - data = dict(name='wyx', user=self.super_django_user.pk, kind='ssh', - ssh_key_data=bad_key_data) - self.post(url, data, expect=400) - data['ssh_key_data'] = TEST_SSH_KEY_DATA.replace('-', '=') - self.post(url, data, expect=400) - data['ssh_key_data'] = '\n'.join(TEST_SSH_KEY_DATA.splitlines()[1:-1]) - self.post(url, data, expect=400) - data['ssh_key_data'] = TEST_SSH_KEY_DATA.replace('--B', '---B') - self.post(url, data, expect=400) - data['ssh_key_data'] = TEST_SSH_KEY_DATA - self.post(url, data, expect=201) - - # Test with OpenSSH format private key. - with self.current_user(self.super_django_user): - data = dict(name='openssh-unlocked', user=self.super_django_user.pk, kind='ssh', - ssh_key_data=TEST_OPENSSH_KEY_DATA) - self.post(url, data, expect=201) - - # Test with OpenSSH format private key that requires passphrase. - with self.current_user(self.super_django_user): - data = dict(name='openssh-locked', user=self.super_django_user.pk, kind='ssh', - ssh_key_data=TEST_OPENSSH_KEY_DATA_LOCKED) - self.post(url, data, expect=400) - data['ssh_key_unlock'] = TEST_SSH_KEY_DATA_UNLOCK - self.post(url, data, expect=201) - - # Test post as organization admin where team is part of org, but user - # creating credential is not a member of the team. UI may pass user - # as an empty string instead of None. - normal_org = self.normal_django_user.admin_of_organizations.all()[0] - org_team = normal_org.teams.create(name='new empty team') - with self.current_user(self.normal_django_user): - data = { - 'name': 'my team cred', - 'team': org_team.pk, - 'user': '', - } - self.post(url, data, expect=201) - - # FIXME: Check list as other users. - - # can edit a credential - cred_user = Credential.objects.get(pk=cred_user) - cred_team = Credential.objects.get(pk=cred_team) - d_cred_user = dict(id=cred_user.pk, name='x', sudo_password='blippy', user=cred_user.user.pk) - d_cred_user2 = dict(id=cred_user.pk, name='x', sudo_password='blippy', user=self.super_django_user.pk) - d_cred_team = dict(id=cred_team.pk, name='x', sudo_password='blippy', team=cred_team.team.pk) - edit_creds1 = reverse('api:credential_detail', args=(cred_user.pk,)) - edit_creds2 = reverse('api:credential_detail', args=(cred_team.pk,)) - - self.put(edit_creds1, data=d_cred_user, expect=401) - self.put(edit_creds1, data=d_cred_user, expect=401, auth=self.get_invalid_credentials()) - self.put(edit_creds1, data=d_cred_user, expect=200, auth=self.get_super_credentials()) - self.put(edit_creds1, data=d_cred_user, expect=200, auth=self.get_normal_credentials()) - - # We now allow credential to be reassigned (with the right permissions). - cred_put_u = self.put(edit_creds1, data=d_cred_user2, expect=200, auth=self.get_normal_credentials()) - self.put(edit_creds1, data=d_cred_user, expect=403, auth=self.get_other_credentials()) - - self.put(edit_creds2, data=d_cred_team, expect=401) - self.put(edit_creds2, data=d_cred_team, expect=401, auth=self.get_invalid_credentials()) - self.put(edit_creds2, data=d_cred_team, expect=200, auth=self.get_super_credentials()) - cred_put_t = self.put(edit_creds2, data=d_cred_team, expect=200, auth=self.get_normal_credentials()) - self.put(edit_creds2, data=d_cred_team, expect=403, auth=self.get_other_credentials()) - - # Reassign credential between team and user. - with self.current_user(self.super_django_user): - self.post(team_creds, data=dict(id=cred_user.pk), expect=204) - response = self.get(edit_creds1) - self.assertEqual(response['team'], team.pk) - self.assertEqual(response['user'], None) - self.post(other_creds, data=dict(id=cred_user.pk), expect=204) - response = self.get(edit_creds1) - self.assertEqual(response['team'], None) - self.assertEqual(response['user'], other.pk) - self.post(other_creds, data=dict(id=cred_team.pk), expect=204) - response = self.get(edit_creds2) - self.assertEqual(response['team'], None) - self.assertEqual(response['user'], other.pk) - self.post(team_creds, data=dict(id=cred_team.pk), expect=204) - response = self.get(edit_creds2) - self.assertEqual(response['team'], team.pk) - self.assertEqual(response['user'], None) - - cred_put_t['disassociate'] = 1 - team_url = reverse('api:team_credentials_list', args=(cred_put_t['team'],)) - self.post(team_url, data=cred_put_t, expect=204, auth=self.get_normal_credentials()) - - # can remove credentials from a user (via disassociate) - this will delete the credential. - cred_put_u['disassociate'] = 1 - url = cred_put_u['url'] - user_url = reverse('api:user_credentials_list', args=(cred_put_u['user'],)) - self.post(user_url, data=cred_put_u, expect=204, auth=self.get_normal_credentials()) - - # can delete a credential directly -- probably won't be used too often - #data = self.delete(url, expect=204, auth=self.get_other_credentials()) - data = self.delete(url, expect=404, auth=self.get_other_credentials()) - - # ===================================================================== - # PERMISSIONS - - user = self.other_django_user - team = Team.objects.order_by('pk')[0] - organization = Organization.objects.order_by('pk')[0] - inventory = Inventory.objects.create( - name = 'test inventory', - organization = organization, - created_by = self.super_django_user - ) - project = Project.objects.order_by('pk')[0] - - # can add permissions to a user - - user_permission = dict( - name='user can deploy a certain project to a certain inventory', - # user=user.pk, # no need to specify, this will be automatically filled in - inventory=inventory.pk, - project=project.pk, - permission_type=PERM_INVENTORY_DEPLOY - ) - team_permission = dict( - name='team can deploy a certain project to a certain inventory', - # team=team.pk, # no need to specify, this will be automatically filled in - inventory=inventory.pk, - project=project.pk, - permission_type=PERM_INVENTORY_DEPLOY - ) - - url = reverse('api:user_permissions_list', args=(user.pk,)) - posted = self.post(url, user_permission, expect=201, auth=self.get_super_credentials()) - url2 = posted['url'] - user_perm_detail = posted['url'] - got = self.get(url2, expect=200, auth=self.get_other_credentials()) - - # cannot add permissions that apply to both team and user - url = reverse('api:user_permissions_list', args=(user.pk,)) - user_permission['name'] = 'user permission 2' - user_permission['team'] = team.pk - self.post(url, user_permission, expect=400, auth=self.get_super_credentials()) - - # cannot set admin/read/write permissions when a project is involved. - user_permission.pop('team') - user_permission['name'] = 'user permission 3' - user_permission['permission_type'] = PERM_INVENTORY_ADMIN - self.post(url, user_permission, expect=400, auth=self.get_super_credentials()) - - # project is required for a deployment permission - user_permission['name'] = 'user permission 4' - user_permission['permission_type'] = PERM_INVENTORY_DEPLOY - user_permission.pop('project') - self.post(url, user_permission, expect=400, auth=self.get_super_credentials()) - - # can add permissions on a team - url = reverse('api:team_permissions_list', args=(team.pk,)) - posted = self.post(url, team_permission, expect=201, auth=self.get_super_credentials()) - url2 = posted['url'] - # check we can get that permission back - got = self.get(url2, expect=200, auth=self.get_other_credentials()) - - # cannot add permissions that apply to both team and user - url = reverse('api:team_permissions_list', args=(team.pk,)) - team_permission['name'] += '2' - team_permission['user'] = user.pk - self.post(url, team_permission, expect=400, auth=self.get_super_credentials()) - - # can list permissions on a user - url = reverse('api:user_permissions_list', args=(user.pk,)) - got = self.get(url, expect=200, auth=self.get_super_credentials()) - got = self.get(url, expect=200, auth=self.get_other_credentials()) - got = self.get(url, expect=403, auth=self.get_nobody_credentials()) - - # can list permissions on a team - url = reverse('api:team_permissions_list', args=(team.pk,)) - got = self.get(url, expect=200, auth=self.get_super_credentials()) - got = self.get(url, expect=200, auth=self.get_other_credentials()) - got = self.get(url, expect=403, auth=self.get_nobody_credentials()) - - # can edit a permission -- reducing the permission level - team_permission['permission_type'] = PERM_INVENTORY_CHECK - self.put(url2, team_permission, expect=200, auth=self.get_super_credentials()) - self.put(url2, team_permission, expect=403, auth=self.get_other_credentials()) - - # can remove permissions - # do need to disassociate, just delete it - self.delete(url2, expect=403, auth=self.get_other_credentials()) - self.delete(url2, expect=204, auth=self.get_super_credentials()) - self.delete(user_perm_detail, expect=204, auth=self.get_super_credentials()) - self.delete(url2, expect=404, auth=self.get_other_credentials()) - - # User is still a team member - self.get(reverse('api:project_detail', args=(project.pk,)), expect=200, auth=self.get_other_credentials()) - - team.users.remove(self.other_django_user) - - # User is no longer a team member and has no permissions - self.get(reverse('api:project_detail', args=(project.pk,)), expect=403, auth=self.get_other_credentials()) @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, @@ -806,7 +503,10 @@ class ProjectUpdatesTest(BaseTransactionTest): kw[field.replace('scm_key_', 'ssh_key_')] = kwargs.pop(field) else: kw[field.replace('scm_', '')] = kwargs.pop(field) + u = kw['user'] + del kw['user'] credential = Credential.objects.create(**kw) + credential.admin_role.members.add(u) kwargs['credential'] = credential project = Project.objects.create(**kwargs) project_path = project.get_project_path(check_if_exists=False) @@ -993,7 +693,7 @@ class ProjectUpdatesTest(BaseTransactionTest): new_url = new_url or url new_url_u = new_url_u or url new_url_up = new_url_up or url - + # Check existing URL as-is. if is_exception(new_url): self.assertRaises(new_url, update_scm_url, scm_type, url) @@ -1130,7 +830,7 @@ class ProjectUpdatesTest(BaseTransactionTest): after = file(path, 'rb').read() return path, before, after self.fail('no file found to change!') - + def check_project_scm(self, project): project = Project.objects.get(pk=project.pk) project_path = project.get_project_path(check_if_exists=False) @@ -1244,7 +944,7 @@ class ProjectUpdatesTest(BaseTransactionTest): else: self.check_project_update(project, should_fail=should_still_fail) # Test that we can delete project updates. - for pu in project.project_updates.filter(active=True): + for pu in project.project_updates.all(): pu_url = reverse('api:project_update_detail', args=(pu.pk,)) with self.current_user(self.super_django_user): self.delete(pu_url, expect=204) @@ -1256,11 +956,13 @@ class ProjectUpdatesTest(BaseTransactionTest): self.skipTest('no public git repo defined for https!') projects_url = reverse('api:project_list') credentials_url = reverse('api:credential_list') + org = self.make_organizations(self.super_django_user, 1)[0] # Test basic project creation without a credential. project_data = { 'name': 'my public git project over https', 'scm_type': 'git', 'scm_url': scm_url, + 'organization': org.id, } with self.current_user(self.super_django_user): self.post(projects_url, project_data, expect=201) @@ -1269,6 +971,7 @@ class ProjectUpdatesTest(BaseTransactionTest): 'name': 'my local git project', 'scm_type': 'git', 'scm_url': 'file:///path/to/repo.git', + 'organization': org.id, } with self.current_user(self.super_django_user): self.post(projects_url, project_data, expect=400) @@ -1288,6 +991,7 @@ class ProjectUpdatesTest(BaseTransactionTest): 'scm_type': 'git', 'scm_url': scm_url, 'credential': credential_id, + 'organization': org.id, } with self.current_user(self.super_django_user): self.post(projects_url, project_data, expect=201) @@ -1308,6 +1012,7 @@ class ProjectUpdatesTest(BaseTransactionTest): 'scm_type': 'git', 'scm_url': scm_url, 'credential': ssh_credential_id, + 'organization': org.id, } with self.current_user(self.super_django_user): self.post(projects_url, project_data, expect=400) @@ -1317,6 +1022,7 @@ class ProjectUpdatesTest(BaseTransactionTest): 'scm_type': 'git', 'scm_url': 'ssh://git@github.com/ansible/ansible.github.com.git', 'credential': credential_id, + 'organization': org.id, } with self.current_user(self.super_django_user): self.post(projects_url, project_data, expect=201) @@ -1327,13 +1033,14 @@ class ProjectUpdatesTest(BaseTransactionTest): if not all([scm_url]): self.skipTest('no public git repo defined for https!') projects_url = reverse('api:project_list') + org = self.make_organizations(self.super_django_user, 1)[0] project_data = { 'name': 'my public git project over https', 'scm_type': 'git', 'scm_url': scm_url, + 'organization': org.id, } - org = self.make_organizations(self.super_django_user, 1)[0] - org.admins.add(self.normal_django_user) + org.admin_role.members.add(self.normal_django_user) with self.current_user(self.super_django_user): del_proj = self.post(projects_url, project_data, expect=201) del_proj = Project.objects.get(pk=del_proj["id"]) @@ -1710,8 +1417,8 @@ class ProjectUpdatesTest(BaseTransactionTest): self.group = self.inventory.groups.create(name='test-group', inventory=self.inventory) self.group.hosts.add(self.host) - self.credential = Credential.objects.create(name='test-creds', - user=self.super_django_user) + self.credential = Credential.objects.create(name='test-creds') + self.credential.admin_role.members.add(self.super_django_user) self.project = self.create_project( name='my public git project over https', scm_type='git', @@ -1746,8 +1453,8 @@ class ProjectUpdatesTest(BaseTransactionTest): self.group = self.inventory.groups.create(name='test-group', inventory=self.inventory) self.group.hosts.add(self.host) - self.credential = Credential.objects.create(name='test-creds', - user=self.super_django_user) + self.credential = Credential.objects.create(name='test-creds') + self.credential.admin_role.members.add(self.super_django_user) self.project = self.create_project( name='my private git project over https', scm_type='git', diff --git a/awx/main/tests/schedules.py b/awx/main/tests/old/schedules.py similarity index 92% rename from awx/main/tests/schedules.py rename to awx/main/tests/old/schedules.py index a0ac11bb68..6433ee1351 100644 --- a/awx/main/tests/schedules.py +++ b/awx/main/tests/old/schedules.py @@ -14,12 +14,13 @@ from awx.main.tests.base import BaseTest __all__ = ['ScheduleTest'] -UNTIL_SCHEDULE = "DTSTART:20140331T075000Z RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=30230401T075000Z" +YESTERDAY = (datetime.date.today() - datetime.timedelta(1)).strftime('%Y%m%dT075000Z') +UNTIL_SCHEDULE = "DTSTART:%s RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=30230401T075000Z" % YESTERDAY EXPIRED_SCHEDULES = ["DTSTART:19340331T055000Z RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5"] INFINITE_SCHEDULES = ["DTSTART:30340331T055000Z RRULE:FREQ=MINUTELY;INTERVAL=10"] GOOD_SCHEDULES = ["DTSTART:20500331T055000Z RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5", "DTSTART:20240331T075000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1", - "DTSTART:20140331T075000Z RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=20230401T075000Z", + "DTSTART:%s RRULE:FREQ=MINUTELY;INTERVAL=1;UNTIL=20230401T075000Z" % YESTERDAY, "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR", "DTSTART:20140331T075000Z RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO", "DTSTART:20140331T075000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=6", @@ -53,15 +54,15 @@ class ScheduleTest(BaseTest): self.setup_instances() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 2) - self.organizations[0].admins.add(self.normal_django_user) - self.organizations[0].users.add(self.other_django_user) - self.organizations[0].users.add(self.normal_django_user) + self.organizations[0].admin_role.members.add(self.normal_django_user) + self.organizations[0].member_role.members.add(self.other_django_user) + self.organizations[0].member_role.members.add(self.normal_django_user) self.diff_org_user = self.make_user('fred') - self.organizations[1].users.add(self.diff_org_user) + self.organizations[1].member_role.members.add(self.diff_org_user) - self.cloud_source = Credential.objects.create(kind='awx', user=self.super_django_user, - username='Dummy', password='Dummy') + self.cloud_source = Credential.objects.create(kind='awx', username='Dummy', password='Dummy') + self.cloud_source.admin_role.members.add(self.super_django_user) self.first_inventory = Inventory.objects.create(name='test_inventory', description='for org 0', organization=self.organizations[0]) self.first_inventory.hosts.create(name='host_1') @@ -70,11 +71,7 @@ class ScheduleTest(BaseTest): self.first_inventory_source.source = 'ec2' self.first_inventory_source.save() - Permission.objects.create( - inventory = self.first_inventory, - user = self.other_django_user, - permission_type = 'read' - ) + self.first_inventory.read_role.members.add(self.other_django_user) self.second_inventory = Inventory.objects.create(name='test_inventory_2', description='for org 0', organization=self.organizations[0]) self.second_inventory.hosts.create(name='host_2') @@ -138,11 +135,7 @@ class ScheduleTest(BaseTest): self.post(first_url, data=unauth_schedule, expect=403) #give normal user write access and then they can post - Permission.objects.create( - user = self.other_django_user, - inventory = self.first_inventory, - permission_type = PERM_INVENTORY_WRITE - ) + self.first_inventory.admin_role.members.add(self.other_django_user) auth_schedule = unauth_schedule with self.current_user(self.other_django_user): self.post(first_url, data=auth_schedule, expect=201) diff --git a/awx/main/tests/scripts.py b/awx/main/tests/old/scripts.py similarity index 81% rename from awx/main/tests/scripts.py rename to awx/main/tests/old/scripts.py index 459070a868..e4cb90042d 100644 --- a/awx/main/tests/scripts.py +++ b/awx/main/tests/old/scripts.py @@ -87,13 +87,15 @@ class InventoryScriptTest(BaseScriptTest): host = inventory.hosts.create(name='host-%02d-%02d.example.com' % (n, x), inventory=inventory, variables=variables) - if x in (3, 7): - host.mark_inactive() + #if x in (3, 7): + # host.delete() + # continue hosts.append(host) + # add localhost just to make sure it's thrown into all (Ansible github bug) local = inventory.hosts.create(name='localhost', inventory=inventory, variables={}) - hosts.append(local) + hosts.append(local) self.hosts.extend(hosts) groups = [] @@ -105,8 +107,9 @@ class InventoryScriptTest(BaseScriptTest): group = inventory.groups.create(name='group-%d' % x, inventory=inventory, variables=variables) - if x == 2: - group.mark_inactive() + #if x == 2: + # #group.delete() + # #continue groups.append(group) group.hosts.add(hosts[x]) group.hosts.add(hosts[x + 5]) @@ -116,6 +119,13 @@ class InventoryScriptTest(BaseScriptTest): group.hosts.add(local) self.groups.extend(groups) + hosts[3].delete() + hosts[7].delete() + groups[2].delete() + + + + def tearDown(self): super(InventoryScriptTest, self).tearDown() self.stop_redis() @@ -130,7 +140,7 @@ class InventoryScriptTest(BaseScriptTest): os.environ.setdefault('REST_API_URL', rest_api_url) #os.environ.setdefault('REST_API_TOKEN', # self.super_django_user.auth_token.key) - name = os.path.join(os.path.dirname(__file__), '..', '..', 'plugins', + name = os.path.join(os.path.dirname(__file__), '..', '..', '..', 'plugins', 'inventory', 'awxrest.py') return self.run_script(name, *args, **options) @@ -144,12 +154,11 @@ class InventoryScriptTest(BaseScriptTest): def test_list_with_inventory_id_as_argument(self): inventory = self.inventories[0] - self.assertTrue(inventory.active) rc, stdout, stderr = self.run_inventory_script(list=True, inventory=inventory.pk) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - groups = inventory.groups.filter(active=True) + groups = inventory.groups groupnames = [ x for x in groups.values_list('name', flat=True)] # it's ok for all to be here because due to an Ansible inventory workaround @@ -161,20 +170,17 @@ class InventoryScriptTest(BaseScriptTest): # variable data or parent/child relationships. for k,v in data.items(): if k != 'all': - self.assertTrue(isinstance(v, dict)) - self.assertTrue(isinstance(v['children'], (list,tuple))) - self.assertTrue(isinstance(v['hosts'], (list,tuple))) - self.assertTrue(isinstance(v['vars'], (dict))) - group = inventory.groups.get(active=True, name=k) - hosts = group.hosts.filter(active=True) + assert isinstance(v, dict) + assert isinstance(v['children'], (list,tuple)) + assert isinstance(v['hosts'], (list,tuple)) + assert isinstance(v['vars'], (dict)) + group = inventory.groups.get(name=k) + hosts = group.hosts hostnames = hosts.values_list('name', flat=True) self.assertEqual(set(v['hosts']), set(hostnames)) else: - self.assertTrue(v['hosts'] == ['localhost']) + assert v['hosts'] == ['host-00-02.example.com', 'localhost'] - for group in inventory.groups.filter(active=False): - self.assertFalse(group.name in data.keys(), - 'deleted group %s should not be in data' % group) # Command line argument for inventory ID should take precedence over # environment variable. inventory_pks = set(map(lambda x: x.pk, self.inventories)) @@ -187,43 +193,41 @@ class InventoryScriptTest(BaseScriptTest): def test_list_with_inventory_id_in_environment(self): inventory = self.inventories[1] - self.assertTrue(inventory.active) os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script(list=True) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - groups = inventory.groups.filter(active=True) + groups = inventory.groups groupnames = list(groups.values_list('name', flat=True)) + ['all'] self.assertEqual(set(data.keys()), set(groupnames)) # Groups for this inventory should have hosts, variable data, and one # parent/child relationship. for k,v in data.items(): - self.assertTrue(isinstance(v, dict)) + assert isinstance(v, dict) if k == 'all': self.assertEqual(v.get('vars', {}), inventory.variables_dict) continue - group = inventory.groups.get(active=True, name=k) - hosts = group.hosts.filter(active=True) + group = inventory.groups.get(name=k) + hosts = group.hosts hostnames = hosts.values_list('name', flat=True) self.assertEqual(set(v.get('hosts', [])), set(hostnames)) if group.variables: self.assertEqual(v.get('vars', {}), group.variables_dict) if k == 'group-3': - children = group.children.filter(active=True) + children = group.children childnames = children.values_list('name', flat=True) self.assertEqual(set(v.get('children', [])), set(childnames)) else: - self.assertTrue(len(v['children']) == 0) + assert len(v['children']) == 0 def test_list_with_hostvars_inline(self): inventory = self.inventories[1] - self.assertTrue(inventory.active) rc, stdout, stderr = self.run_inventory_script(list=True, inventory=inventory.pk, hostvars=True) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - groups = inventory.groups.filter(active=True) + groups = inventory.groups groupnames = list(groups.values_list('name', flat=True)) groupnames.extend(['all', '_meta']) self.assertEqual(set(data.keys()), set(groupnames)) @@ -231,28 +235,28 @@ class InventoryScriptTest(BaseScriptTest): # Groups for this inventory should have hosts, variable data, and one # parent/child relationship. for k,v in data.items(): - self.assertTrue(isinstance(v, dict)) + assert isinstance(v, dict) if k == 'all': self.assertEqual(v.get('vars', {}), inventory.variables_dict) continue if k == '_meta': continue - group = inventory.groups.get(active=True, name=k) - hosts = group.hosts.filter(active=True) + group = inventory.groups.get(name=k) + hosts = group.hosts hostnames = hosts.values_list('name', flat=True) all_hostnames.update(hostnames) - self.assertEqual(set(v.get('hosts', [])), set(hostnames)) + assert set(v.get('hosts', [])) == set(hostnames) if group.variables: - self.assertEqual(v.get('vars', {}), group.variables_dict) + assert v.get('vars', {}) == group.variables_dict if k == 'group-3': - children = group.children.filter(active=True) + children = group.children childnames = children.values_list('name', flat=True) - self.assertEqual(set(v.get('children', [])), set(childnames)) + assert set(v.get('children', [])) == set(childnames) else: - self.assertTrue(len(v['children']) == 0) + assert len(v['children']) == 0 # Check hostvars in ['_meta']['hostvars'] dict. for hostname in all_hostnames: - self.assertTrue(hostname in data['_meta']['hostvars']) + assert hostname in data['_meta']['hostvars'] host = inventory.hosts.get(name=hostname) self.assertEqual(data['_meta']['hostvars'][hostname], host.variables_dict) @@ -262,13 +266,12 @@ class InventoryScriptTest(BaseScriptTest): inventory=inventory.pk) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - self.assertTrue('_meta' in data) + assert '_meta' in data def test_valid_host(self): # Host without variable data. inventory = self.inventories[0] - self.assertTrue(inventory.active) - host = inventory.hosts.filter(active=True)[2] + host = inventory.hosts.all()[2] os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script(host=host.name) self.assertEqual(rc, 0, stderr) @@ -276,8 +279,7 @@ class InventoryScriptTest(BaseScriptTest): self.assertEqual(data, {}) # Host with variable data. inventory = self.inventories[1] - self.assertTrue(inventory.active) - host = inventory.hosts.filter(active=True)[4] + host = inventory.hosts.all()[4] os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script(host=host.name) self.assertEqual(rc, 0, stderr) @@ -287,9 +289,7 @@ class InventoryScriptTest(BaseScriptTest): def test_invalid_host(self): # Valid host, but not part of the specified inventory. inventory = self.inventories[0] - self.assertTrue(inventory.active) - host = Host.objects.get(id=12) - self.assertTrue(host.active) + host = Host.objects.exclude(inventory=inventory)[0] os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script(host=host.name) self.assertNotEqual(rc, 0, stderr) @@ -321,16 +321,15 @@ class InventoryScriptTest(BaseScriptTest): def test_with_deleted_inventory(self): inventory = self.inventories[0] - inventory.mark_inactive() - self.assertFalse(inventory.active) - os.environ['INVENTORY_ID'] = str(inventory.pk) + pk = inventory.pk + inventory.delete() + os.environ['INVENTORY_ID'] = str(pk) rc, stdout, stderr = self.run_inventory_script(list=True) self.assertNotEqual(rc, 0, stderr) self.assertEqual(json.loads(stdout), {'failed': True}) def test_without_list_or_host_argument(self): inventory = self.inventories[0] - self.assertTrue(inventory.active) os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script() self.assertNotEqual(rc, 0, stderr) @@ -338,7 +337,6 @@ class InventoryScriptTest(BaseScriptTest): def test_with_both_list_and_host_arguments(self): inventory = self.inventories[0] - self.assertTrue(inventory.active) os.environ['INVENTORY_ID'] = str(inventory.pk) rc, stdout, stderr = self.run_inventory_script(list=True, host='blah') self.assertNotEqual(rc, 0, stderr) @@ -346,8 +344,7 @@ class InventoryScriptTest(BaseScriptTest): def test_with_disabled_hosts(self): inventory = self.inventories[1] - self.assertTrue(inventory.active) - for host in inventory.hosts.filter(active=True, enabled=True): + for host in inventory.hosts.filter(enabled=True): host.enabled = False host.save(update_fields=['enabled']) os.environ['INVENTORY_ID'] = str(inventory.pk) @@ -355,49 +352,49 @@ class InventoryScriptTest(BaseScriptTest): rc, stdout, stderr = self.run_inventory_script(list=True) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - groups = inventory.groups.filter(active=True) + groups = inventory.groups groupnames = list(groups.values_list('name', flat=True)) + ['all'] self.assertEqual(set(data.keys()), set(groupnames)) for k,v in data.items(): - self.assertTrue(isinstance(v, dict)) + assert isinstance(v, dict) if k == 'all': self.assertEqual(v.get('vars', {}), inventory.variables_dict) continue - group = inventory.groups.get(active=True, name=k) - hosts = group.hosts.filter(active=True, enabled=True) + group = inventory.groups.get(name=k) + hosts = group.hosts.filter(enabled=True) hostnames = hosts.values_list('name', flat=True) self.assertEqual(set(v.get('hosts', [])), set(hostnames)) self.assertFalse(hostnames) if group.variables: self.assertEqual(v.get('vars', {}), group.variables_dict) if k == 'group-3': - children = group.children.filter(active=True) + children = group.children childnames = children.values_list('name', flat=True) self.assertEqual(set(v.get('children', [])), set(childnames)) else: - self.assertTrue(len(v['children']) == 0) + assert len(v['children']) == 0 # Load inventory list with all hosts. rc, stdout, stderr = self.run_inventory_script(list=True, all=True) self.assertEqual(rc, 0, stderr) data = json.loads(stdout) - groups = inventory.groups.filter(active=True) + groups = inventory.groups groupnames = list(groups.values_list('name', flat=True)) + ['all'] self.assertEqual(set(data.keys()), set(groupnames)) for k,v in data.items(): - self.assertTrue(isinstance(v, dict)) + assert isinstance(v, dict) if k == 'all': self.assertEqual(v.get('vars', {}), inventory.variables_dict) continue - group = inventory.groups.get(active=True, name=k) - hosts = group.hosts.filter(active=True) + group = inventory.groups.get(name=k) + hosts = group.hosts hostnames = hosts.values_list('name', flat=True) self.assertEqual(set(v.get('hosts', [])), set(hostnames)) - self.assertTrue(hostnames) + assert hostnames if group.variables: self.assertEqual(v.get('vars', {}), group.variables_dict) if k == 'group-3': - children = group.children.filter(active=True) + children = group.children childnames = children.values_list('name', flat=True) self.assertEqual(set(v.get('children', [])), set(childnames)) else: - self.assertTrue(len(v['children']) == 0) + assert len(v['children']) == 0 diff --git a/awx/main/tests/old/settings.py b/awx/main/tests/old/settings.py new file mode 100644 index 0000000000..3c507ac992 --- /dev/null +++ b/awx/main/tests/old/settings.py @@ -0,0 +1,127 @@ +# Copyright (c) 2016 Ansible, Inc. +# All Rights Reserved. + +import pytest + +from awx.main.tests.base import BaseTest +from awx.main.models import * # noqa + +from django.core.urlresolvers import reverse +from django.test.utils import override_settings + +TEST_TOWER_SETTINGS_MANIFEST = { + "TEST_SETTING_INT": { + "name": "An Integer Field", + "description": "An Integer Field", + "default": 1, + "type": "int", + "category": "test" + }, + "TEST_SETTING_STRING": { + "name": "A String Field", + "description": "A String Field", + "default": "test", + "type": "string", + "category": "test" + }, + "TEST_SETTING_BOOL": { + "name": "A Bool Field", + "description": "A Bool Field", + "default": True, + "type": "bool", + "category": "test" + }, + "TEST_SETTING_LIST": { + "name": "A List Field", + "description": "A List Field", + "default": ["A", "Simple", "List"], + "type": "list", + "category": "test" + }, + "TEST_SETTING_JSON": { + "name": "A JSON Field", + "description": "A JSON Field", + "default": {"key": "value", "otherkey": ["list", "of", "things"]}, + "type": "json", + "category": "test" + } +} + +@override_settings(TOWER_SETTINGS_MANIFEST=TEST_TOWER_SETTINGS_MANIFEST) +@pytest.mark.skip(reason="Settings deferred to 3.1") +class SettingsPlaceholder(BaseTest): + + def setUp(self): + super(SettingsTest, self).setUp() + self.setup_instances() + self.setup_users() + + def get_settings(self, expected_count=5): + result = self.get(reverse('api:settings_list'), expect=200) + self.assertEqual(result['count'], expected_count) + return result['results'] + + def get_individual_setting(self, setting): + all_settings = self.get_settings() + setting_actual = None + for setting_item in all_settings: + if setting_item['key'] == setting: + setting_actual = setting_item + break + self.assertIsNotNone(setting_actual) + return setting_actual + + def set_setting(self, key, value): + self.post(reverse('api:settings_list'), data={"key": key, "value": value}, expect=201) + + def test_get_settings(self): + # Regular user should see nothing (no user settings yet) + with self.current_user(self.normal_django_user): + self.get_settings(expected_count=0) + # anonymous user should get a 401 + self.get(reverse('api:settings_list'), expect=401) + # super user can see everything + with self.current_user(self.super_django_user): + self.get_settings(expected_count=len(TEST_TOWER_SETTINGS_MANIFEST)) + + def set_and_reset_setting(self, key, values, expected_values=()): + settings_reset = reverse('api:settings_reset') + setting = self.get_individual_setting(key) + self.assertEqual(setting['value'], TEST_TOWER_SETTINGS_MANIFEST[key]['default']) + for n, value in enumerate(values): + self.set_setting(key, value) + setting = self.get_individual_setting(key) + if len(expected_values) > n: + self.assertEqual(setting['value'], expected_values[n]) + else: + self.assertEqual(setting['value'], value) + self.post(settings_reset, data={"key": key}, expect=204) + setting = self.get_individual_setting(key) + self.assertEqual(setting['value'], TEST_TOWER_SETTINGS_MANIFEST[key]['default']) + + def test_set_and_reset_settings(self): + with self.current_user(self.super_django_user): + self.set_and_reset_setting('TEST_SETTING_INT', (2, 0)) + self.set_and_reset_setting('TEST_SETTING_STRING', ('blah', '', u'\u2620')) + self.set_and_reset_setting('TEST_SETTING_BOOL', (True, False)) + # List values are always saved as strings. + self.set_and_reset_setting('TEST_SETTING_LIST', ([4, 5, 6], [], [2]), (['4', '5', '6'], [], ['2'])) + self.set_and_reset_setting('TEST_SETTING_JSON', ({"k": "v"}, {}, [], [7, 8], 'str')) + + def test_clear_all_settings(self): + settings_list = reverse('api:settings_list') + with self.current_user(self.super_django_user): + self.set_setting('TEST_SETTING_INT', 2) + self.set_setting('TEST_SETTING_STRING', "foo") + self.set_setting('TEST_SETTING_BOOL', False) + self.set_setting('TEST_SETTING_LIST', [1,2,3]) + self.set_setting('TEST_SETTING_JSON', '{"key": "new value"}') + all_settings = self.get_settings() + for setting_entry in all_settings: + self.assertNotEqual(setting_entry['value'], + TEST_TOWER_SETTINGS_MANIFEST[setting_entry['key']]['default']) + self.delete(settings_list, expect=200) + all_settings = self.get_settings() + for setting_entry in all_settings: + self.assertEqual(setting_entry['value'], + TEST_TOWER_SETTINGS_MANIFEST[setting_entry['key']]['default']) diff --git a/awx/main/tests/tasks.py b/awx/main/tests/old/tasks.py similarity index 81% rename from awx/main/tests/tasks.py rename to awx/main/tests/old/tasks.py index acdff99e29..fdd30bf854 100644 --- a/awx/main/tests/tasks.py +++ b/awx/main/tests/old/tasks.py @@ -22,6 +22,13 @@ from crum import impersonate from awx.main.utils import * # noqa from awx.main.models import * # noqa from awx.main.tests.base import BaseJobExecutionTest +from awx.main.tests.data.ssh import ( + TEST_SSH_KEY_DATA, + TEST_SSH_KEY_DATA_LOCKED, + TEST_OPENSSH_KEY_DATA, + TEST_SSH_CERT_KEY, + TEST_SSH_KEY_DATA_UNLOCK, +) TEST_PLAYBOOK = u''' - name: test success @@ -230,176 +237,7 @@ TEST_VAULT_PLAYBOOK = '''$ANSIBLE_VAULT;1.1;AES256 TEST_VAULT_PASSWORD = '1234' -TEST_SSH_KEY_DATA = '''-----BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAyQ8F5bbgjHvk4SZJsKI9OmJKMFxZqRhvx4LaqjLTKbBwRBsY -1/C00NPiZn70dKbeyV7RNVZxuzM6yd3D3lwTdbDu/eJ0x72t3ch+TdLt/aenyy10 -IvZyhSlxCLDkDaVVPFYJOQzVS8TkdOi6ZHc+R0c0A+4ZE8OQ8C0zIKtUTHqRk4/v -gYK5guhNS0DdgWkBj6K+r/9D4bqdPTJPt4S7H75vb1tBgseiqftEkLYOhTK2gsCi -5uJgpG4zPQY4Kk/97dbW7pwcvPkr1rKkAwEJ27Bfo+DBv3oEx3SinpXQtOrH1aEO -RHSXldBaymdBtVLUhjxDlnnQ7Ps+fNX04R7N4QIDAQABAoIBAQClEDxbNyRqsVxa -q8BbzxZNVFxsD6Vceb9rIDa8/DT4SO4iO8zNm8QWnZ2FYDz5d/X3hGxlSa7dbVWa -XQJtD1K6kKPks4IEaejP58Ypxj20vWu4Fnz+Jy4lvLwb0n2n5lBv1IKF389NATw9 -7sL3sB3lDsPZZiQYYbogNDuBWqc+kP0zD84bONsM/B2HMRm9BRv2UsZf+zKU4pTA -UqHffyjmw7LqHmbtVjwVcUsC+xcE4kCuWLvabFnTWOSnWECyIw2+trxKdwCXbfzG -s5rn4Dj+aEKimzFaRpTSVx6w4yw9xw/EjsSaZ88jKSpTP8ocCut6zv+P/JwlukEX -4A4FxqyxAoGBAOp3G9EIAAWijcIgO5OdiZNEqVyqd3yyPzT6d/q7bf4dpVCZiLNA -bRmge83aMc4g2Dpkn/++It3bDmnXXGg+BZSX5KT9JLklXchaw9phv9J0diZEUvYS -mSQafbUGIqYnYzns3TU0cbgITs1iVIEstHYjGr3J88nDG+HFCHboxa93AoGBANuG -cDFgyvm79+haK2fHhUCZgaFFYBpkpuz+zjDjzIytOzymWa2gD9jIa7mvdvoH2ge3 -AVG0vy+n9cJaqJMuLkhdI01wVlqY9wvDHFyZCXyIvKVPMljKeTvCNGCupsG4R171 -gSKT5ryOx58MGbE7knAZC+QWpwxFpdpbfej6g7NnAoGBAMz6ipAJbXN/tG0FnvAj -pxXfzizcPw/+CTI40tGaMMQbiN5ZC+CiL39bBUFnQ2mQ31jVheegg3zvuL8hb4EW -z+wjitoPEZ7nowC5EUaHdJr6BBzaWKkWg1nD6yhqj7ow7xfCE3YjPlQEt1fpYjV4 -LuClOgi4WPCIKYUMq6TBRaprAoGAVrEjs0xPPApQH5EkXQp9BALbH23/Qs0G4sbJ -dKMxT0jGAPCMr7VrLKgRarXxXVImdy99NOAVNGO2+PbGZcEyA9/MJjO71nFb9mgp -1iOVjHmPThUVg90JvWC3QIsYTZ5RiR2Yzqfr0gDsslGb/9LPxLcPbBbKB12l3rKM -6amswvcCgYEAvgcSlTfAkI3ac8rB70HuDmSdqKblIiQjtPtT/ixXaFkZOmHRr4AE -KepMRDnaO/ldPDPEWCGqPzEM0t/0jS8/hCu3zLHHpZ+0LnHq+EXkOI0/GB4P+z5l -Vz3kouC0BTav0rCEnDop/cWMTiAp/XhKXfrTTTOra/F8l2xD8n/mnzY= ------END RSA PRIVATE KEY-----''' - -TEST_SSH_KEY_DATA_LOCKED = '''-----BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,6B4E92AF4C29DE26FD8535D81825BDE6 - -pg8YplxPpfzgEGUiko34DGaYklyGyYKXjOrGFGyLoquNAVNFyewT34dDrZi0IAaE -79wMVcdlHbrJfZz8ML8I/ft6zM6BdlwZExH4y9DRAaktY3yIXxSvowBQ6ljh3wUy -M6m0afOfVjT22V8hLFgX0yTQ6P9zTG1cmj6+JQWTsMJ5EP3rnFK5CyrJXP48B3GI -GgE66rkXDvcKlVeIrbrpcTyfmEpafPgVRJYCDFXxeO/BfKgUFVxFq1PgFbvGQMmD -wA6EsyRrN+aoub1sqzj8tM8e4nwEi0EifdRShkFeqH4GUOKypanTXfCqwFBgYi5a -i3YwSnniZZPwCniGR5cl8oetrc5dubq/IR0txsGi2lO6zJEWdSer/EadS0QAll4S -yXrSc/lFaez1VmVe/8aoBKDOHhe7jV3YXAuqCeB4o/SThB/9Gad44MTbqFH3d7cD -k+F0Cjup7LZqZpXeB7ZHRG/Yt9MtBzwDVmEWaxA1WIN5a8xyZEVzRswSi4lZX69z -Va7eTKcrCbHOQmIbLZGRiZbAbfgriwwxQCJWELv80h+A754Bhi23n3WzcT094fRi -cqK//HcHHXxYGmrfUbHYcj+GCQ07Uk2ZR3qglmPISUCgfZwM9k0LpXudWE8vmF2S -pAnbgxgrfUMtpu5EAO+d8Sn5wQLVD7YzPBUhM4PYfYUbJnRoZQryuR4lqCzcg0te -BM8x1LzSXyBEbQaonuMzSz1hCQ9hZpUwUEqDWAT3cPNmgyWkXQ1P8ehJhTmryGJw -/GHxNzMZDGj+bBKo7ic3r1g3ZmmlSU1EVxMLvRBKhdc1XicBVqepDma6/LEpj+5X -oplR+3Q0QSQ8CchcSxYtOpI3UBCatpyu09GtfzS+7bI5I7FVYUccR83+oQlKpPHC -5O2irB8JeXqAY679fx2N4i0E6l5Xr5AjUtOBCNil0Y70eOf9ER6i7kGakR7bUtk5 -fQn8Em9pLsYYalnekn4sxyHpGq59KgNPjQiJRByYidSJ/oyNbmtPlxfXLwpuicd2 -8HLm1e0UeGidfF/bSlySwDzy1ZlSr/Apdcn9ou5hfhaGuQvjr9SvJwxQFNRMPdHj -ukBSDGuxyyU+qBrWJhFsymiZAWDofY/4GzgMu4hh0PwN5arzoTxnLHmc/VFttyMx -nP7bTaa9Sr54TlMr7NuKTzz5biXKjqJ9AZKIUF2+ERebjV0hMpJ5NPsLwPUnA9kx -R3tl1JL2Ia82ovS81Ghff/cBZsx/+LQYa+ac4eDTyXxyg4ei5tPwOlzz7pDKJAr9 -XEh2X6rywCNghEMZPaOQLiEDLJ2is6P4OarSa/yoU4OMetpFfwZ0oJSCmGlEa+CF -zeJ80yXhU1Ru2eqiUjCAUg25BFPwoiMJDc6jWWow7OrXCQsw7Ddo2ncy1p9QeWjM -2R4ojPHWuXKYxvwVSc8NZHASlycBCaxHLDAEyH4avOSDPWOB1H5t+RrNmo0qgush -0aRo6F7BjzB2rA4E+xu2u11TBfF8iB3PC919/vxnkXF97NqezsaCz6VbRlsU0A+B -wwoi+P4JlJF6ZuhuDv6mhmBCSdXdc1bvimvdpOljhThr+cG5mM08iqWGKdA665cw ------END RSA PRIVATE KEY----- -''' - -TEST_OPENSSH_KEY_DATA = '''-----BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn -NhAAAAAwEAAQAAAQEA1AZAwUJUiLmOXjbO5q2ZE5DF+gMpPKe8NEr12FpvOaJr1Nz/DNpf -FE/VbssOJ4CRD/6MItlPSG2pC1Cv3AYSL7NBc0YCMlBR/P/nLI8pLAzU3p3KRYvR+R6cMW -3nMcxyB1UUgzXY9dTVFIyejOsm7stGuNfdDTTLBE2vTDz6CyzxxSALEOdYut5cfeTUuG7d -nP01K3JiaHjHaXDmwraRR/JlitylaZUnSZ+/b9WCMX5FyeJ6CnGdvcCuvMK0iNjZ8R+PxP -xJBM5AlJC5J6qa8YmeaQ6lA/2S+/wGuhJmocmiXiLFy9IzIPnQiR+h8DqStp4xp245UQxe -TIGSMmq8DQAAA9A4FMRSOBTEUgAAAAdzc2gtcnNhAAABAQDUBkDBQlSIuY5eNs7mrZkTkM -X6Ayk8p7w0SvXYWm85omvU3P8M2l8UT9Vuyw4ngJEP/owi2U9IbakLUK/cBhIvs0FzRgIy -UFH8/+csjyksDNTencpFi9H5HpwxbecxzHIHVRSDNdj11NUUjJ6M6ybuy0a4190NNMsETa -9MPPoLLPHFIAsQ51i63lx95NS4bt2c/TUrcmJoeMdpcObCtpFH8mWK3KVplSdJn79v1YIx -fkXJ4noKcZ29wK68wrSI2NnxH4/E/EkEzkCUkLknqprxiZ5pDqUD/ZL7/Aa6EmahyaJeIs -XL0jMg+dCJH6HwOpK2njGnbjlRDF5MgZIyarwNAAAAAwEAAQAAAQAp8orBMYRUAJIgJavN -i67rZgslKZbw/yaHGgWFpm628mFvHcIAIvwIorrRTq8gNZl9lpjXFDNRWxDEwlPorfLPKS -Hb0pAAsE9oRKDR+gjlRCyhVop8M+t45At25A2HlrFArh5+zxp7mH4HsMJ1ktiDCgiV7W84 -e6dm1I/H/5BgwUlTNoVOGPrU183gqRsHIICjfmnjl2ObJoly+MTrAy7E9rSmsO+pHKl8z0 -XODWh3mo+EkCoYrK6kP96Jy3BepSmbZMROEsctS7Mkzu6QdnfTY3QqIzENYtTGJuAGktGj -su4MHP8hbj+TznNkFeZdmIC0uTnIKu1uquwuFF1HPZiBAAAAgACX9xPKS2J04WXpQag+JS -06n2zSuBHW7Kq4q/LMydoTRd8Quf6u6eivSBrl7H779LCtGCIZqJAslvWOyPyz2CohcCBU -emubiHcUA+aN7R9E0tyitwWraJjMIwpQ7+AbgdsLsuxozNeccSrr0tva2c5y9x7YGBcIdC -UJDt4xnBi7AAAAgQDz771v8Mb18kq5W+inDcYPFUNXGtNfeYZEOhYFpxunFnYwTEAG0Xnh -YpQXOAFZ2q5mkFQHMl4cOKwoAlaP0dM4v0JKPjFDLvGisEu95fnivj4YAMP/UHgKKxBbqW -HPUhg3adAmIJ9z9u/VmTErbVklcKWlyZuTUkxeQ/BJmSIRUQAAAIEA3oKAzdDURjy8zxLX -gBLCPdi8AxCiqQJBCsGxXCgKtZewset1XJHIN9ryfb4QSZFkSOlm/LgdeGtS8Or0GNPRYd -hgnUCF0LkEsDQ7HzPZYujLrAwjumvGQH6ORp5vRh0tQb93o4e1/A2vpdSKeH7gCe/jfUSY -h7dFGNoAI4cF7/0AAAAUcm9vdEBwaWxsb3cuaXhtbS5uZXQBAgMEBQYH ------END OPENSSH PRIVATE KEY----- -''' - -TEST_OPENSSH_KEY_DATA_LOCKED = '''-----BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABALaWMfjc -hSvC7aXxQs1ZDiAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDEDWKwZD8+ -h+2gZZKna8dy2QL4jJxM1eLGDcQDnuip1ixhaf5MT5T6BMploXXHs1pfuwx8yTQ6Ts/VJp -WX6cuHQg8sPGM3P7HNGUqs9q/EQfrrRxz555uL08CRaS6FjM/6x9iolNhHU910Wlg+R+ZS -xiMrrY/s03EiEChsAWTbwBGqTopGC2xMFgIxINoQtTFXv7MtCbDfl8aWKQRDmzkLvwT07N -ycj2kqADqoukD/2bQvPrW6FIZPJPpAdeAe2SZbf/y92NgVz/glOdtjaJp3oqn1QHrOA9/k -XgXOjgVQUbzX7qyLWenxM138VsRKUJZeROaHt1MWApLrLtKQ36SrAAAD0A+PODJjfeKm3U -JknlSYD7fFh6bVZGwG6LnLMtobs0elOfj2+sdg+hOVqyrA0rPOHES5yGKslTc/wRkRQ95m -dBleAyTDIOQ90IqDxT3lsNQwpscsFKPYKGmaUvZLLk4aNY1GeANtByXwTsjetVqn8Uo59A -zu6phX8Aagn2h0qxQwBnDjlzsXf6g5H7UPZd/t1dYr1NfVP6KWJrg0jivAI8tzO2HcM9W2 -cyOaodBw/6TsJNKvDV714Z+apvrNDEufBUsovKjAna2BDVZIhTCg5mYm0Dks8JStQrG2S1 -Yk8EM3+fpo8uMoHVz1jbYC8UX12pwIU67MhUn24KBxqulCYaTMsrLFkNWk6vKgwib+sIa4 -i1Bij1Zd0rdJWypQqTc2Oj3bBSYM47AksMXcKVpuNnFLh4+eokpQzbtIYpRqhOTh1Fky7z -xkhTgWVvf/F19M9t1bz3Rm1/t5I75Ag9qfKWs06j+VVfXnDt5v5hYAEhoJjMzSjgKaqc5g -YndeWeUwO6Vijt4XpkB8+0R7Kptsh9L0UUsNIcRoGcqrM8IUVb3D8vPWppPlj9d6LB+FCo -Cy1JlscnpBb8AQy9QMvrJTHKOyjRcenVxILPiN8PypIC008jvqpDzKimAxM4IMuA7AWE6w -j5+CzfUhDAJGdl2qH/nVc7GFUtz8bVA/v9Zkawg2MLcafgGollbLcTbKwDFcenQuyHT+Hj -uDm2f0oV/EDKFqLijlV8vcLBNUZoxY/L62Vora1jlqnapq2Z/AM9NicoELYNe21ReJ5dxM -7Pk/QdSrZjQzxoHf8uBDpb7x/KyfnSdf8GmdGCxoJ5mcepwD4tROMFC104tN0STJpdGVSm -Q5ZG1JDN7F9iJCCAwyulWH/XxTzFYnQ84199cQeV/M9rXXgbXa8ApAung6X9j8y1fcw9Lw -wV1aP06bCNgM0U50PiZ54HXwzVt+Ghs06TEF4/ZQiIgNJxdw0HFxAJj8qHqUCHuSmvBgnN -qRW/uruItwpXLaL00EHu7rAFlBi1BnnetI+D12ls04mlyTUFFM5v520B5zPV+5If2hx91w -C6Oxl1Wsp3gPkK2yiuy8qcrvoEoJ25TeEhUGEAPWx2OuQJO/Lpq9aF/JJoqGwnBaXdCsi+ -5ig+ZMq5GKQtyydzyXImjlNEUH1w2prRDiGVEufANA5LSLCtqOLgDzXS62WUBjJBrQJVAM -YpWz1tiZQoyv1RT3Y0O0Vwe2Z5AK3fVM0I5jWdiLrIErtcR4ULa6T56QtA52DufhKzINTR -Vg9TtUBqfKIpRQikPSjm7vpY/Xnbc= ------END OPENSSH PRIVATE KEY----- -''' - -TEST_SSH_CERT_KEY = """-----BEGIN CERTIFICATE----- -MIIDNTCCAh2gAwIBAgIBATALBgkqhkiG9w0BAQswSTEWMBQGA1UEAwwNV2luZG93 -cyBBenVyZTELMAkGA1UEBhMCVVMxIjAgBgkqhkiG9w0BCQEWE2x1a2VAc25lZXJp -bmdlci5jb20wHhcNMTQwNzI4MTQzMjExWhcNMTUwNzI4MTQzMjExWjBJMRYwFAYD -VQQDDA1XaW5kb3dzIEF6dXJlMQswCQYDVQQGEwJVUzEiMCAGCSqGSIb3DQEJARYT -bHVrZUBzbmVlcmluZ2VyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL9UHMhmAkbEJtg7jxAYjRbyTILDkNG5X/5UDpReIBD3VZfIrrXKX/groKbE -uiH9vdHkhdbOV1WkINuz+12Hdfk7irRXPRNC6SQVNeCy/DuCIEX+pQCAn60pc3eT -ctQG4oCiwQrlFMjoV9S5kbKoUavtuEt7Huo4YIVJK1/McEYq8mIM1W6MGOwXQI0b -rKsp1zRviiQWU5zijQYxepSpBNJcGS1lNhD1m5ycy7+0Zm7FqBa6nlf/2kLadREF -4o3bHljfrLTa+czV9lI9HjwpeLCfccx0T7etpv+u/JzSlt1MlAnlCNtz2wo1oNdi -scyRdRlb00AWQMneQfSYgwGHyQ8CAwEAAaMqMCgwDgYDVR0PAQH/BAQDAgeAMBYG -A1UdJQEB/wQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQCc064W0uk3 -hVVYtHuOBPSag9TvyqJrnvHsPgWiwFTh7t4CGF2TiH6myxkboAN0BGZqIj0zorT+ -VORmZ4PrDqV29q8M77n4aTmDmqXXcCAMOtyC87xlK+YvsVtrvu2zYXnZV+BJ+UtT -FpDqgMLrE0ecnkDClAK4vPx3TqSzU3v//lgUG1o3VibJbzMptggMVA4Hl9AXGLnU -FNpK5B4mm/PQHQC1Ma/nweMoDcVlQUne8XgnwEf0ixGkViFLm6FmI7DfKUpq3zXb -vWKu8qiBmz4tju6LT2n+q66MNEMmS1qhuJJYZrORJgQkCVbo1RRwW6UNZSIjD8D6 -8QJhq7hCxteN ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAv1QcyGYCRsQm2DuPEBiNFvJMgsOQ0blf/lQOlF4gEPdVl8iu -tcpf+CugpsS6If290eSF1s5XVaQg27P7XYd1+TuKtFc9E0LpJBU14LL8O4IgRf6l -AICfrSlzd5Ny1AbigKLBCuUUyOhX1LmRsqhRq+24S3se6jhghUkrX8xwRiryYgzV -bowY7BdAjRusqynXNG+KJBZTnOKNBjF6lKkE0lwZLWU2EPWbnJzLv7RmbsWoFrqe -V//aQtp1EQXijdseWN+stNr5zNX2Uj0ePCl4sJ9xzHRPt62m/678nNKW3UyUCeUI -23PbCjWg12KxzJF1GVvTQBZAyd5B9JiDAYfJDwIDAQABAoIBACNozL7l6ivwp4PD -WhHPiWUiyLg2u3mlBjgKlHwvA15AeC3ULUllv+ctI9lZdV1PGa9bzM1ZeN5XtuES -aUYBCPtsYppHvvzumDleV49TcM0OoyxxGVaDd4nTrxQFTO4irA7EkFeU2Ajqvz6W -bXmUHzFjmIUXrzwH3Q0t4oIjUvAZNhNY63G3XZ264pNckvtuRArgn0r7e+trplII -qDYPwOLPhorwG6a0HIsSWbECA+NbzC5wBIr4CMfDRiHDQ5g4cGstpbBAUkAs2LSU -2QcGp3AIqOnzMDxLTMqKcKQ9YXOMqTpVoyll+jkgdHLCqHjo+O51/E5AsjBcabmi -4LpeVsECgYEA+7g2y8J54GWhNOpJ+RQ6IvoUuA9YmEe3byIglat5b+AWuy7Miq4u -VSiIjEqDf8Ci1LxHrkRCe4S/9VZSNJdfbv5I1LW3Wx4JRZ1JFR5Z9B0XI5SdkokM -O9DXIJHgxSzC9kCKgBpH5KxqMpEdMMv70C7gbMpnONEL1zIOZJxAwq8CgYEAwpUB -Dp5l8Wpma5SnUAJiTU9XdgtPr1M8WFde9jP3e2VK2O4DmnZkLN5aLbMfnftUNAl1 -mP4CTxtkkEwNtkol+rZAy6wwzQA/TP2yC0Wfw+xeDTKJ+JDDoWM+4FAhjBpns/gx -Ehfqj76jRjBW9DtARaHgrIHHFUn2p6wMZq4Sd6ECgYEA4jlNrdQrGnvb5KWHM750 -/UhJ5J2OHtWdStid9kU0j1ISu8k0dJJT+57BEWxKQD9NV+madkjMgxvsNL6OhMti -LmuD4v8pOU+GP7U6oCs15slaKVUARFi80OlA3fmcyzgOQ6f/kV+NKzu0+ZsnY9p/ -hjsK4VsKZ6qgfJd1DgDLxusCgYArXCDcLRfycA9ascmG3sEhESkgOO0M2LN9zBpx -KqtfZ/cB2CgdZ3xzMylNPbkx7yuYXPNDoHbLQgNq1EfJ80P7VlmiCUDmrcNtWKsw -L9emRSnALx7nsPqnIAKG4dRX8Bpj1E67BXFTjtu7bFI0Im/0FFqIlnLSn6TDQGeT -Cf87gQKBgCgW/kFaQAhP5Pdb7oOQcaF4/dq50QNDyQMFOPKWHY/5IrsIrDVI5V/D -o1npLPB+YE3baQqo58JX1UuO83F4zlwzS3Q4lS3dxg+gdvgzFHvQd/SV5IDhmLWL -L5Hj+B02+FAiz8zVGumbVykvPtzgTb0E+0rJKNO0/EgGqWsk/oC0 ------END RSA PRIVATE KEY----- -""" - -TEST_SSH_KEY_DATA_UNLOCK = 'unlockme' - +@unittest.skipIf(os.environ.get('SKIP_SLOW_TESTS', False), 'Skipping slow test') class RunJobTest(BaseJobExecutionTest): ''' Test cases for RunJob celery task. @@ -442,7 +280,10 @@ class RunJobTest(BaseJobExecutionTest): 'password': '', } opts.update(kwargs) + user = opts['user'] + del opts['user'] self.cloud_credential = Credential.objects.create(**opts) + self.cloud_credential.admin_role.members.add(user) return self.cloud_credential def create_test_project(self, playbook_content, role_playbooks=None): @@ -497,10 +338,9 @@ class RunJobTest(BaseJobExecutionTest): print qs = self.super_django_user.get_queryset(JobEvent) for je in qs.filter(job=job): - print je.get_event_display2() - print je.event, je, je.failed - print je.event_data - print + print(je.get_event_display2()) + print(je.event, je, je.failed) + print(je.event_data) for job_event in job_events: unicode(job_event) # For test coverage. job_event.save() @@ -755,26 +595,8 @@ class RunJobTest(BaseJobExecutionTest): new_group.children.remove(self.group) new_group = Group.objects.get(pk=new_group.pk) self.assertFalse(new_group.has_active_failures) - # Mark host inactive (should clear flag on parent group and inventory) - self.host.mark_inactive() - self.group = Group.objects.get(pk=self.group.pk) - self.assertFalse(self.group.has_active_failures) - self.inventory = Inventory.objects.get(pk=self.inventory.pk) - self.assertFalse(self.inventory.has_active_failures) - # Un-mark host as inactive (need to force update of flag on group and - # inventory) - host = self.host - host.name = '_'.join(host.name.split('_')[3:]) or 'undeleted host' - host.active = True - host.save() - host.update_computed_fields() - self.group = Group.objects.get(pk=self.group.pk) - self.assertTrue(self.group.has_active_failures) - self.inventory = Inventory.objects.get(pk=self.inventory.pk) - self.assertTrue(self.inventory.has_active_failures) - # Delete host. (should clear flag) + # Delete host (should clear flag on parent group and inventory) self.host.delete() - self.host = None self.group = Group.objects.get(pk=self.group.pk) self.assertFalse(self.group.has_active_failures) self.inventory = Inventory.objects.get(pk=self.inventory.pk) @@ -782,30 +604,7 @@ class RunJobTest(BaseJobExecutionTest): def test_update_has_active_failures_when_job_removed(self): job = self.test_run_job_that_fails() - # Mark job as inactive (should clear flags). - job.mark_inactive() - self.host = Host.objects.get(pk=self.host.pk) - self.assertFalse(self.host.has_active_failures) - self.group = Group.objects.get(pk=self.group.pk) - self.assertFalse(self.group.has_active_failures) - self.inventory = Inventory.objects.get(pk=self.inventory.pk) - self.assertFalse(self.inventory.has_active_failures) - # Un-mark job as inactive (need to force update of flag) - job.active = True - job.save() - # Need to manually update last_job on host... - host = Host.objects.get(pk=self.host.pk) - host.last_job = job - host.last_job_host_summary = JobHostSummary.objects.get(job=job, host=host) - host.save() - self.inventory.update_computed_fields() - self.host = Host.objects.get(pk=self.host.pk) - self.assertTrue(self.host.has_active_failures) - self.group = Group.objects.get(pk=self.group.pk) - self.assertTrue(self.group.has_active_failures) - self.inventory = Inventory.objects.get(pk=self.inventory.pk) - self.assertTrue(self.inventory.has_active_failures) - # Delete job entirely. + # Delete (should clear flags). job.delete() self.host = Host.objects.get(pk=self.host.pk) self.assertFalse(self.host.has_active_failures) @@ -825,8 +624,8 @@ class RunJobTest(BaseJobExecutionTest): self.host = Host.objects.get(pk=self.host.pk) self.assertEqual(self.host.last_job, job1) self.assertEqual(self.host.last_job_host_summary.job, job1) - # Mark job1 inactive (should update host.last_job to None). - job1.mark_inactive() + # Delete job1 (should update host.last_job to None). + job1.delete() self.host = Host.objects.get(pk=self.host.pk) self.assertEqual(self.host.last_job, None) self.assertEqual(self.host.last_job_host_summary, None) @@ -1077,7 +876,7 @@ class RunJobTest(BaseJobExecutionTest): self.assertTrue('"--become-method"' in job.job_args) self.assertTrue('"--ask-become-pass"' in job.job_args) self.assertTrue('"--become"' in job.job_args) - + def test_unlocked_ssh_key(self): self.create_test_credential(ssh_key_data=TEST_SSH_KEY_DATA) self.create_test_project(TEST_PLAYBOOK) @@ -1395,7 +1194,7 @@ class RunJobTest(BaseJobExecutionTest): # Hide local settings path. settings.AWX_PROOT_HIDE_PATHS = [os.path.join(settings.BASE_DIR, 'settings')] # Create another project alongside the one we're using to verify it - # is hidden. + # is hidden. self.create_test_credential() self.create_test_project(TEST_PLAYBOOK) other_project_path = self.project.local_path diff --git a/awx/main/tests/users.py b/awx/main/tests/old/users.py similarity index 88% rename from awx/main/tests/users.py rename to awx/main/tests/old/users.py index 5cea474875..de364ff161 100644 --- a/awx/main/tests/users.py +++ b/awx/main/tests/old/users.py @@ -2,7 +2,6 @@ # All Rights Reserved. # Python -import datetime import urllib from mock import patch @@ -16,6 +15,7 @@ from django.test.utils import override_settings # AWX from awx.main.models import * # noqa from awx.main.tests.base import BaseTest +from awx.main.conf import tower_settings __all__ = ['AuthTokenTimeoutTest', 'AuthTokenLimitTest', 'AuthTokenProxyTest', 'UsersTest', 'LdapTest'] @@ -38,7 +38,7 @@ class AuthTokenTimeoutTest(BaseTest): response = self._generic_rest(dashboard_url, expect=200, method='get', return_response_object=True, client_kwargs=kwargs) self.assertIn('Auth-Token-Timeout', response) - self.assertEqual(response['Auth-Token-Timeout'], str(settings.AUTH_TOKEN_EXPIRATION)) + self.assertEqual(response['Auth-Token-Timeout'], str(tower_settings.AUTH_TOKEN_EXPIRATION)) class AuthTokenLimitTest(BaseTest): def setUp(self): @@ -60,7 +60,7 @@ class AuthTokenLimitTest(BaseTest): 'token': response['token'] } self.get(user_me_url, expect=200, auth=auth_token1) - + mock_get_request_hash.return_value = "session_2" response = self.post(auth_token_url, data, expect=200, auth=None) auth_token2 = { @@ -99,7 +99,7 @@ class AuthTokenProxyTest(BaseTest): self.setup_users() self.setup_instances() self.organizations = self.make_organizations(self.super_django_user, 2) - self.organizations[0].admins.add(self.normal_django_user) + self.organizations[0].admin_role.members.add(self.normal_django_user) self.assertIn('REMOTE_ADDR', settings.REMOTE_HOST_HEADERS) self.assertIn('REMOTE_HOST', settings.REMOTE_HOST_HEADERS) @@ -132,7 +132,7 @@ class AuthTokenProxyTest(BaseTest): remote_addr = '192.168.75.1' auth_token = self._request_auth_token(remote_addr) - + # Verify we can access our own user information, from the remote address specified via HTTP_X_FORWARDED_FOR client_kwargs = {'HTTP_X_FORWARDED_FOR': remote_addr} response = self._get_me(expect=200, auth=auth_token, remote_addr=remote_addr, client_kwargs=client_kwargs) @@ -173,16 +173,16 @@ class UsersTest(BaseTest): super(UsersTest, self).setUp() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 2) - self.organizations[0].admins.add(self.normal_django_user) - self.organizations[0].users.add(self.other_django_user) - self.organizations[0].users.add(self.normal_django_user) - self.organizations[1].users.add(self.other_django_user) + self.organizations[0].admin_role.members.add(self.normal_django_user) + self.organizations[0].member_role.members.add(self.other_django_user) + self.organizations[0].member_role.members.add(self.normal_django_user) + self.organizations[1].member_role.members.add(self.other_django_user) def test_user_creation_fails_without_password(self): url = reverse('api:user_list') new_user = dict(username='blippy') self.post(url, expect=400, data=new_user, auth=self.get_super_credentials()) - + def test_only_super_user_or_org_admin_can_add_users(self): url = reverse('api:user_list') new_user = dict(username='blippy', password='hippy') @@ -195,7 +195,7 @@ class UsersTest(BaseTest): self.post(url, expect=201, data=new_user2, auth=self.get_normal_credentials()) self.post(url, expect=400, data=new_user2, auth=self.get_normal_credentials()) # Normal user cannot add users after his org is marked inactive. - self.organizations[0].mark_inactive() + self.organizations[0].delete() new_user3 = dict(username='blippy3') self.post(url, expect=403, data=new_user3, auth=self.get_normal_credentials()) @@ -206,6 +206,8 @@ class UsersTest(BaseTest): self.post(url, expect=403, data=new_super_user, auth=self.get_other_credentials()) self.post(url, expect=403, data=new_super_user, auth=self.get_normal_credentials()) self.post(url, expect=201, data=new_super_user, auth=self.get_super_credentials()) + new_super_user2 = dict(username='nommy2', password='cookie', is_superuser=None) + self.post(url, expect=201, data=new_super_user2, auth=self.get_super_credentials()) def test_auth_token_login(self): auth_token_url = reverse('api:auth_token_view') @@ -268,7 +270,7 @@ class UsersTest(BaseTest): # auth method was used in the request. response_header = response.response.get('WWW-Authenticate', '') self.assertEqual(response_header.split()[0], 'Token') - + # Request a new auth token from the new remote address. data = dict(zip(('username', 'password'), self.get_normal_credentials())) response = self.post(auth_token_url, data, expect=200, auth=None, @@ -297,7 +299,7 @@ class UsersTest(BaseTest): response = self.get(user_me_url, expect=401) response_header = response.response.get('WWW-Authenticate', '') self.assertEqual(response_header.split()[0], 'Basic') - + # A request that attempts Basic auth should request Basic auth again. response = self.get(user_me_url, expect=401, auth=('invalid', 'password')) @@ -313,10 +315,10 @@ class UsersTest(BaseTest): remote_addr=remote_addr) # Token auth should be denied if the user is inactive. - self.normal_django_user.mark_inactive() + self.normal_django_user.delete() response = self.get(user_me_url, expect=401, auth=auth_token2, remote_addr=remote_addr) - self.assertEqual(response['detail'], 'User inactive or deleted') + assert response['detail'] == 'Invalid token' def test_ordinary_user_can_modify_some_fields_about_himself_but_not_all_and_passwords_work(self): @@ -409,28 +411,31 @@ class UsersTest(BaseTest): data2 = self.get(url, expect=200, auth=self.get_normal_credentials()) self.assertEquals(data2['count'], 4) # Unless the setting ORG_ADMINS_CAN_SEE_ALL_USERS is False, in which case - # he can only see users in his org + # he can only see users in his org, and the system admin settings.ORG_ADMINS_CAN_SEE_ALL_USERS = False data2 = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(data2['count'], 2) + self.assertEquals(data2['count'], 3) # Other use can only see users in his org. data1 = self.get(url, expect=200, auth=self.get_other_credentials()) - self.assertEquals(data1['count'], 2) + self.assertEquals(data1['count'], 3) # Normal user can no longer see all users after the organization he # admins is marked inactive, nor can he see any other users that were - # in that org, so he only sees himself. - self.organizations[0].mark_inactive() + # in that org, so he only sees himself and the system admin. + self.organizations[0].delete() data3 = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(data3['count'], 1) + self.assertEquals(data3['count'], 2) + + # Test no longer relevant since we've moved away from active / inactive. + # However there was talk about keeping is_active for users, so this test will + # be relevant if that comes to pass. - anoek 2016-03-22 + # def test_super_user_can_delete_a_user_but_only_marked_inactive(self): + # user_pk = self.normal_django_user.pk + # url = reverse('api:user_detail', args=(user_pk,)) + # self.delete(url, expect=204, auth=self.get_super_credentials()) + # self.get(url, expect=404, auth=self.get_super_credentials()) + # obj = User.objects.get(pk=user_pk) + # self.assertEquals(obj.is_active, False) - def test_super_user_can_delete_a_user_but_only_marked_inactive(self): - user_pk = self.normal_django_user.pk - url = reverse('api:user_detail', args=(user_pk,)) - self.delete(url, expect=204, auth=self.get_super_credentials()) - self.get(url, expect=404, auth=self.get_super_credentials()) - obj = User.objects.get(pk=user_pk) - self.assertEquals(obj.is_active, False) - def test_non_org_admin_user_cannot_delete_any_user_including_himself(self): url1 = reverse('api:user_detail', args=(self.super_django_user.pk,)) url2 = reverse('api:user_detail', args=(self.normal_django_user.pk,)) @@ -470,11 +475,11 @@ class UsersTest(BaseTest): url = reverse('api:user_organizations_list', args=(self.normal_django_user.pk,)) data = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(data['count'], 1) + self.assertEquals(data['count'], 1) # also accessible via superuser data = self.get(url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(data['count'], 1) - # and also by other user... + self.assertEquals(data['count'], 1) + # and also by other user... data = self.get(url, expect=200, auth=self.get_other_credentials()) # but not by nobody user data = self.get(url, expect=403, auth=self.get_nobody_credentials()) @@ -491,7 +496,7 @@ class UsersTest(BaseTest): data = self.get(url, expect=200, auth=self.get_other_credentials()) # but not by nobody user data = self.get(url, expect=403, auth=self.get_nobody_credentials()) - + # teams the user is on, should be 0 url = reverse('api:user_teams_list', args=(self.normal_django_user.pk,)) data = self.get(url, expect=200, auth=self.get_normal_credentials()) @@ -565,7 +570,7 @@ class UsersTest(BaseTest): qs = base_qs.filter(username__exact='normal') self.assertTrue(qs.count()) self.check_get_list(url, self.super_django_user, qs) - + # Filter by username with __iexact suffix. url = '%s?username__iexact=NORMAL' % base_url qs = base_qs.filter(username__iexact='NORMAL') @@ -706,7 +711,7 @@ class UsersTest(BaseTest): self.assertTrue(qs.count()) self.check_get_list(url, self.super_django_user, qs) - # Filter by is_staff (field not exposed via API). FIXME: Should + # Filter by is_staff (field not exposed via API). FIXME: Should # eventually not be allowed! url = '%s?is_staff=true' % base_url qs = base_qs.filter(is_staff=True) @@ -751,98 +756,15 @@ class UsersTest(BaseTest): self.assertTrue(qs.count()) self.check_get_list(url, self.super_django_user, qs) - # Verify difference between normal AND filter vs. filtering with - # chain__ prefix. - url = '%s?organizations__name__startswith=org0&organizations__name__startswith=org1' % base_url - qs = base_qs.filter(Q(organizations__name__startswith='org0'), - Q(organizations__name__startswith='org1')) - self.assertFalse(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - url = '%s?chain__organizations__name__startswith=org0&chain__organizations__name__startswith=org1' % base_url - qs = base_qs.filter(organizations__name__startswith='org0') - qs = qs.filter(organizations__name__startswith='org1') - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by related organization not present. - url = '%s?organizations=None' % base_url - qs = base_qs.filter(organizations=None) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - url = '%s?organizations__isnull=true' % base_url - qs = base_qs.filter(organizations__isnull=True) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by related organization present. - url = '%s?organizations__isnull=0' % base_url - qs = base_qs.filter(organizations__isnull=False) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by related organizations name. - url = '%s?organizations__name__startswith=org' % base_url - qs = base_qs.filter(organizations__name__startswith='org') - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by related organizations admins username. - url = '%s?organizations__admins__username__startswith=norm' % base_url - qs = base_qs.filter(organizations__admins__username__startswith='norm') - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - # Filter by username with __in list. url = '%s?username__in=normal,admin' % base_url qs = base_qs.filter(username__in=('normal', 'admin')) self.assertTrue(qs.count()) self.check_get_list(url, self.super_django_user, qs) - # Filter by organizations with __in list. - url = '%s?organizations__in=%d,0' % (base_url, self.organizations[0].pk) - qs = base_qs.filter(organizations__in=(self.organizations[0].pk, 0)) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Exclude by organizations with __in list. - url = '%s?not__organizations__in=%d,0' % (base_url, self.organizations[0].pk) - qs = base_qs.exclude(organizations__in=(self.organizations[0].pk, 0)) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by organizations created timestamp (passing only a date). - url = '%s?organizations__created__gt=2013-01-01' % base_url - qs = base_qs.filter(organizations__created__gt=datetime.date(2013, 1, 1)) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by organizations created timestamp (passing datetime). - url = '%s?organizations__created__lt=%s' % (base_url, urllib.quote_plus('2037-03-07 12:34:56')) - qs = base_qs.filter(organizations__created__lt=datetime.datetime(2037, 3, 7, 12, 34, 56)) - self.assertTrue(qs.count()) - self.check_get_list(url, self.super_django_user, qs) - - # Filter by organizations created timestamp (invalid datetime value). - url = '%s?organizations__created__gt=yesterday' % base_url - self.check_get_list(url, self.super_django_user, base_qs, expect=400) - - # Filter by organizations created year (valid django lookup, but not - # allowed via API). - url = '%s?organizations__created__year=2013' % base_url - self.check_get_list(url, self.super_django_user, base_qs, expect=400) - - # Filter by invalid field. url = '%s?email_address=nobody@example.com' % base_url self.check_get_list(url, self.super_django_user, base_qs, expect=400) - # Filter by invalid field across lookups. - url = '%s?organizations__users__teams__laser=green' % base_url - self.check_get_list(url, self.super_django_user, base_qs, expect=400) - - # Filter by invalid relation within lookups. - url = '%s?organizations__users__llamas__name=freddie' % base_url - self.check_get_list(url, self.super_django_user, base_qs, expect=400) - # Filter by invalid query string field names. url = '%s?__' % base_url self.check_get_list(url, self.super_django_user, base_qs, expect=400) @@ -946,8 +868,8 @@ class LdapTest(BaseTest): return user def test_ldap_auth(self): - self.use_test_setting('USER_SEARCH') - self.use_test_setting('ALWAYS_UPDATE_USER') + for name in ('USER_SEARCH', 'ALWAYS_UPDATE_USER', 'GROUP_TYPE', 'GROUP_SEARCH'): + self.use_test_setting(name) self.assertEqual(User.objects.filter(username=self.ldap_username).count(), 0) # Test logging in, user should be created with no flags or fields set. user = self.check_login() @@ -1017,13 +939,13 @@ class LdapTest(BaseTest): for org_name, org_result in settings.AUTH_LDAP_ORGANIZATION_MAP_RESULT.items(): org = Organization.objects.get(name=org_name) if org_result.get('admins', False): - self.assertTrue(user in org.admins.all()) + self.assertTrue(user in org.admin_role.members.all()) else: - self.assertFalse(user in org.admins.all()) + self.assertFalse(user in org.admin_role.members.all()) if org_result.get('users', False): - self.assertTrue(user in org.users.all()) + self.assertTrue(user in org.member_role.members.all()) else: - self.assertFalse(user in org.users.all()) + self.assertFalse(user in org.member_role.members.all()) # Try again with different test mapping. self.use_test_setting('ORGANIZATION_MAP', {}, from_name='ORGANIZATION_MAP_2') @@ -1035,13 +957,13 @@ class LdapTest(BaseTest): for org_name, org_result in settings.AUTH_LDAP_ORGANIZATION_MAP_RESULT.items(): org = Organization.objects.get(name=org_name) if org_result.get('admins', False): - self.assertTrue(user in org.admins.all()) + self.assertTrue(user in org.admin_role.members.all()) else: - self.assertFalse(user in org.admins.all()) + self.assertFalse(user in org.admin_role.members.all()) if org_result.get('users', False): - self.assertTrue(user in org.users.all()) + self.assertTrue(user in org.member_role.members.all()) else: - self.assertFalse(user in org.users.all()) + self.assertFalse(user in org.member_role.members.all()) def test_ldap_team_mapping(self): for name in ('USER_SEARCH', 'ALWAYS_UPDATE_USER', 'USER_ATTR_MAP', @@ -1059,9 +981,9 @@ class LdapTest(BaseTest): for team_name, team_result in settings.AUTH_LDAP_TEAM_MAP_RESULT.items(): team = Team.objects.get(name=team_name) if team_result.get('users', False): - self.assertTrue(user in team.users.all()) + self.assertTrue(user in team.member_role.members.all()) else: - self.assertFalse(user in team.users.all()) + self.assertFalse(user in team.member_role.members.all()) # Try again with different test mapping. self.use_test_setting('TEAM_MAP', {}, from_name='TEAM_MAP_2') self.use_test_setting('TEAM_MAP_RESULT', {}, @@ -1072,9 +994,9 @@ class LdapTest(BaseTest): for team_name, team_result in settings.AUTH_LDAP_TEAM_MAP_RESULT.items(): team = Team.objects.get(name=team_name) if team_result.get('users', False): - self.assertTrue(user in team.users.all()) + self.assertTrue(user in team.member_role.members.all()) else: - self.assertFalse(user in team.users.all()) + self.assertFalse(user in team.member_role.members.all()) def test_prevent_changing_ldap_user_fields(self): for name in ('USER_SEARCH', 'ALWAYS_UPDATE_USER', 'USER_ATTR_MAP', diff --git a/awx/main/tests/organizations.py b/awx/main/tests/organizations.py deleted file mode 100644 index 8378ab12cb..0000000000 --- a/awx/main/tests/organizations.py +++ /dev/null @@ -1,466 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved. - -# Python -from datetime import timedelta - -# Django -from django.core.urlresolvers import reverse -from django.test.utils import override_settings -from django.contrib.auth.models import User -from django.utils.timezone import now as tz_now - -# AWX -from awx.main.models import * # noqa -from awx.main.tests.base import BaseTest - -__all__ = ['AuthTokenLimitUnitTest', 'OrganizationsTest'] - -class AuthTokenLimitUnitTest(BaseTest): - - def setUp(self): - self.now = tz_now() - # Times are relative to now - # (key, created on in seconds , expiration in seconds) - self.test_data = [ - # a is implicitly expired - ("a", -1000, -10), - # b's are invalid due to session limit of 3 - ("b", -100, 60), - ("bb", -100, 60), - ("c", -90, 70), - ("d", -80, 80), - ("e", -70, 90), - ] - self.user = User.objects.create_superuser('admin', 'foo@bar.com', 'password') - for key, t_create, t_expire in self.test_data: - AuthToken.objects.create( - user=self.user, - key=key, - request_hash='this_is_a_hash', - created=self.now + timedelta(seconds=t_create), - expires=self.now + timedelta(seconds=t_expire), - ) - super(AuthTokenLimitUnitTest, self).setUp() - - @override_settings(AUTH_TOKEN_PER_USER=3) - def test_get_tokens_over_limit(self): - invalid_tokens = AuthToken.get_tokens_over_limit(self.user, now=self.now) - invalid_keys = [x.key for x in invalid_tokens] - self.assertEqual(len(invalid_keys), 2) - self.assertIn('b', invalid_keys) - self.assertIn('bb', invalid_keys) - -class OrganizationsTest(BaseTest): - - def collection(self): - return reverse('api:organization_list') - - def setUp(self): - super(OrganizationsTest, self).setUp() - self.setup_instances() - # TODO: Test non-enterprise license - self.create_test_license_file() - self.setup_users() - - self.organizations = self.make_organizations(self.super_django_user, 10) - self.projects = self.make_projects(self.normal_django_user, 10) - - # add projects to organizations in a more or less arbitrary way - for project in self.projects[0:2]: - self.organizations[0].projects.add(project) - for project in self.projects[3:8]: - self.organizations[1].projects.add(project) - for project in self.projects[9:10]: - self.organizations[2].projects.add(project) - self.organizations[0].projects.add(self.projects[-1]) - self.organizations[9].projects.add(self.projects[-2]) - - # get the URL for various organization records - self.a_detail_url = "%s%s" % (self.collection(), self.organizations[0].pk) - self.b_detail_url = "%s%s" % (self.collection(), self.organizations[1].pk) - self.c_detail_url = "%s%s" % (self.collection(), self.organizations[2].pk) - - # configuration: - # admin_user is an admin and regular user in all organizations - # other_user is all organizations - # normal_user is a user in organization 0, and an admin of organization 1 - # nobody_user is a user not a member of any organizations - - for x in self.organizations: - x.admins.add(self.super_django_user) - x.users.add(self.super_django_user) - x.users.add(self.other_django_user) - - self.organizations[0].users.add(self.normal_django_user) - self.organizations[1].admins.add(self.normal_django_user) - - def test_get_organization_list(self): - url = reverse('api:organization_list') - - # no credentials == 401 - self.options(url, expect=401) - self.head(url, expect=401) - self.get(url, expect=401) - - # wrong credentials == 401 - with self.current_user(self.get_invalid_credentials()): - self.options(url, expect=401) - self.head(url, expect=401) - self.get(url, expect=401) - - # superuser credentials == 200, full list - with self.current_user(self.super_django_user): - self.options(url, expect=200) - self.head(url, expect=200) - response = self.get(url, expect=200) - self.check_pagination_and_size(response, 10, previous=None, next=None) - self.assertEqual(len(response['results']), - Organization.objects.count()) - for field in ['id', 'url', 'name', 'description', 'created']: - self.assertTrue(field in response['results'][0], - 'field %s not in result' % field) - - # check that the related URL functionality works - related = response['results'][0]['related'] - for x in ['projects', 'users', 'admins']: - self.assertTrue(x in related and related[x].endswith("/%s/" % x), "looking for %s in related" % x) - - # normal credentials == 200, get only organizations of which user is a member - with self.current_user(self.normal_django_user): - self.options(url, expect=200) - self.head(url, expect=200) - response = self.get(url, expect=200) - self.check_pagination_and_size(response, 2, previous=None, next=None) - - # no admin rights? get empty list - with self.current_user(self.other_django_user): - response = self.get(url, expect=200) - self.check_pagination_and_size(response, self.other_django_user.organizations.count(), previous=None, next=None) - - # not a member of any orgs? get empty list - with self.current_user(self.nobody_django_user): - response = self.get(url, expect=200) - self.check_pagination_and_size(response, 0, previous=None, next=None) - - def test_get_item(self): - - # first get all the URLs - data = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - urls = [item['url'] for item in data['results']] - - # make sure super user can fetch records - data = self.get(urls[0], expect=200, auth=self.get_super_credentials()) - [self.assertTrue(key in data) for key in ['name', 'description', 'url']] - - # make sure invalid user cannot - data = self.get(urls[0], expect=401, auth=self.get_invalid_credentials()) - - # normal user should be able to get org 0 and org 1 but not org 9 (as he's not a user or admin of it) - data = self.get(urls[0], expect=200, auth=self.get_normal_credentials()) - data = self.get(urls[1], expect=200, auth=self.get_normal_credentials()) - data = self.get(urls[9], expect=403, auth=self.get_normal_credentials()) - - # other user is a member, but not admin, can access org - data = self.get(urls[0], expect=200, auth=self.get_other_credentials()) - - # nobody user is not a member, cannot access org - data = self.get(urls[0], expect=403, auth=self.get_nobody_credentials()) - - def test_get_item_subobjects_projects(self): - - # first get all the orgs - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - - # find projects attached to the first org - projects0_url = orgs['results'][0]['related']['projects'] - projects1_url = orgs['results'][1]['related']['projects'] - projects9_url = orgs['results'][9]['related']['projects'] - - self.get(projects0_url, expect=401, auth=None) - self.get(projects0_url, expect=401, auth=self.get_invalid_credentials()) - - # normal user is just a member of the first org, so can see all projects under the org - self.get(projects0_url, expect=200, auth=self.get_normal_credentials()) - - # however in the second org, he's an admin and should see all of them - projects1a = self.get(projects1_url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(projects1a['count'], 5) - - # but the non-admin cannot access the list of projects in the org. He should use /projects/ instead! - self.get(projects1_url, expect=200, auth=self.get_other_credentials()) - - # superuser should be able to read anything - projects9a = self.get(projects9_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(projects9a['count'], 1) - - # nobody user is not a member of any org, so can't see projects... - self.get(projects0_url, expect=403, auth=self.get_nobody_credentials()) - projects1a = self.get(projects1_url, expect=403, auth=self.get_nobody_credentials()) - - def test_get_item_subobjects_users(self): - - # see if we can list the users added to the organization - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - org1_users_url = orgs['results'][1]['related']['users'] - org1_users = self.get(org1_users_url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(org1_users['count'], 2) - org1_users = self.get(org1_users_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(org1_users['count'], 2) - org1_users = self.get(org1_users_url, expect=200, auth=self.get_other_credentials()) - self.assertEquals(org1_users['count'], 2) - - def test_get_item_subobjects_admins(self): - - # see if we can list the users added to the organization - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - org1_users_url = orgs['results'][1]['related']['admins'] - org1_users = self.get(org1_users_url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(org1_users['count'], 2) - org1_users = self.get(org1_users_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(org1_users['count'], 2) - - def test_get_organization_inventories_list(self): - pass - - def _test_get_item_subobjects_tags(self): - # FIXME: Update to support taggit! - - # put some tags on the org - org1 = Organization.objects.get(pk=2) - tag1 = Tag.objects.create(name='atag') - tag2 = Tag.objects.create(name='btag') - org1.tags.add(tag1) - org1.tags.add(tag2) - - # see if we can list the users added to the organization - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - org1_tags_url = orgs['results'][1]['related']['tags'] - org1_tags = self.get(org1_tags_url, expect=200, auth=self.get_normal_credentials()) - self.assertEquals(org1_tags['count'], 2) - org1_tags = self.get(org1_tags_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(org1_tags['count'], 2) - org1_tags = self.get(org1_tags_url, expect=403, auth=self.get_other_credentials()) - - def _test_get_item_subobjects_audit_trail(self): - # FIXME: Update to support whatever audit trail framework is used. - url = '/api/v1/organizations/2/audit_trail/' - self.get(url, expect=200, auth=self.get_normal_credentials()) - # FIXME: verify that some audit trail records are auto-created on save AND post - - def test_post_item(self): - - new_org = dict(name='magic test org', description='8675309') - - # need to be a valid user - self.post(self.collection(), new_org, expect=401, auth=None) - self.post(self.collection(), new_org, expect=401, auth=self.get_invalid_credentials()) - - # only super users can create organizations - self.post(self.collection(), new_org, expect=403, auth=self.get_normal_credentials()) - self.post(self.collection(), new_org, expect=403, auth=self.get_other_credentials()) - data1 = self.post(self.collection(), new_org, expect=201, auth=self.get_super_credentials()) - - # duplicate post results in 400 - self.post(self.collection(), new_org, expect=400, auth=self.get_super_credentials()) - - # look at what we got back from the post, make sure we added an org - last_org = Organization.objects.order_by('-pk')[0] - self.assertTrue(data1['url'].endswith("/%d/" % last_org.pk)) - - # Test that not even super users can create an organization with a basic license - self.create_basic_license_file() - cant_org = dict(name='silly user org', description='4815162342') - self.post(self.collection(), cant_org, expect=402, auth=self.get_super_credentials()) - - def test_post_item_subobjects_projects(self): - - # first get all the orgs - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - - # find projects attached to the first org - projects0_url = orgs['results'][0]['related']['projects'] - projects1_url = orgs['results'][1]['related']['projects'] - projects2_url = orgs['results'][2]['related']['projects'] - - # get all the projects on the first org - projects0 = self.get(projects0_url, expect=200, auth=self.get_super_credentials()) - a_project = projects0['results'][-1] - - # attempt to add the project to the 7th org and see what happens - self.post(projects1_url, a_project, expect=204, auth=self.get_super_credentials()) - projects1 = self.get(projects0_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(projects1['count'], 3) - - # make sure adding a project that does not exist, or a missing pk field, results in a 400 - self.post(projects1_url, dict(id=99999), expect=400, auth=self.get_super_credentials()) - self.post(projects1_url, dict(asdf=1234), expect=400, auth=self.get_super_credentials()) - - # test that by posting a pk + disassociate: True we can remove a relationship - projects1 = self.get(projects1_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(projects1['count'], 6) - a_project['disassociate'] = True - self.post(projects1_url, a_project, expect=204, auth=self.get_super_credentials()) - projects1 = self.get(projects1_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(projects1['count'], 5) - - a_project = projects1['results'][-1] - a_project['disassociate'] = 1 - projects1 = self.get(projects1_url, expect=200, auth=self.get_super_credentials()) - self.post(projects1_url, a_project, expect=204, auth=self.get_normal_credentials()) - projects1 = self.get(projects1_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(projects1['count'], 4) - - new_project_a = self.make_projects(self.normal_django_user, 1)[0] - new_project_b = self.make_projects(self.other_django_user, 1)[0] - - # admin of org can add projects that he can read - self.post(projects1_url, dict(id=new_project_a.pk), expect=204, auth=self.get_normal_credentials()) - # but not those he cannot - self.post(projects1_url, dict(id=new_project_b.pk), expect=403, auth=self.get_normal_credentials()) - - # and can't post a project he can read to an org he cannot - # self.post(projects2_url, dict(id=new_project_a.pk), expect=403, auth=self.get_normal_credentials()) - - # and can't do post a project he can read to an organization he cannot - self.post(projects2_url, dict(id=new_project_a.pk), expect=403, auth=self.get_normal_credentials()) - - - def test_post_item_subobjects_users(self): - - url = reverse('api:organization_users_list', args=(self.organizations[1].pk,)) - users = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(users['count'], 2) - self.post(url, dict(id=self.normal_django_user.pk), expect=204, auth=self.get_normal_credentials()) - users = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(users['count'], 3) - self.post(url, dict(id=self.normal_django_user.pk, disassociate=True), expect=204, auth=self.get_normal_credentials()) - users = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(users['count'], 2) - - # post a completely new user to verify we can add users to the subcollection directly - new_user = dict(username='NewUser9000', password='NewPassword9000') - which_org = self.normal_django_user.admin_of_organizations.all()[0] - url = reverse('api:organization_users_list', args=(which_org.pk,)) - self.post(url, new_user, expect=201, auth=self.get_normal_credentials()) - - all_users = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(all_users['count'], 3) - - def test_post_item_subobjects_admins(self): - - url = reverse('api:organization_admins_list', args=(self.organizations[1].pk,)) - admins = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(admins['count'], 2) - self.post(url, dict(id=self.other_django_user.pk), expect=204, auth=self.get_normal_credentials()) - admins = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(admins['count'], 3) - self.post(url, dict(id=self.other_django_user.pk, disassociate=1), expect=204, auth=self.get_normal_credentials()) - admins = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(admins['count'], 2) - - def _test_post_item_subobjects_tags(self): - # FIXME: Update to support taggit! - - tag = Tag.objects.create(name='blippy') - url = '/api/v1/organizations/2/tags/' - tags = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(tags['count'], 0) - self.post(url, dict(id=tag.pk), expect=204, auth=self.get_normal_credentials()) - tags = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(tags['count'], 1) - self.assertEqual(tags['results'][0]['id'], tag.pk) - self.post(url, dict(id=tag.pk, disassociate=1), expect=204, auth=self.get_normal_credentials()) - tags = self.get(url, expect=200, auth=self.get_normal_credentials()) - self.assertEqual(tags['count'], 0) - - def _test_post_item_subobjects_audit_trail(self): - # FIXME: Update to support whatever audit trail framework is used. - # audit trails are system things, and no user can post to them. - url = '/api/v1/organizations/2/audit_trail/' - self.post(url, dict(id=1), expect=405, auth=self.get_super_credentials()) - - def test_put_item(self): - - # first get some urls and data to put back to them - urls = self.get_urls(self.collection(), auth=self.get_super_credentials()) - self.get(urls[0], expect=200, auth=self.get_super_credentials()) - data1 = self.get(urls[1], expect=200, auth=self.get_super_credentials()) - - # test that an unauthenticated user cannot do a put - new_data1 = data1.copy() - new_data1['description'] = 'updated description' - self.put(urls[0], new_data1, expect=401, auth=None) - self.put(urls[0], new_data1, expect=401, auth=self.get_invalid_credentials()) - - # user normal is an admin of org 0 and a member of org 1 so should be able to put only org 1 - self.put(urls[0], new_data1, expect=403, auth=self.get_normal_credentials()) - self.put(urls[1], new_data1, expect=200, auth=self.get_normal_credentials()) - - # get back org 1 and see if it changed - get_result = self.get(urls[1], expect=200, auth=self.get_normal_credentials()) - self.assertEquals(get_result['description'], 'updated description') - - # super user can also put even though they aren't added to the org users or admins list - self.put(urls[1], new_data1, expect=200, auth=self.get_super_credentials()) - - # make sure posting to this URL is not supported - self.post(urls[1], new_data1, expect=405, auth=self.get_super_credentials()) - - def test_put_item_subobjects_projects(self): - - # any attempt to put a subobject should be a 405, edit the actual resource or POST with 'disassociate' to delete - # this is against a collection URL anyway, so we really need not repeat this test for other object types - # as a PUT against a collection doesn't make much sense. - - orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials()) - projects0_url = orgs['results'][0]['related']['projects'] - sub_projects = self.get(projects0_url, expect=200, auth=self.get_super_credentials()) - self.assertEquals(sub_projects['count'], 3) - first_sub_project = sub_projects['results'][0] - self.put(projects0_url, first_sub_project, expect=405, auth=self.get_super_credentials()) - - def test_delete_item(self): - - # first get some urls - urls = self.get_urls(self.collection(), auth=self.get_super_credentials()) - urldata1 = self.get(urls[1], auth=self.get_super_credentials()) - - # check authentication -- admins of the org and superusers can delete objects only - self.delete(urls[0], expect=401, auth=None) - self.delete(urls[0], expect=401, auth=self.get_invalid_credentials()) - self.delete(urls[8], expect=403, auth=self.get_normal_credentials()) - self.delete(urls[1], expect=204, auth=self.get_normal_credentials()) - self.delete(urls[0], expect=204, auth=self.get_super_credentials()) - - # check that when we have deleted an object it comes back 404 via GET - # but that it's still in the database as inactive - self.get(urls[1], expect=404, auth=self.get_normal_credentials()) - org1 = Organization.objects.get(pk=urldata1['id']) - self.assertEquals(org1.active, False) - - # also check that DELETE on the collection doesn't work - self.delete(self.collection(), expect=405, auth=self.get_super_credentials()) - - # Test that not even super users can delete an organization with a basic license - self.create_basic_license_file() - self.delete(urls[2], expect=402, auth=self.get_super_credentials()) - - def test_invalid_post_data(self): - url = reverse('api:organization_list') - # API should gracefully handle data of an invalid type. - self.post(url, expect=400, data=None, auth=self.get_super_credentials()) - self.post(url, expect=400, data=99, auth=self.get_super_credentials()) - self.post(url, expect=400, data='abcd', auth=self.get_super_credentials()) - self.post(url, expect=400, data=3.14, auth=self.get_super_credentials()) - self.post(url, expect=400, data=True, auth=self.get_super_credentials()) - self.post(url, expect=400, data=[1,2,3], auth=self.get_super_credentials()) - url = reverse('api:organization_users_list', args=(self.organizations[0].pk,)) - self.post(url, expect=400, data=None, auth=self.get_super_credentials()) - self.post(url, expect=400, data=99, auth=self.get_super_credentials()) - self.post(url, expect=400, data='abcd', auth=self.get_super_credentials()) - self.post(url, expect=400, data=3.14, auth=self.get_super_credentials()) - self.post(url, expect=400, data=True, auth=self.get_super_credentials()) - self.post(url, expect=400, data=[1,2,3], auth=self.get_super_credentials()) - -# TODO: tests for tag disassociation diff --git a/awx/main/tests/unified_jobs.py b/awx/main/tests/unified_jobs.py deleted file mode 100644 index 41dcf79d26..0000000000 --- a/awx/main/tests/unified_jobs.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) 2015 Ansible, Inc. -# All Rights Reserved - -# Python -import mock -from StringIO import StringIO -from django.utils.timezone import now - -# Django -from django.test import SimpleTestCase - -# AWX -from awx.main.models import * # noqa - -__all__ = ['UnifiedJobsUnitTest',] - -class UnifiedJobsUnitTest(SimpleTestCase): - - # stdout file present - @mock.patch('os.path.exists', return_value=True) - @mock.patch('codecs.open', return_value='my_file_handler') - def test_result_stdout_raw_handle_file__found(self, exists, open): - unified_job = UnifiedJob() - unified_job.result_stdout_file = 'dummy' - - with mock.patch('os.stat', st_size=1): - result = unified_job.result_stdout_raw_handle() - - self.assertEqual(result, 'my_file_handler') - - # stdout file missing, job finished - @mock.patch('os.path.exists', return_value=False) - def test_result_stdout_raw_handle__missing(self, exists): - unified_job = UnifiedJob() - unified_job.result_stdout_file = 'dummy' - unified_job.finished = now() - - result = unified_job.result_stdout_raw_handle() - - self.assertIsInstance(result, StringIO) - self.assertEqual(result.read(), 'stdout capture is missing') - - # stdout file missing, job not finished - @mock.patch('os.path.exists', return_value=False) - def test_result_stdout_raw_handle__pending(self, exists): - unified_job = UnifiedJob() - unified_job.result_stdout_file = 'dummy' - unified_job.finished = None - - result = unified_job.result_stdout_raw_handle() - - self.assertIsInstance(result, StringIO) - self.assertEqual(result.read(), 'Waiting for results...') - diff --git a/awx/main/tests/unit/api/test_filters.py b/awx/main/tests/unit/api/test_filters.py new file mode 100644 index 0000000000..8f045db877 --- /dev/null +++ b/awx/main/tests/unit/api/test_filters.py @@ -0,0 +1,17 @@ +import pytest + +from awx.api.filters import FieldLookupBackend +from awx.main.models import JobTemplate + +@pytest.mark.parametrize(u"empty_value", [u'', '']) +def test_empty_in(empty_value): + field_lookup = FieldLookupBackend() + with pytest.raises(ValueError) as excinfo: + field_lookup.value_to_python(JobTemplate, 'project__in', empty_value) + assert 'empty value for __in' in str(excinfo.value) + +@pytest.mark.parametrize(u"valid_value", [u'foo', u'foo,']) +def test_valid_in(valid_value): + field_lookup = FieldLookupBackend() + value, new_lookup = field_lookup.value_to_python(JobTemplate, 'project__in', valid_value) + assert 'foo' in value diff --git a/awx/main/tests/unit/api/test_generics.py b/awx/main/tests/unit/api/test_generics.py new file mode 100644 index 0000000000..289b4547a8 --- /dev/null +++ b/awx/main/tests/unit/api/test_generics.py @@ -0,0 +1,174 @@ + +# Python +import pytest +import mock + +# DRF +from rest_framework import status +from rest_framework.response import Response + +# AWX +from awx.api.generics import ParentMixin, SubListCreateAttachDetachAPIView, DeleteLastUnattachLabelMixin + +@pytest.fixture +def get_object_or_404(mocker): + # pytest patch without return_value generates a random value, we are counting on this + return mocker.patch('awx.api.generics.get_object_or_404') + +@pytest.fixture +def get_object_or_400(mocker): + return mocker.patch('awx.api.generics.get_object_or_400') + +@pytest.fixture +def mock_response_new(mocker): + m = mocker.patch('awx.api.generics.Response.__new__') + m.return_value = m + return m + +@pytest.fixture +def parent_relationship_factory(mocker): + def rf(serializer_class, relationship_name, relationship_value=mocker.Mock()): + mock_parent_relationship = mocker.MagicMock(**{'%s.add.return_value' % relationship_name: relationship_value}) + mocker.patch('awx.api.generics.ParentMixin.get_parent_object', return_value=mock_parent_relationship) + + serializer = serializer_class() + [setattr(serializer, x, '') for x in ['relationship', 'model', 'parent_model']] + serializer.relationship = relationship_name + + return (serializer, mock_parent_relationship) + return rf + +# TODO: Test create and associate failure (i.e. id doesn't exist, record already exists, permission denied) +# TODO: Mock and check return (Response) +class TestSubListCreateAttachDetachAPIView: + def test_attach_create_and_associate(self, mocker, get_object_or_400, parent_relationship_factory, mock_response_new): + (serializer, mock_parent_relationship) = parent_relationship_factory(SubListCreateAttachDetachAPIView, 'wife') + create_return_value = mocker.MagicMock(status_code=status.HTTP_201_CREATED) + serializer.create = mocker.Mock(return_value=create_return_value) + + mock_request = mocker.MagicMock(data=dict()) + ret = serializer.attach(mock_request, None, None) + + assert ret == mock_response_new + serializer.create.assert_called_with(mock_request, None, None) + mock_parent_relationship.wife.add.assert_called_with(get_object_or_400.return_value) + mock_response_new.assert_called_with(Response, create_return_value.data, status=status.HTTP_201_CREATED, headers={'Location': create_return_value['Location']}) + + def test_attach_associate_only(self, mocker, get_object_or_400, parent_relationship_factory, mock_response_new): + (serializer, mock_parent_relationship) = parent_relationship_factory(SubListCreateAttachDetachAPIView, 'wife') + serializer.create = mocker.Mock(return_value=mocker.MagicMock()) + + mock_request = mocker.MagicMock(data=dict(id=1)) + ret = serializer.attach(mock_request, None, None) + + assert ret == mock_response_new + serializer.create.assert_not_called() + mock_parent_relationship.wife.add.assert_called_with(get_object_or_400.return_value) + mock_response_new.assert_called_with(Response, status=status.HTTP_204_NO_CONTENT) + + def test_unattach_validate_ok(self, mocker): + mock_request = mocker.MagicMock(data=dict(id=1)) + serializer = SubListCreateAttachDetachAPIView() + + (sub_id, res) = serializer.unattach_validate(mock_request) + + assert sub_id == 1 + assert res is None + + def test_unattach_validate_missing_id(self, mocker): + mock_request = mocker.MagicMock(data=dict()) + serializer = SubListCreateAttachDetachAPIView() + + (sub_id, res) = serializer.unattach_validate(mock_request) + + assert sub_id is None + assert type(res) is Response + + def test_unattach_by_id_ok(self, mocker, parent_relationship_factory, get_object_or_400): + (serializer, mock_parent_relationship) = parent_relationship_factory(SubListCreateAttachDetachAPIView, 'wife') + mock_request = mocker.MagicMock() + mock_sub = mocker.MagicMock(name="object to unattach") + get_object_or_400.return_value = mock_sub + + res = serializer.unattach_by_id(mock_request, 1) + + assert type(res) is Response + assert res.status_code == status.HTTP_204_NO_CONTENT + mock_parent_relationship.wife.remove.assert_called_with(mock_sub) + + def test_unattach_ok(self, mocker): + mock_request = mocker.MagicMock() + mock_sub_id = mocker.MagicMock() + view = SubListCreateAttachDetachAPIView() + view.unattach_validate = mocker.MagicMock() + view.unattach_by_id = mocker.MagicMock() + view.unattach_validate.return_value = (mock_sub_id, None) + + view.unattach(mock_request) + + view.unattach_validate.assert_called_with(mock_request) + view.unattach_by_id.assert_called_with(mock_request, mock_sub_id) + + def test_unattach_invalid(self, mocker): + mock_request = mocker.MagicMock() + mock_res = mocker.MagicMock() + view = SubListCreateAttachDetachAPIView() + view.unattach_validate = mocker.MagicMock() + view.unattach_by_id = mocker.MagicMock() + view.unattach_validate.return_value = (None, mock_res) + + view.unattach(mock_request) + + view.unattach_validate.assert_called_with(mock_request) + view.unattach_by_id.assert_not_called() + +class TestDeleteLastUnattachLabelMixin: + @mock.patch('__builtin__.super') + def test_unattach_ok(self, super, mocker): + mock_request = mocker.MagicMock() + mock_sub_id = mocker.MagicMock() + super.return_value = super + super.unattach_validate = mocker.MagicMock(return_value=(mock_sub_id, None)) + super.unattach_by_id = mocker.MagicMock() + + mock_model = mocker.MagicMock() + mock_model.objects.get.return_value = mock_model + mock_model.is_detached.return_value = True + + view = DeleteLastUnattachLabelMixin() + view.model = mock_model + + view.unattach(mock_request, None, None) + + super.unattach_validate.assert_called_with(mock_request) + super.unattach_by_id.assert_called_with(mock_request, mock_sub_id) + mock_model.is_detached.assert_called_with() + mock_model.objects.get.assert_called_with(id=mock_sub_id) + mock_model.delete.assert_called_with() + + @mock.patch('__builtin__.super') + def test_unattach_fail(self, super, mocker): + mock_request = mocker.MagicMock() + mock_response = mocker.MagicMock() + super.return_value = super + super.unattach_validate = mocker.MagicMock(return_value=(None, mock_response)) + view = DeleteLastUnattachLabelMixin() + + res = view.unattach(mock_request, None, None) + + super.unattach_validate.assert_called_with(mock_request) + assert mock_response == res + +class TestParentMixin: + def test_get_parent_object(self, mocker, get_object_or_404): + parent_mixin = ParentMixin() + parent_mixin.lookup_field = 'foo' + parent_mixin.kwargs = dict(foo='bar') + parent_mixin.parent_model = 'parent_model' + mock_parent_mixin = mocker.MagicMock(wraps=parent_mixin) + + return_value = mock_parent_mixin.get_parent_object() + + get_object_or_404.assert_called_with(parent_mixin.parent_model, **parent_mixin.kwargs) + assert get_object_or_404.return_value == return_value + diff --git a/awx/main/tests/unit/api/test_serializers.py b/awx/main/tests/unit/api/test_serializers.py new file mode 100644 index 0000000000..2496ba9a2d --- /dev/null +++ b/awx/main/tests/unit/api/test_serializers.py @@ -0,0 +1,235 @@ +# Python +import pytest +import mock +from mock import PropertyMock +import json + +# AWX +from awx.api.serializers import ( + JobTemplateSerializer, + JobSerializer, + JobOptionsSerializer, + CustomInventoryScriptSerializer, +) +from awx.main.models import ( + Label, + Job, + CustomInventoryScript, + User, +) + +#DRF +from rest_framework.request import Request +from rest_framework import serializers +from rest_framework.test import ( + APIRequestFactory, + force_authenticate, +) + + +def mock_JT_resource_data(): + return ({}, []) + +@pytest.fixture +def job_template(mocker): + mock_jt = mocker.MagicMock(pk=5) + mock_jt.resource_validation_data = mock_JT_resource_data + return mock_jt + +@pytest.fixture +def job(mocker, job_template): + return mocker.MagicMock(pk=5, job_template=job_template) + +@pytest.fixture +def labels(mocker): + return [Label(id=x, name='label-%d' % x) for x in xrange(0, 25)] + +@pytest.fixture +def jobs(mocker): + return [Job(id=x, name='job-%d' % x) for x in xrange(0, 25)] + +class GetRelatedMixin: + def _assert(self, model_obj, related, resource_name, related_resource_name): + assert related_resource_name in related + assert related[related_resource_name] == '/api/v1/%s/%d/%s/' % (resource_name, model_obj.pk, related_resource_name) + + def _mock_and_run(self, serializer_class, model_obj): + serializer = serializer_class() + related = serializer.get_related(model_obj) + return related + + def _test_get_related(self, serializer_class, model_obj, resource_name, related_resource_name): + related = self._mock_and_run(serializer_class, model_obj) + self._assert(model_obj, related, resource_name, related_resource_name) + return related + +class GetSummaryFieldsMixin: + def _assert(self, summary, summary_field_name): + assert summary_field_name in summary + + def _mock_and_run(self, serializer_class, model_obj): + serializer = serializer_class() + return serializer.get_summary_fields(model_obj) + + def _test_get_summary_fields(self, serializer_class, model_obj, summary_field_name): + summary = self._mock_and_run(serializer_class, model_obj) + self._assert(summary, summary_field_name) + return summary + +@mock.patch('awx.api.serializers.UnifiedJobTemplateSerializer.get_related', lambda x,y: {}) +@mock.patch('awx.api.serializers.JobOptionsSerializer.get_related', lambda x,y: {}) +class TestJobTemplateSerializerGetRelated(GetRelatedMixin): + @pytest.mark.parametrize("related_resource_name", [ + 'jobs', + 'schedules', + 'activity_stream', + 'launch', + 'notification_templates_any', + 'notification_templates_success', + 'notification_templates_error', + 'survey_spec', + 'labels', + 'callback', + ]) + def test_get_related(self, job_template, related_resource_name): + self._test_get_related(JobTemplateSerializer, job_template, 'job_templates', related_resource_name) + + def test_callback_absent(self, job_template): + job_template.host_config_key = None + related = self._mock_and_run(JobTemplateSerializer, job_template) + assert 'callback' not in related + +class TestJobTemplateSerializerGetSummaryFields(GetSummaryFieldsMixin): + def test__recent_jobs(self, mocker, job_template, jobs): + + job_template.jobs.all = mocker.MagicMock(**{'order_by.return_value': jobs}) + job_template.jobs.all.return_value = job_template.jobs.all + + serializer = JobTemplateSerializer() + recent_jobs = serializer._recent_jobs(job_template) + + job_template.jobs.all.assert_called_once_with() + job_template.jobs.all.order_by.assert_called_once_with('-created') + assert len(recent_jobs) == 10 + for x in jobs[:10]: + assert recent_jobs == [{'id': x.id, 'status': x.status, 'finished': x.finished} for x in jobs[:10]] + + def test_survey_spec_exists(self, mocker, job_template): + job_template.survey_spec = {'name': 'blah', 'description': 'blah blah'} + self._test_get_summary_fields(JobTemplateSerializer, job_template, 'survey') + + def test_survey_spec_absent(self, mocker, job_template): + job_template.survey_spec = None + summary = self._mock_and_run(JobTemplateSerializer, job_template) + assert 'survey' not in summary + + @pytest.mark.skip(reason="RBAC needs to land") + def test_can_copy_true(self, mocker, job_template): + pass + + @pytest.mark.skip(reason="RBAC needs to land") + def test_can_copy_false(self, mocker, job_template): + pass + + @pytest.mark.skip(reason="RBAC needs to land") + def test_can_edit_true(self, mocker, job_template): + pass + + @pytest.mark.skip(reason="RBAC needs to land") + def test_can_edit_false(self, mocker, job_template): + pass + +@mock.patch('awx.api.serializers.UnifiedJobTemplateSerializer.get_related', lambda x,y: {}) +@mock.patch('awx.api.serializers.JobOptionsSerializer.get_related', lambda x,y: {}) +class TestJobSerializerGetRelated(GetRelatedMixin): + @pytest.mark.parametrize("related_resource_name", [ + 'job_events', + 'job_plays', + 'job_tasks', + 'relaunch', + 'labels', + ]) + def test_get_related(self, mocker, job, related_resource_name): + self._test_get_related(JobSerializer, job, 'jobs', related_resource_name) + + def test_job_template_absent(self, mocker, job): + job.job_template = None + serializer = JobSerializer() + related = serializer.get_related(job) + assert 'job_template' not in related + + def test_job_template_present(self, job): + related = self._mock_and_run(JobSerializer, job) + assert 'job_template' in related + assert related['job_template'] == '/api/v1/%s/%d/' % ('job_templates', job.job_template.pk) + +@mock.patch('awx.api.serializers.BaseSerializer.to_representation', lambda self,obj: { + 'extra_vars': obj.extra_vars}) +class TestJobSerializerSubstitution(): + + def test_survey_password_hide(self, mocker): + job = mocker.MagicMock(**{ + 'display_extra_vars.return_value': '{\"secret_key\": \"$encrypted$\"}', + 'extra_vars.return_value': '{\"secret_key\": \"my_password\"}'}) + serializer = JobSerializer(job) + rep = serializer.to_representation(job) + extra_vars = json.loads(rep['extra_vars']) + assert extra_vars['secret_key'] == '$encrypted$' + job.display_extra_vars.assert_called_once_with() + assert 'my_password' not in extra_vars + +@mock.patch('awx.api.serializers.BaseSerializer.get_summary_fields', lambda x,y: {}) +class TestJobOptionsSerializerGetSummaryFields(GetSummaryFieldsMixin): + def test__summary_field_labels_10_max(self, mocker, job_template, labels): + job_template.labels.all = mocker.MagicMock(**{'order_by.return_value': labels}) + job_template.labels.all.return_value = job_template.labels.all + + serializer = JobOptionsSerializer() + summary_labels = serializer._summary_field_labels(job_template) + + job_template.labels.all.order_by.assert_called_with('name') + assert len(summary_labels['results']) == 10 + assert summary_labels['results'] == [{'id': x.id, 'name': x.name} for x in labels[:10]] + + def test_labels_exists(self, mocker, job_template): + self._test_get_summary_fields(JobOptionsSerializer, job_template, 'labels') + +class TestJobTemplateSerializerValidation(object): + + good_extra_vars = ["{\"test\": \"keys\"}", "---\ntest: key"] + bad_extra_vars = ["{\"test\": \"keys\"", "---\ntest: [2"] + + def test_validate_extra_vars(self): + serializer = JobTemplateSerializer() + for ev in self.good_extra_vars: + serializer.validate_extra_vars(ev) + for ev in self.bad_extra_vars: + with pytest.raises(serializers.ValidationError): + serializer.validate_extra_vars(ev) + +class TestCustomInventoryScriptSerializer(object): + + @pytest.mark.parametrize("superuser,sysaudit,admin_role,value", + ((True, False, False, '#!/python'), + (False, True, False, '#!/python'), + (False, False, True, '#!/python'), + (False, False, False, None))) + def test_to_representation_orphan(self, superuser, sysaudit, admin_role, value): + with mock.patch.object(CustomInventoryScriptSerializer, 'get_summary_fields', return_value={}): + User.add_to_class('is_system_auditor', sysaudit) + user = User(username="root", is_superuser=superuser) + roles = [user] if admin_role else [] + + with mock.patch('awx.main.models.CustomInventoryScript.admin_role', new_callable=PropertyMock, return_value=roles): + cis = CustomInventoryScript(pk=1, script='#!/python') + serializer = CustomInventoryScriptSerializer() + + factory = APIRequestFactory() + wsgi_request = factory.post("/inventory_script/1", {'id':1}, format="json") + force_authenticate(wsgi_request, user) + + request = Request(wsgi_request) + serializer.context['request'] = request + + representation = serializer.to_representation(cis) + assert representation['script'] == value diff --git a/awx/main/tests/unit/api/test_views.py b/awx/main/tests/unit/api/test_views.py new file mode 100644 index 0000000000..a03ef7adae --- /dev/null +++ b/awx/main/tests/unit/api/test_views.py @@ -0,0 +1,97 @@ +import mock +import pytest + +from rest_framework.test import APIRequestFactory +from rest_framework.test import force_authenticate + +from django.contrib.contenttypes.models import ContentType + +from awx.api.views import ( + ApiV1RootView, + TeamRolesList, + JobTemplateLabelList, +) + +from awx.main.models import ( + User, + Role, +) + +@pytest.fixture +def mock_response_new(mocker): + m = mocker.patch('awx.api.views.Response.__new__') + m.return_value = m + return m + +class TestApiV1RootView: + def test_get_endpoints(self, mocker, mock_response_new): + endpoints = [ + 'authtoken', + 'ping', + 'config', + #'settings', + 'me', + 'dashboard', + 'organizations', + 'users', + 'projects', + 'teams', + 'credentials', + 'inventory', + 'inventory_scripts', + 'inventory_sources', + 'groups', + 'hosts', + 'job_templates', + 'jobs', + 'ad_hoc_commands', + 'system_job_templates', + 'system_jobs', + 'schedules', + 'notification_templates', + 'notifications', + 'labels', + 'unified_job_templates', + 'unified_jobs', + 'activity_stream', + ] + view = ApiV1RootView() + ret = view.get(mocker.MagicMock()) + + assert ret == mock_response_new + data_arg = mock_response_new.mock_calls[0][1][1] + for endpoint in endpoints: + assert endpoint in data_arg + +class TestJobTemplateLabelList: + def test_inherited_mixin_unattach(self): + with mock.patch('awx.api.generics.DeleteLastUnattachLabelMixin.unattach') as mixin_unattach: + view = JobTemplateLabelList() + mock_request = mock.MagicMock() + + super(JobTemplateLabelList, view).unattach(mock_request, None, None) + assert mixin_unattach.called_with(mock_request, None, None) + +@pytest.mark.parametrize("url", ["/team/1/roles", "/role/1/teams"]) +def test_team_roles_list_post_org_roles(url): + with mock.patch('awx.api.views.Role.objects.get') as role_get, \ + mock.patch('awx.api.views.ContentType.objects.get_for_model') as ct_get: + + role_mock = mock.MagicMock(spec=Role) + content_type_mock = mock.MagicMock(spec=ContentType) + role_mock.content_type = content_type_mock + role_get.return_value = role_mock + ct_get.return_value = content_type_mock + + factory = APIRequestFactory() + view = TeamRolesList.as_view() + + request = factory.post(url, {'id':1}, format="json") + force_authenticate(request, User(username="root", is_superuser=True)) + + response = view(request) + response.render() + + assert response.status_code == 400 + assert 'cannot assign' in response.content + diff --git a/awx/main/tests/unit/models/test_job_template_unit.py b/awx/main/tests/unit/models/test_job_template_unit.py new file mode 100644 index 0000000000..a25cce6f6c --- /dev/null +++ b/awx/main/tests/unit/models/test_job_template_unit.py @@ -0,0 +1,40 @@ +import pytest + + +def test_missing_project_error(job_template_factory): + objects = job_template_factory( + 'missing-project-jt', + organization='org1', + inventory='inventory1', + credential='cred1', + persisted=False) + obj = objects.job_template + assert 'project' in obj.resources_needed_to_start + validation_errors, resources_needed_to_start = obj.resource_validation_data() + assert 'project' in validation_errors + +def test_inventory_credential_need_to_start(job_template_factory): + objects = job_template_factory( + 'job-template-few-resources', + project='project1', + persisted=False) + obj = objects.job_template + assert 'inventory' in obj.resources_needed_to_start + assert 'credential' in obj.resources_needed_to_start + +def test_inventory_credential_contradictions(job_template_factory): + objects = job_template_factory( + 'job-template-paradox', + project='project1', + persisted=False) + obj = objects.job_template + obj.ask_inventory_on_launch = False + obj.ask_credential_on_launch = False + validation_errors, resources_needed_to_start = obj.resource_validation_data() + assert 'inventory' in validation_errors + assert 'credential' in validation_errors + +@pytest.mark.survey +def test_survey_password_list(job_with_secret_key_unit): + """Verify that survey_password_variables method gives a list of survey passwords""" + assert job_with_secret_key_unit.job_template.survey_password_variables() == ['secret_key', 'SSN'] diff --git a/awx/main/tests/unit/models/test_job_unit.py b/awx/main/tests/unit/models/test_job_unit.py new file mode 100644 index 0000000000..a1791c59d5 --- /dev/null +++ b/awx/main/tests/unit/models/test_job_unit.py @@ -0,0 +1,39 @@ +import pytest +import json + +from awx.main.tasks import RunJob + + +@pytest.fixture +def job(mocker): + return mocker.MagicMock(**{ + 'display_extra_vars.return_value': '{\"secret_key\": \"$encrypted$\"}', + 'extra_vars_dict': {"secret_key": "my_password"}, + 'pk': 1, 'job_template.pk': 1, 'job_template.name': '', + 'created_by.pk': 1, 'created_by.username': 'admin', + 'launch_type': 'manual'}) + +@pytest.mark.survey +def test_job_redacted_extra_vars(job_with_secret_key_unit): + """Verify that this method redacts vars marked as passwords in a survey""" + assert json.loads(job_with_secret_key_unit.display_extra_vars()) == { + 'submitter_email': 'foobar@redhat.com', + 'secret_key': '$encrypted$', + 'SSN': '$encrypted$'} + +def test_job_safe_args_redacted_passwords(job): + """Verify that safe_args hides passwords in the job extra_vars""" + kwargs = {'ansible_version': '2.1'} + run_job = RunJob() + safe_args = run_job.build_safe_args(job, **kwargs) + ev_index = safe_args.index('-e') + 1 + extra_vars = json.loads(safe_args[ev_index]) + assert extra_vars['secret_key'] == '$encrypted$' + +def test_job_args_unredacted_passwords(job): + kwargs = {'ansible_version': '2.1'} + run_job = RunJob() + args = run_job.build_args(job, **kwargs) + ev_index = args.index('-e') + 1 + extra_vars = json.loads(args[ev_index]) + assert extra_vars['secret_key'] == 'my_password' diff --git a/awx/main/tests/unit/models/test_label.py b/awx/main/tests/unit/models/test_label.py new file mode 100644 index 0000000000..20da73e9ad --- /dev/null +++ b/awx/main/tests/unit/models/test_label.py @@ -0,0 +1,65 @@ +import pytest + +from awx.main.models.label import Label +from awx.main.models.unified_jobs import UnifiedJobTemplate, UnifiedJob + + +def test_get_orphaned_labels(mocker): + mock_query_set = mocker.MagicMock() + Label.objects.filter = mocker.MagicMock(return_value=mock_query_set) + + ret = Label.get_orphaned_labels() + + assert mock_query_set == ret + Label.objects.filter.assert_called_with(organization=None, jobtemplate_labels__isnull=True) + +def test_is_detached(mocker): + mock_query_set = mocker.MagicMock() + Label.objects.filter = mocker.MagicMock(return_value=mock_query_set) + mock_query_set.count.return_value = 1 + + label = Label(id=37) + ret = label.is_detached() + + assert ret is True + Label.objects.filter.assert_called_with(id=37, unifiedjob_labels__isnull=True, unifiedjobtemplate_labels__isnull=True) + mock_query_set.count.assert_called_with() + +def test_is_detached_not(mocker): + mock_query_set = mocker.MagicMock() + Label.objects.filter = mocker.MagicMock(return_value=mock_query_set) + mock_query_set.count.return_value = 0 + + label = Label(id=37) + ret = label.is_detached() + + assert ret is False + Label.objects.filter.assert_called_with(id=37, unifiedjob_labels__isnull=True, unifiedjobtemplate_labels__isnull=True) + mock_query_set.count.assert_called_with() + +@pytest.mark.parametrize("jt_count,j_count,expected", [ + (1, 0, True), + (0, 1, True), + (1, 1, False), +]) +def test_is_candidate_for_detach(mocker, jt_count, j_count, expected): + mock_job_qs = mocker.MagicMock() + mock_job_qs.count = mocker.MagicMock(return_value=j_count) + UnifiedJob.objects = mocker.MagicMock() + UnifiedJob.objects.filter = mocker.MagicMock(return_value=mock_job_qs) + + mock_jt_qs = mocker.MagicMock() + mock_jt_qs.count = mocker.MagicMock(return_value=jt_count) + UnifiedJobTemplate.objects = mocker.MagicMock() + UnifiedJobTemplate.objects.filter = mocker.MagicMock(return_value=mock_jt_qs) + + label = Label(id=37) + ret = label.is_candidate_for_detach() + + UnifiedJob.objects.filter.assert_called_with(labels__in=[label.id]) + UnifiedJobTemplate.objects.filter.assert_called_with(labels__in=[label.id]) + mock_job_qs.count.assert_called_with() + mock_jt_qs.count.assert_called_with() + + assert ret is expected + diff --git a/awx/main/tests/unit/settings/test_defaults.py b/awx/main/tests/unit/settings/test_defaults.py new file mode 100644 index 0000000000..f59ddfb60b --- /dev/null +++ b/awx/main/tests/unit/settings/test_defaults.py @@ -0,0 +1,18 @@ +import pytest + +from django.conf import settings +from datetime import timedelta + +@pytest.mark.parametrize("job_name,function_path", [ + ('label_cleanup', 'awx.main.tasks.run_label_cleanup'), + ('admin_checks', 'awx.main.tasks.run_administrative_checks'), + ('tower_scheduler', 'awx.main.tasks.tower_periodic_scheduler'), +]) +def test_CELERYBEAT_SCHEDULE(mocker, job_name, function_path): + assert job_name in settings.CELERYBEAT_SCHEDULE + assert 'schedule' in settings.CELERYBEAT_SCHEDULE[job_name] + assert type(settings.CELERYBEAT_SCHEDULE[job_name]['schedule']) is timedelta + assert settings.CELERYBEAT_SCHEDULE[job_name]['task'] == function_path + + # Ensures that the function exists + mocker.patch(function_path) diff --git a/awx/main/tests/unit/test_access.py b/awx/main/tests/unit/test_access.py new file mode 100644 index 0000000000..000d91268c --- /dev/null +++ b/awx/main/tests/unit/test_access.py @@ -0,0 +1,112 @@ +import pytest +import mock + +from django.contrib.auth.models import User +from django.forms.models import model_to_dict + +from awx.main.access import ( + BaseAccess, + check_superuser, + JobTemplateAccess, +) +from awx.main.models import Credential, Inventory, Project, Role, Organization + + +@pytest.fixture +def job_template_with_ids(job_template_factory): + # Create non-persisted objects with IDs to send to job_template_factory + credential = Credential(id=1, pk=1, name='testcred', kind='ssh') + net_cred = Credential(id=2, pk=2, name='testnetcred', kind='net') + cloud_cred = Credential(id=3, pk=3, name='testcloudcred', kind='aws') + inv = Inventory(id=11, pk=11, name='testinv') + proj = Project(id=14, pk=14, name='testproj') + + jt_objects = job_template_factory( + 'testJT', project=proj, inventory=inv, credential=credential, + cloud_credential=cloud_cred, network_credential=net_cred, + persisted=False) + return jt_objects.job_template + +@pytest.fixture +def user_unit(): + return User(username='rando', password='raginrando', email='rando@redhat.com') + +def test_superuser(mocker): + user = mocker.MagicMock(spec=User, id=1, is_superuser=True) + access = BaseAccess(user) + + can_add = check_superuser(BaseAccess.can_add) + assert can_add(access, None) is True + +def test_not_superuser(mocker): + user = mocker.MagicMock(spec=User, id=1, is_superuser=False) + access = BaseAccess(user) + + can_add = check_superuser(BaseAccess.can_add) + assert can_add(access, None) is False + +def test_jt_existing_values_are_nonsensitive(job_template_with_ids, user_unit): + """Assure that permission checks are not required if submitted data is + identical to what the job template already has.""" + + data = model_to_dict(job_template_with_ids) + access = JobTemplateAccess(user_unit) + + assert access.changes_are_non_sensitive(job_template_with_ids, data) + +def test_change_jt_sensitive_data(job_template_with_ids, mocker, user_unit): + """Assure that can_add is called with all ForeignKeys.""" + + job_template_with_ids.admin_role = Role() + + data = {'inventory': job_template_with_ids.inventory.id + 1} + access = JobTemplateAccess(user_unit) + + mock_add = mock.MagicMock(return_value=False) + with mock.patch('awx.main.models.rbac.Role.__contains__', return_value=True): + with mocker.patch('awx.main.access.JobTemplateAccess.can_add', mock_add): + with mocker.patch('awx.main.access.JobTemplateAccess.can_read', return_value=True): + assert not access.can_change(job_template_with_ids, data) + + mock_add.assert_called_once_with({ + 'inventory': data['inventory'], + 'project': job_template_with_ids.project.id, + 'credential': job_template_with_ids.credential.id, + 'cloud_credential': job_template_with_ids.cloud_credential.id, + 'network_credential': job_template_with_ids.network_credential.id + }) + +def test_jt_add_scan_job_check(job_template_with_ids, user_unit): + "Assure that permissions to add scan jobs work correctly" + + access = JobTemplateAccess(user_unit) + project = job_template_with_ids.project + inventory = job_template_with_ids.inventory + project.use_role = Role() + inventory.use_role = Role() + organization = Organization(name='test-org') + inventory.organization = organization + organization.admin_role = Role() + + def mock_get_object(Class, **kwargs): + if Class == Project: + return project + elif Class == Inventory: + return inventory + else: + raise Exception('Item requested has not been mocked') + + with mock.patch.object(JobTemplateAccess, 'check_license', return_value=None): + with mock.patch('awx.main.models.rbac.Role.__contains__', return_value=True): + with mock.patch('awx.main.access.get_object_or_400', mock_get_object): + assert access.can_add({ + 'project': project.pk, + 'inventory': inventory.pk, + 'job_type': 'scan' + }) + +def test_jt_can_add_bad_data(user_unit): + "Assure that no server errors are returned if we call JT can_add with bad data" + access = JobTemplateAccess(user_unit) + assert not access.can_add({'asdf': 'asdf'}) + diff --git a/awx/main/tests/unit/test_credentials.py b/awx/main/tests/unit/test_credentials.py new file mode 100644 index 0000000000..7445d28fda --- /dev/null +++ b/awx/main/tests/unit/test_credentials.py @@ -0,0 +1,56 @@ +from django.core.exceptions import ValidationError +from awx.main.models.credential import validate_ssh_private_key + +import pytest + +def test_valid_rsa_key(): + begin = """-----BEGIN RSA PRIVATE KEY-----""" + end = """-----END RSA PRIVATE KEY-----""" + unvalidated_key = build_key(begin, body, end) + key_data = validate_ssh_private_key(unvalidated_key) + assert key_data['key_type'] == 'rsa' + +def test_invalid_key(): + unvalidated_key = build_key(key_begin, body, "END KEY") + with pytest.raises(ValidationError): + validate_ssh_private_key(unvalidated_key) + +def test_key_type_empty(): + unvalidated_key = build_key(key_begin, body, key_end) + key_data = validate_ssh_private_key(unvalidated_key) + assert key_data['key_type'] == 'rsa1' + + +def build_key(begin, body, end): + return """%s%s%s""" % (begin, body, end) + +key_begin = """-----BEGIN PRIVATE KEY-----""" +key_end = """-----END PRIVATE KEY-----""" + +body = """ +uFZFyag7VVqI+q/oGnQu+wj/pMi5ox+Qz5L3W0D745DzwgDXOeObAfNlr9NtIKbn +sZ5E0+rYB4Q/U0CYr5juNJQV1dbxq2Em1160axboe2QbvX6wE6Sm6wW9b9cr+PoF +MoYQebUnCY0ObrLbrRugSfZc17lyxK0ZGRgPXKhpMg6Ecv8XpvhjUYU9Esyqfuco +/p26Q140/HsHeHYNma0dQHCEjMr/qEzOY1qguHj+hRf3SARtM9Q+YNgpxchcDDVS +O+n+8Ljd/p82bpEJwxmpXealeWbI6gB9/R6wcCL+ZyCZpnHJd/NJ809Vtu47ZdDi +E6jvqS/3AQhuQKhJlLSDIzezB2VKKrHwOvHkg/+uLoCqHN34Gk6Qio7x69SvXy88 +a7q9D1l/Zx60o08FyZyqlo7l0l/r8EY+36cuI/lvAvfxc5VHVEOvKseUjFRBiCv9 +MkKNxaScoYsPwY7SIS6gD93tg3eM5pA0nfMfya9u1+uq/QCM1gNG3mm6Zd8YG4c/ +Dx4bmsj8cp5ni/Ffl/sKzKYq1THunJEFGXOZRibdxk/Fal3SQrRAwy7CgLQL8SMh +IWqcFm25OtSOP1r1LE25t5pQsMdmp0IP2fEF0t/pXPm1ZfrTurPMqpo4FGm2hkki +U3sH/o6nrkSOjklOLWlwtTkkL4dWPlNwc8OYj8zFizXJkAfv1spzhv3lRouNkw4N +Mm22W7us2f3Ob0H5C07k26h6VuXX+0AybD4tIIcUXCLoNTqA0HvqhKpEuHu3Ck10 +RaB8xHTxgwdhGVaNHMfy9B9l4tNs3Tb5k0LyeRRGVDhWCFo6axYULYebkj+hFLLY ++JE5RzPDFpTf1xbuT+e56H/lLFCUdDu0bn+D0W4ifXaVFegak4r6O4B53CbMqr+R +t6qDPKLUIuVJXK0J6Ay6XgmheXJGbgKh4OtDsc06gsTCE1nY4f/Z82AQahPBfTtF +J2z+NHdsLPn//HlxspGQtmLpuS7Wx0HYXZ+kPRSiE/vmITw85R2u8JSHQicVNN4C +2rlUo15TIU3tTx+WUIrHKHPidUNNotRb2p9n9FoSidU6upKnQHAT/JNv/zcvaia3 +Bhl/wagheWTDnFKSmJ4HlKxplM/32h6MfHqsMVOl4F6eZWKaKgSgN8doXyFJo+sc +yAC6S0gJlD2gQI24iTI4Du1+UGh2MGb69eChvi5mbbdesaZrlR1dRqZpHG+6ob4H +nYLndRvobXS5l6pgGTDRYoUgSbQe21a7Uf3soGl5jHqLWc1zEPwrxV7Wr31mApr6 +8VtGZcLSr0691Q1NLO3eIfuhbMN2mssX/Sl4t+4BibaucNIMfmhKQi8uHtwAXb47 ++TMFlG2EQhZULFM4fLdF1vaizInU3cBk8lsz8i71tDc+5VQTEwoEB7Gksy/XZWEt +6SGHxXUDtNYa+G2O+sQhgqBjLIkVTV6KJOpvNZM+s8Vzv8qoFnD7isKBBrRvF1bP +GOXEG1jd7nSR0WSwcMCHGOrFEELDQPw3k5jqEdPFgVODoZPr+drZVnVz5SAGBk5Y +wsCNaDW+1dABYFlqRTepP5rrSu9wHnRAZ3ZGv+DHoGqenIC5IBR0sQ== +""" diff --git a/awx/main/tests/unit/test_ha.py b/awx/main/tests/unit/test_ha.py new file mode 100644 index 0000000000..07249a67fb --- /dev/null +++ b/awx/main/tests/unit/test_ha.py @@ -0,0 +1,15 @@ +# Copyright (c) 2016 Ansible, Inc. + +# Python +import mock + +# AWX +from awx.main.ha import is_ha_environment + +@mock.patch('awx.main.models.Instance.objects.count', lambda: 2) +def test_multiple_instances(): + assert is_ha_environment() + +@mock.patch('awx.main.models.Instance.objects.count', lambda: 1) +def test_db_localhost(): + assert is_ha_environment() is False diff --git a/awx/main/tests/unit/test_network_credential.py b/awx/main/tests/unit/test_network_credential.py new file mode 100644 index 0000000000..90f9959cfe --- /dev/null +++ b/awx/main/tests/unit/test_network_credential.py @@ -0,0 +1,61 @@ +import pytest + +from awx.main.models.credential import Credential +from awx.main.models.jobs import Job +from awx.main.models.inventory import Inventory +from awx.main.tasks import RunJob + + +@pytest.fixture +def options(): + return { + 'username':'test', + 'password':'test', + 'ssh_key_data': """-----BEGIN PRIVATE KEY-----\nstuff==\n-----END PRIVATE KEY-----""", + 'authorize': True, + 'authorize_password': 'passwd', + } + + +def test_net_cred_parse(mocker, options): + with mocker.patch('django.db.ConnectionRouter.db_for_write'): + job = Job(id=1) + job.inventory = mocker.MagicMock(spec=Inventory, id=2) + job.network_credential = Credential(**options) + + run_job = RunJob() + mocker.patch.object(run_job, 'should_use_proot', return_value=False) + + env = run_job.build_env(job, private_data_dir='/tmp') + assert env['ANSIBLE_NET_USERNAME'] == options['username'] + assert env['ANSIBLE_NET_PASSWORD'] == options['password'] + assert env['ANSIBLE_NET_AUTHORIZE'] == '1' + assert env['ANSIBLE_NET_AUTHORIZE_PASSWORD'] == options['authorize_password'] + + +def test_net_cred_ssh_agent(mocker, options): + with mocker.patch('django.db.ConnectionRouter.db_for_write'): + run_job = RunJob() + + mock_job_attrs = {'forks': False, 'id': 1, 'cancel_flag': False, 'status': 'running', 'job_type': 'normal', + 'credential': None, 'cloud_credential': None, 'network_credential': Credential(**options), + 'become_enabled': False, 'become_method': None, 'become_username': None, + 'inventory': mocker.MagicMock(spec=Inventory, id=2), 'force_handlers': False, + 'limit': None, 'verbosity': None, 'job_tags': None, 'skip_tags': False, + 'start_at_task': False, 'pk': 1, 'launch_type': 'normal', 'job_template':None, + 'created_by': None, 'extra_vars_dict': None, 'project':None, 'playbook': 'test.yml'} + mock_job = mocker.MagicMock(spec=Job, **mock_job_attrs) + + mocker.patch.object(run_job, 'update_model', return_value=mock_job) + mocker.patch.object(run_job, 'build_cwd', return_value='/tmp') + mocker.patch.object(run_job, 'should_use_proot', return_value=False) + mocker.patch.object(run_job, 'run_pexpect', return_value=('successful', 0)) + mocker.patch.object(run_job, 'open_fifo_write', return_value=None) + + run_job.run(mock_job.id) + assert run_job.update_model.call_count == 3 + + job_args = run_job.update_model.call_args_list[1][1].get('job_args') + assert 'ssh-add' in job_args + assert 'ssh-agent' in job_args + assert 'network_credential' in job_args diff --git a/awx/main/tests/redact.py b/awx/main/tests/unit/test_redact.py similarity index 58% rename from awx/main/tests/redact.py rename to awx/main/tests/unit/test_redact.py index ea61aebd77..3535869ee1 100644 --- a/awx/main/tests/redact.py +++ b/awx/main/tests/unit/test_redact.py @@ -1,11 +1,8 @@ - import textwrap # AWX from awx.main.redact import UriCleaner -from awx.main.tests.base import BaseTest, URI - -__all__ = ['UriCleanTests'] +from awx.main.tests.URI import URI TEST_URIS = [ URI('no host', scheme='https', username='myusername', password='mypass', host=None), @@ -38,15 +35,15 @@ uri = URI(scheme="https", username="myusername", password="mypasswordwith%40", h TEST_CLEARTEXT.append({ 'uri' : uri, 'text' : textwrap.dedent("""\ - PLAY [all] ******************************************************************** + PLAY [all] ******************************************************************** - TASK: [delete project directory before update] ******************************** + TASK: [delete project directory before update] ******************************** skipping: [localhost] - TASK: [update project using git and accept hostkey] *************************** + TASK: [update project using git and accept hostkey] *************************** skipping: [localhost] - TASK: [update project using git] ********************************************** + TASK: [update project using git] ********************************************** failed: [localhost] => {"cmd": "/usr/bin/git ls-remote https://%s:%s -h refs/heads/HEAD", "failed": true, "rc": 128} stderr: fatal: unable to access '%s': Could not resolve host: nonexistant.ansible.com @@ -54,10 +51,10 @@ TEST_CLEARTEXT.append({ FATAL: all hosts have already failed -- aborting - PLAY RECAP ******************************************************************** + PLAY RECAP ******************************************************************** to retry, use: --limit @/root/project_update.retry - localhost : ok=0 changed=0 unreachable=0 failed=1 + localhost : ok=0 changed=0 unreachable=0 failed=1 """ % (uri.username, uri.password, str(uri), str(uri))), 'host_occurrences' : 2 @@ -69,70 +66,69 @@ TEST_CLEARTEXT.append({ 'text' : textwrap.dedent("""\ TASK: [update project using git] ** failed: [localhost] => {"cmd": "/usr/bin/git ls-remote https://REDACTED:********", "failed": true, "rc": 128} - stderr: error: Couldn't resolve host '@%s' while accessing %s + stderr: error: Couldn't resolve host '@%s' while accessing %s fatal: HTTP request failed - msg: error: Couldn't resolve host '@%s' while accessing %s + msg: error: Couldn't resolve host '@%s' while accessing %s fatal: HTTP request failed """ % (uri.host, str(uri), uri.host, str(uri))), 'host_occurrences' : 4 }) -class UriCleanTests(BaseTest): - # should redact sensitive usernames and passwords - def test_uri_scm_simple_redacted(self): - for uri in TEST_URIS: - redacted_str = UriCleaner.remove_sensitive(str(uri)) - if uri.username: - self.check_not_found(redacted_str, uri.username, uri.description) - if uri.password: - self.check_not_found(redacted_str, uri.password, uri.description) - - # should replace secret data with safe string, UriCleaner.REPLACE_STR - def test_uri_scm_simple_replaced(self): - for uri in TEST_URIS: - redacted_str = UriCleaner.remove_sensitive(str(uri)) - self.check_found(redacted_str, UriCleaner.REPLACE_STR, uri.get_secret_count()) - - # should redact multiple uris in text - def test_uri_scm_multiple(self): - cleartext = '' - for uri in TEST_URIS: - cleartext += str(uri) + ' ' - for uri in TEST_URIS: - cleartext += str(uri) + '\n' +# should redact sensitive usernames and passwords +def test_uri_scm_simple_redacted(): + for uri in TEST_URIS: redacted_str = UriCleaner.remove_sensitive(str(uri)) if uri.username: - self.check_not_found(redacted_str, uri.username, uri.description) + assert uri.username not in redacted_str if uri.password: - self.check_not_found(redacted_str, uri.password, uri.description) + assert uri.username not in redacted_str - # should replace multiple secret data with safe string - def test_uri_scm_multiple_replaced(self): - cleartext = '' - find_count = 0 - for uri in TEST_URIS: - cleartext += str(uri) + ' ' - find_count += uri.get_secret_count() +# should replace secret data with safe string, UriCleaner.REPLACE_STR +def test_uri_scm_simple_replaced(): + for uri in TEST_URIS: + redacted_str = UriCleaner.remove_sensitive(str(uri)) + assert redacted_str.count(UriCleaner.REPLACE_STR) == uri.get_secret_count() - for uri in TEST_URIS: - cleartext += str(uri) + '\n' - find_count += uri.get_secret_count() +# should redact multiple uris in text +def test_uri_scm_multiple(): + cleartext = '' + for uri in TEST_URIS: + cleartext += str(uri) + ' ' + for uri in TEST_URIS: + cleartext += str(uri) + '\n' - redacted_str = UriCleaner.remove_sensitive(cleartext) - self.check_found(redacted_str, UriCleaner.REPLACE_STR, find_count) + redacted_str = UriCleaner.remove_sensitive(str(uri)) + if uri.username: + assert uri.username not in redacted_str + if uri.password: + assert uri.username not in redacted_str - # should redact and replace multiple secret data within a complex cleartext blob - def test_uri_scm_cleartext_redact_and_replace(self): - for test_data in TEST_CLEARTEXT: - uri = test_data['uri'] - redacted_str = UriCleaner.remove_sensitive(test_data['text']) - self.check_not_found(redacted_str, uri.username, uri.description) - self.check_not_found(redacted_str, uri.password, uri.description) - # Ensure the host didn't get redacted - self.check_found(redacted_str, uri.host, test_data['host_occurrences'], uri.description) +# should replace multiple secret data with safe string +def test_uri_scm_multiple_replaced(): + cleartext = '' + find_count = 0 + for uri in TEST_URIS: + cleartext += str(uri) + ' ' + find_count += uri.get_secret_count() + for uri in TEST_URIS: + cleartext += str(uri) + '\n' + find_count += uri.get_secret_count() + + redacted_str = UriCleaner.remove_sensitive(cleartext) + assert redacted_str.count(UriCleaner.REPLACE_STR) == find_count + +# should redact and replace multiple secret data within a complex cleartext blob +def test_uri_scm_cleartext_redact_and_replace(): + for test_data in TEST_CLEARTEXT: + uri = test_data['uri'] + redacted_str = UriCleaner.remove_sensitive(test_data['text']) + assert uri.username not in redacted_str + assert uri.password not in redacted_str + # Ensure the host didn't get redacted + assert redacted_str.count(uri.host) == test_data['host_occurrences'] diff --git a/awx/main/tests/unit/test_signals.py b/awx/main/tests/unit/test_signals.py new file mode 100644 index 0000000000..c3830ee525 --- /dev/null +++ b/awx/main/tests/unit/test_signals.py @@ -0,0 +1,17 @@ +from awx.main import signals + +class TestCleanupDetachedLabels: + def test_cleanup_detached_labels_on_deleted_parent(self, mocker): + mock_labels = [mocker.MagicMock(), mocker.MagicMock()] + mock_instance = mocker.MagicMock() + mock_instance.labels.all = mocker.MagicMock() + mock_instance.labels.all.return_value = mock_labels + mock_labels[0].is_candidate_for_detach.return_value = True + mock_labels[1].is_candidate_for_detach.return_value = False + + signals.cleanup_detached_labels_on_deleted_parent(None, mock_instance) + + mock_labels[0].is_candidate_for_detach.assert_called_with() + mock_labels[1].is_candidate_for_detach.assert_called_with() + mock_labels[0].delete.assert_called_with() + mock_labels[1].delete.assert_not_called() diff --git a/awx/main/tests/unit/test_tasks.py b/awx/main/tests/unit/test_tasks.py new file mode 100644 index 0000000000..ce88f019ce --- /dev/null +++ b/awx/main/tests/unit/test_tasks.py @@ -0,0 +1,81 @@ +import pytest +from contextlib import contextmanager + +from awx.main.models import ( + UnifiedJob, + Notification, +) + +from awx.main.tasks import ( + run_label_cleanup, + send_notifications, + run_administrative_checks, +) + +from awx.main.task_engine import TaskSerializer + + +@contextmanager +def apply_patches(_patches): + [p.start() for p in _patches] + yield + [p.stop() for p in _patches] + +def test_run_label_cleanup(mocker): + qs = mocker.Mock(**{'count.return_value': 3, 'delete.return_value': None}) + mock_label = mocker.patch('awx.main.models.label.Label.get_orphaned_labels',return_value=qs) + + ret = run_label_cleanup() + + mock_label.assert_called_with() + qs.delete.assert_called_with() + assert 3 == ret + +def test_send_notifications_not_list(): + with pytest.raises(TypeError): + send_notifications(None) + +def test_send_notifications_job_id(mocker): + with mocker.patch('awx.main.models.UnifiedJob.objects.get'): + send_notifications([], job_id=1) + assert UnifiedJob.objects.get.called + assert UnifiedJob.objects.get.called_with(id=1) + +def test_send_notifications_list(mocker): + patches = list() + + mock_job = mocker.MagicMock(spec=UnifiedJob) + patches.append(mocker.patch('awx.main.models.UnifiedJob.objects.get', return_value=mock_job)) + + mock_notification = mocker.MagicMock(spec=Notification, subject="test") + patches.append(mocker.patch('awx.main.models.Notification.objects.get', return_value=mock_notification)) + + with apply_patches(patches): + send_notifications([1,2], job_id=1) + assert Notification.objects.get.call_count == 2 + assert mock_notification.status == "successful" + assert mock_notification.save.called + + assert mock_job.notifications.add.called + assert mock_job.notifications.add.called_with(mock_notification) + +@pytest.mark.parametrize("current_instances,call_count", [(91, 2), (89,1)]) +def test_run_admin_checks_usage(mocker, current_instances, call_count): + patches = list() + patches.append(mocker.patch('awx.main.tasks.tower_settings')) + patches.append(mocker.patch('awx.main.tasks.User')) + + mock_ts = mocker.Mock(spec=TaskSerializer) + mock_ts.from_database.return_value = {'instance_count': 100, 'current_instances': current_instances} + patches.append(mocker.patch('awx.main.tasks.TaskSerializer', return_value=mock_ts)) + + mock_sm = mocker.Mock() + patches.append(mocker.patch('awx.main.tasks.send_mail', wraps=mock_sm)) + + with apply_patches(patches): + run_administrative_checks() + assert mock_sm.called + if call_count == 2: + assert '90%' in mock_sm.call_args_list[0][0][0] + else: + assert 'expire' in mock_sm.call_args_list[0][0][0] diff --git a/awx/main/tests/unit/test_unified_jobs.py b/awx/main/tests/unit/test_unified_jobs.py new file mode 100644 index 0000000000..edd6978b47 --- /dev/null +++ b/awx/main/tests/unit/test_unified_jobs.py @@ -0,0 +1,48 @@ +# Copyright (c) 2015 Ansible, Inc. +# All Rights Reserved + +# Python +import mock +from mock import Mock +from StringIO import StringIO +from django.utils.timezone import now + +# AWX +from awx.main.models import UnifiedJob + + +# stdout file present +@mock.patch('os.path.exists', return_value=True) +@mock.patch('codecs.open', return_value='my_file_handler') +def test_result_stdout_raw_handle_file__found(exists, open): + unified_job = UnifiedJob() + unified_job.result_stdout_file = 'dummy' + + with mock.patch('os.stat', return_value=Mock(st_size=1)): + result = unified_job.result_stdout_raw_handle() + + assert result == 'my_file_handler' + +# stdout file missing, job finished +@mock.patch('os.path.exists', return_value=False) +def test_result_stdout_raw_handle__missing(exists): + unified_job = UnifiedJob() + unified_job.result_stdout_file = 'dummy' + unified_job.finished = now() + + result = unified_job.result_stdout_raw_handle() + + assert isinstance(result, StringIO) + assert result.read() == 'stdout capture is missing' + +# stdout file missing, job not finished +@mock.patch('os.path.exists', return_value=False) +def test_result_stdout_raw_handle__pending(exists): + unified_job = UnifiedJob() + unified_job.result_stdout_file = 'dummy' + unified_job.finished = None + + result = unified_job.result_stdout_raw_handle() + + assert isinstance(result, StringIO) + assert result.read() == 'Waiting for results...' diff --git a/awx/main/tests/views.py b/awx/main/tests/views.py deleted file mode 100644 index 6903b1ebf8..0000000000 --- a/awx/main/tests/views.py +++ /dev/null @@ -1,110 +0,0 @@ -# Django -from django.core.urlresolvers import reverse - -# Reuse Test code -from awx.main.tests.base import BaseLiveServerTest, QueueStartStopTestMixin -from awx.main.tests.base import URI -from awx.main.models.projects import * # noqa - -__all__ = ['UnifiedJobStdoutRedactedTests'] - - -TEST_STDOUTS = [] -uri = URI(scheme="https", username="Dhh3U47nmC26xk9PKscV", password="PXPfWW8YzYrgS@E5NbQ2H@", host="github.ginger.com/theirrepo.git/info/refs") -TEST_STDOUTS.append({ - 'description': 'uri in a plain text document', - 'uri' : uri, - 'text' : 'hello world %s goodbye world' % uri, - 'occurrences' : 1 -}) - -uri = URI(scheme="https", username="applepie@@@", password="thatyouknow@@@@", host="github.ginger.com/theirrepo.git/info/refs") -TEST_STDOUTS.append({ - 'description': 'uri appears twice in a multiline plain text document', - 'uri' : uri, - 'text' : 'hello world %s \n\nyoyo\n\nhello\n%s' % (uri, uri), - 'occurrences' : 2 -}) - -class UnifiedJobStdoutRedactedTests(BaseLiveServerTest, QueueStartStopTestMixin): - - def setUp(self): - super(UnifiedJobStdoutRedactedTests, self).setUp() - self.setup_instances() - self.setup_users() - self.test_cases = [] - self.negative_test_cases = [] - - proj = self.make_project() - - for e in TEST_STDOUTS: - e['project'] = ProjectUpdate(project=proj) - e['project'].result_stdout_text = e['text'] - e['project'].save() - self.test_cases.append(e) - for d in TEST_STDOUTS: - d['job'] = self.make_job() - d['job'].result_stdout_text = d['text'] - d['job'].save() - self.negative_test_cases.append(d) - - # This is more of a functional test than a unit test. - # should filter out username and password - def check_sensitive_redacted(self, test_data, response): - uri = test_data['uri'] - self.assertIsNotNone(response['content']) - self.check_not_found(response['content'], uri.username, test_data['description']) - self.check_not_found(response['content'], uri.password, test_data['description']) - # Ensure the host didn't get redacted - self.check_found(response['content'], uri.host, test_data['occurrences'], test_data['description']) - - def check_sensitive_not_redacted(self, test_data, response): - uri = test_data['uri'] - self.assertIsNotNone(response['content']) - self.check_found(response['content'], uri.username, description=test_data['description']) - self.check_found(response['content'], uri.password, description=test_data['description']) - - def _get_url_job_stdout(self, job, url_base, format='json'): - formats = { - 'json': 'application/json', - 'ansi': 'text/plain', - 'txt': 'text/plain', - 'html': 'text/html', - } - content_type = formats[format] - project_update_stdout_url = reverse(url_base, args=(job.pk,)) + "?format=" + format - return self.get(project_update_stdout_url, expect=200, auth=self.get_super_credentials(), accept=content_type) - - def _test_redaction_enabled(self, format): - for test_data in self.test_cases: - response = self._get_url_job_stdout(test_data['project'], "api:project_update_stdout", format=format) - self.check_sensitive_redacted(test_data, response) - - def _test_redaction_disabled(self, format): - for test_data in self.negative_test_cases: - response = self._get_url_job_stdout(test_data['job'], "api:job_stdout", format=format) - self.check_sensitive_not_redacted(test_data, response) - - def test_project_update_redaction_enabled_json(self): - self._test_redaction_enabled('json') - - def test_project_update_redaction_enabled_ansi(self): - self._test_redaction_enabled('ansi') - - def test_project_update_redaction_enabled_html(self): - self._test_redaction_enabled('html') - - def test_project_update_redaction_enabled_txt(self): - self._test_redaction_enabled('txt') - - def test_job_redaction_disabled_json(self): - self._test_redaction_disabled('json') - - def test_job_redaction_disabled_ansi(self): - self._test_redaction_disabled('ansi') - - def test_job_redaction_disabled_html(self): - self._test_redaction_disabled('html') - - def test_job_redaction_disabled_txt(self): - self._test_redaction_disabled('txt') diff --git a/awx/main/utils.py b/awx/main/utils.py index 9e6a005dc1..f1a71fbcfc 100644 --- a/awx/main/utils.py +++ b/awx/main/utils.py @@ -20,6 +20,7 @@ import tempfile from rest_framework.exceptions import ParseError, PermissionDenied from django.utils.encoding import smart_str from django.core.urlresolvers import reverse +from django.apps import apps # PyCrypto from Crypto.Cipher import AES @@ -30,7 +31,8 @@ __all__ = ['get_object_or_400', 'get_object_or_403', 'camelcase_to_underscore', 'get_ansible_version', 'get_ssh_version', 'get_awx_version', 'update_scm_url', 'get_type_for_model', 'get_model_for_type', 'to_python_boolean', 'ignore_inventory_computed_fields', 'ignore_inventory_group_removal', - '_inventory_updates', 'get_pk_from_dict'] + '_inventory_updates', 'get_pk_from_dict', 'getattrd', 'NoDefaultProvided', + 'get_current_apps', 'set_current_apps'] def get_object_or_400(klass, *args, **kwargs): @@ -42,9 +44,9 @@ def get_object_or_400(klass, *args, **kwargs): queryset = _get_queryset(klass) try: return queryset.get(*args, **kwargs) - except queryset.model.DoesNotExist, e: + except queryset.model.DoesNotExist as e: raise ParseError(*e.args) - except queryset.model.MultipleObjectsReturned, e: + except queryset.model.MultipleObjectsReturned as e: raise ParseError(*e.args) @@ -57,9 +59,9 @@ def get_object_or_403(klass, *args, **kwargs): queryset = _get_queryset(klass) try: return queryset.get(*args, **kwargs) - except queryset.model.DoesNotExist, e: + except queryset.model.DoesNotExist as e: raise PermissionDenied(*e.args) - except queryset.model.MultipleObjectsReturned, e: + except queryset.model.MultipleObjectsReturned as e: raise PermissionDenied(*e.args) def to_python_boolean(value, allow_none=False): @@ -139,12 +141,13 @@ def get_encryption_key(instance, field_name): h.update(field_name) return h.digest()[:16] - -def encrypt_field(instance, field_name, ask=False): +def encrypt_field(instance, field_name, ask=False, subfield=None): ''' Return content of the given instance and field name encrypted. ''' value = getattr(instance, field_name) + if isinstance(value, dict) and subfield is not None: + value = value[subfield] if not value or value.startswith('$encrypted$') or (ask and value == 'ASK'): return value value = smart_str(value) @@ -157,11 +160,13 @@ def encrypt_field(instance, field_name, ask=False): return '$encrypted$%s$%s' % ('AES', b64data) -def decrypt_field(instance, field_name): +def decrypt_field(instance, field_name, subfield=None): ''' Return content of the given instance and field name decrypted. ''' value = getattr(instance, field_name) + if isinstance(value, dict) and subfield is not None: + value = value[subfield] if not value or not value.startswith('$encrypted$'): return value algo, b64data = value[len('$encrypted$'):].split('$', 1) @@ -281,6 +286,22 @@ def update_scm_url(scm_type, url, username=True, password=True, return new_url + +def get_allowed_fields(obj, serializer_mapping): + from django.contrib.auth.models import User + + if serializer_mapping is not None and obj.__class__ in serializer_mapping: + serializer_actual = serializer_mapping[obj.__class__]() + allowed_fields = [x for x in serializer_actual.fields if not serializer_actual.fields[x].read_only] + ['id'] + else: + allowed_fields = [x.name for x in obj._meta.fields] + + if isinstance(obj, User): + field_blacklist = ['last_login'] + allowed_fields = [f for f in allowed_fields if f not in field_blacklist] + + return allowed_fields + def model_instance_diff(old, new, serializer_mapping=None): """ Calculate the differences between two model instances. One of the instances may be None (i.e., a newly @@ -298,11 +319,7 @@ def model_instance_diff(old, new, serializer_mapping=None): diff = {} - if serializer_mapping is not None and new.__class__ in serializer_mapping: - serializer_actual = serializer_mapping[new.__class__]() - allowed_fields = [x for x in serializer_actual.fields if not serializer_actual.fields[x].read_only] + ['id'] - else: - allowed_fields = [x.name for x in new._meta.fields] + allowed_fields = get_allowed_fields(new, serializer_mapping) for field in allowed_fields: old_value = getattr(old, field, None) @@ -331,11 +348,9 @@ def model_to_dict(obj, serializer_mapping=None): """ from awx.main.models.credential import Credential attr_d = {} - if serializer_mapping is not None and obj.__class__ in serializer_mapping: - serializer_actual = serializer_mapping[obj.__class__]() - allowed_fields = [x for x in serializer_actual.fields if not serializer_actual.fields[x].read_only] + ['id'] - else: - allowed_fields = [x.name for x in obj._meta.fields] + + allowed_fields = get_allowed_fields(obj, serializer_mapping) + for field in obj._meta.fields: if field.name not in allowed_fields: continue @@ -354,8 +369,7 @@ def get_type_for_model(model): ''' Return type name for a given model class. ''' - from rest_framework.compat import get_concrete_model - opts = get_concrete_model(model)._meta + opts = model._meta.concrete_model._meta return camelcase_to_underscore(opts.object_name) @@ -448,8 +462,8 @@ def build_proot_temp_dir(): ''' Create a temporary directory for proot to use. ''' - from django.conf import settings - path = tempfile.mkdtemp(prefix='ansible_tower_proot_', dir=settings.AWX_PROOT_BASE_PATH) + from awx.main.conf import tower_settings + path = tempfile.mkdtemp(prefix='ansible_tower_proot_', dir=tower_settings.AWX_PROOT_BASE_PATH) os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) return path @@ -462,13 +476,14 @@ def wrap_args_with_proot(args, cwd, **kwargs): - /var/log/supervisor - /tmp (except for own tmp files) ''' + from awx.main.conf import tower_settings from django.conf import settings new_args = [getattr(settings, 'AWX_PROOT_CMD', 'proot'), '-v', str(getattr(settings, 'AWX_PROOT_VERBOSITY', '0')), '-r', '/'] hide_paths = ['/etc/tower', '/var/lib/awx', '/var/log', tempfile.gettempdir(), settings.PROJECTS_ROOT, settings.JOBOUTPUT_ROOT] - hide_paths.extend(getattr(settings, 'AWX_PROOT_HIDE_PATHS', None) or []) + hide_paths.extend(getattr(tower_settings, 'AWX_PROOT_HIDE_PATHS', None) or []) for path in sorted(set(hide_paths)): if not os.path.exists(path): continue @@ -484,7 +499,11 @@ def wrap_args_with_proot(args, cwd, **kwargs): show_paths = [cwd, kwargs['private_data_dir']] else: show_paths = [cwd] - show_paths.extend(getattr(settings, 'AWX_PROOT_SHOW_PATHS', None) or []) + if settings.ANSIBLE_USE_VENV: + show_paths.append(settings.ANSIBLE_VENV_PATH) + if settings.TOWER_USE_VENV: + show_paths.append(settings.TOWER_VENV_PATH) + show_paths.extend(getattr(tower_settings, 'AWX_PROOT_SHOW_PATHS', None) or []) for path in sorted(set(show_paths)): if not os.path.exists(path): continue @@ -522,3 +541,28 @@ def timedelta_total_seconds(timedelta): (timedelta.seconds + timedelta.days * 24 * 3600) * 10 ** 6) / 10 ** 6 +class NoDefaultProvided(object): + pass + +def getattrd(obj, name, default=NoDefaultProvided): + """ + Same as getattr(), but allows dot notation lookup + Discussed in: + http://stackoverflow.com/questions/11975781 + """ + + try: + return reduce(getattr, name.split("."), obj) + except AttributeError: + if default != NoDefaultProvided: + return default + raise + +current_apps = apps +def set_current_apps(apps): + global current_apps + current_apps = apps + +def get_current_apps(): + global current_apps + return current_apps diff --git a/awx/main/views.py b/awx/main/views.py index eda97590a5..a1036a96e6 100644 --- a/awx/main/views.py +++ b/awx/main/views.py @@ -3,33 +3,70 @@ # Django from django.shortcuts import render -from django.utils.safestring import mark_safe +from django.utils.html import format_html + +# Django REST Framework +from rest_framework import exceptions, permissions, views + + +class ApiErrorView(views.APIView): + + authentication_classes = [] + permission_classes = (permissions.AllowAny,) + metadata_class = None + allowed_methods = ('GET', 'HEAD') + exception_class = exceptions.APIException + view_name = 'API Error' + + def get_view_name(self): + return self.view_name + + def get(self, request, format=None): + raise self.exception_class() + def handle_error(request, status=404, **kwargs): - # FIXME: Should attempt to check HTTP Accept request header and return - # plain JSON response instead of HTML (maybe only for /api/*). - context = kwargs - # Return enough context to popuplate the base API template. - description = u'
%s
' % context.get('content', '') - context['description'] = mark_safe(description) - context['content'] = '' - template_name = 'error.html' - return render(request, template_name, context, status=status) + # For errors to /api/*, use a simple DRF view/exception to generate a + # browsable error page for browser clients or a simple JSON response for any + # other clients. + if request.path.startswith('/api/'): + class APIException(exceptions.APIException): + status_code = status + default_detail = kwargs['content'] + api_error_view = ApiErrorView.as_view(view_name=kwargs['name'], exception_class=APIException) + response = api_error_view(request) + if hasattr(response, 'render'): + response.render() + return response + else: + kwargs['content'] = format_html('{}', kwargs.get('content', '')) + return render(request, 'error.html', kwargs, status=status) + + +def handle_400(request): + kwargs = { + 'name': 'Bad Request', + 'content': 'The request could not be understood by the server.', + } + return handle_error(request, 400, **kwargs) + def handle_403(request): kwargs = { 'name': 'Forbidden', - 'content': 'You don\'t have permission to access the requested page.', + 'content': 'You don\'t have permission to access the requested resource.', } return handle_error(request, 403, **kwargs) + def handle_404(request): kwargs = { 'name': 'Not Found', - 'content': 'The requested page could not be found.', + 'content': 'The requested resource could not be found.', } return handle_error(request, 404, **kwargs) + def handle_500(request): kwargs = { 'name': 'Server Error', diff --git a/awx/plugins/callback/job_event_callback.py b/awx/plugins/callback/job_event_callback.py index e55c91e4a6..a9c5b712ed 100644 --- a/awx/plugins/callback/job_event_callback.py +++ b/awx/plugins/callback/job_event_callback.py @@ -48,8 +48,29 @@ import zmq import psutil +# Only use statsd if there's a statsd host in the environment +# otherwise just do a noop. +# NOTE: I've disabled this for the time being until we sort through the venv dependency around this +# if os.environ.get('GRAPHITE_PORT_8125_UDP_ADDR'): +# from statsd import StatsClient +# statsd = StatsClient(host=os.environ['GRAPHITE_PORT_8125_UDP_ADDR'], +# port=8125, +# prefix='tower.job.event_callback', +# maxudpsize=512) +# else: +# from statsd import StatsClient +# class NoStatsClient(StatsClient): +# def __init__(self, *args, **kwargs): +# pass +# def _prepare(self, stat, value, rate): +# pass +# def _send_stat(self, stat, value, rate): +# pass +# def _send(self, *args, **kwargs): +# pass +# statsd = NoStatsClient() -CENSOR_FIELD_WHITELIST=[ +CENSOR_FIELD_WHITELIST = [ 'msg', 'failed', 'changed', @@ -59,7 +80,6 @@ CENSOR_FIELD_WHITELIST=[ 'delta', 'cmd', '_ansible_no_log', - 'cmd', 'rc', 'failed_when_result', 'skipped', @@ -91,7 +111,6 @@ def censor(obj, no_log=False): obj['results'][i] = censor(obj['results'][i], obj.get('_ansible_no_log', no_log)) elif obj.get('_ansible_no_log', False): obj['results'] = "the output has been hidden due to the fact that 'no_log: true' was specified for this result" - return obj @@ -175,6 +194,7 @@ class BaseCallbackModule(object): self._init_connection() if self.context is None: self._start_connection() + self.socket.send_json(msg) self.socket.recv() return @@ -534,8 +554,6 @@ class AdHocCommandCallbackModule(BaseCallbackModule): super(AdHocCommandCallbackModule, self).runner_on_skipped(host, item) self.skipped_hosts.add(host) - - if os.getenv('JOB_ID', ''): CallbackModule = JobCallbackModule elif os.getenv('AD_HOC_COMMAND_ID', ''): diff --git a/awx/plugins/fact_caching/tower.py b/awx/plugins/fact_caching/tower.py index ce965f9b11..3e89ccef36 100755 --- a/awx/plugins/fact_caching/tower.py +++ b/awx/plugins/fact_caching/tower.py @@ -32,8 +32,6 @@ import sys import os import time -import datetime -from copy import deepcopy from ansible import constants as C try: from ansible.cache.base import BaseCacheModule @@ -51,11 +49,11 @@ class CacheModule(BaseCacheModule): def __init__(self, *args, **kwargs): # Basic in-memory caching for typical runs self._cache = {} - self._cache_prev = {} + self._all_keys = {} # This is the local tower zmq connection self._tower_connection = C.CACHE_PLUGIN_CONNECTION - self.date_key = time.mktime(datetime.datetime.utcnow().timetuple()) + self.date_key = time.time() try: self.context = zmq.Context() self.socket = self.context.socket(zmq.REQ) @@ -73,12 +71,10 @@ class CacheModule(BaseCacheModule): def identify_new_module(self, key, value): # Return the first key found that doesn't exist in the # previous set of facts - if key in self._cache_prev: - value_old = self._cache_prev[key] - for k,v in value.iteritems(): - if k not in value_old: - if not k.startswith('ansible_'): - return k + if key in self._all_keys: + for k in value.iterkeys(): + if k not in self._all_keys[key] and not k.startswith('ansible_'): + return k # First time we have seen facts from this host # it's either ansible facts or a module facts (including module_setup) elif len(value) == 1: @@ -111,7 +107,7 @@ class CacheModule(BaseCacheModule): # Assume ansible fact triggered the set if no new module found facts = self.filter_ansible_facts(value) if not module else dict({ module : value[module]}) self._cache[key] = value - self._cache_prev = deepcopy(self._cache) + self._all_keys[key] = value.keys() packet = { 'host': key, 'inventory_id': os.environ['INVENTORY_ID'], diff --git a/awx/plugins/inventory/awxrest.py b/awx/plugins/inventory/awxrest.py index 9aec595eff..1f3630b6a6 100755 --- a/awx/plugins/inventory/awxrest.py +++ b/awx/plugins/inventory/awxrest.py @@ -133,7 +133,10 @@ class InventoryScript(object): else: sys.stderr.write('%s\n' % str(e)) if hasattr(e, 'response'): - sys.stderr.write('%s\n' % e.response.content) + if hasattr(e.response, 'content'): + sys.stderr.write('%s\n' % e.response.content) + else: + sys.stderr.write('%s\n' % e.response) sys.exit(1) def main(): diff --git a/awx/plugins/inventory/azure_rm.ini.example b/awx/plugins/inventory/azure_rm.ini.example new file mode 100644 index 0000000000..6ea2688efa --- /dev/null +++ b/awx/plugins/inventory/azure_rm.ini.example @@ -0,0 +1,19 @@ +# +# Configuration file for azure_rm_invetory.py +# +[azure] +# Control which resource groups are included. By default all resources groups are included. +# Set resource_groups to a comma separated list of resource groups names. +#resource_groups= + +# Control which tags are included. Set tags to a comma separated list of keys or key:value pairs +#tags= + +# Include powerstate. If you don't need powerstate information, turning it off improves runtime performance. +include_powerstate=yes + +# Control grouping with the following boolean flags. Valid values: yes, no, true, false, True, False, 0, 1. +group_by_resource_group=yes +group_by_location=yes +group_by_security_group=no +group_by_tag=yes diff --git a/awx/plugins/inventory/azure_rm.py b/awx/plugins/inventory/azure_rm.py new file mode 100755 index 0000000000..0554ecf879 --- /dev/null +++ b/awx/plugins/inventory/azure_rm.py @@ -0,0 +1,786 @@ +#!/usr/bin/python +# +# Copyright (c) 2016 Matt Davis, +# Chris Houseknecht, +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# + +''' +Azure External Inventory Script +=============================== +Generates dynamic inventory by making API requests to the Azure Resource +Manager using the AAzure Python SDK. For instruction on installing the +Azure Python SDK see http://azure-sdk-for-python.readthedocs.org/ + +Authentication +-------------- +The order of precedence is command line arguments, environment variables, +and finally the [default] profile found in ~/.azure/credentials. + +If using a credentials file, it should be an ini formatted file with one or +more sections, which we refer to as profiles. The script looks for a +[default] section, if a profile is not specified either on the command line +or with an environment variable. The keys in a profile will match the +list of command line arguments below. + +For command line arguments and environment variables specify a profile found +in your ~/.azure/credentials file, or a service principal or Active Directory +user. + +Command line arguments: + - profile + - client_id + - secret + - subscription_id + - tenant + - ad_user + - password + +Environment variables: + - AZURE_PROFILE + - AZURE_CLIENT_ID + - AZURE_SECRET + - AZURE_SUBSCRIPTION_ID + - AZURE_TENANT + - AZURE_AD_USER + - AZURE_PASSWORD + +Run for Specific Host +----------------------- +When run for a specific host using the --host option, a resource group is +required. For a specific host, this script returns the following variables: + +{ + "ansible_host": "XXX.XXX.XXX.XXX", + "computer_name": "computer_name2", + "fqdn": null, + "id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Compute/virtualMachines/object-name", + "image": { + "offer": "CentOS", + "publisher": "OpenLogic", + "sku": "7.1", + "version": "latest" + }, + "location": "westus", + "mac_address": "00-0D-3A-31-2C-EC", + "name": "object-name", + "network_interface": "interface-name", + "network_interface_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/networkInterfaces/object-name1", + "network_security_group": null, + "network_security_group_id": null, + "os_disk": { + "name": "object-name", + "operating_system_type": "Linux" + }, + "plan": null, + "powerstate": "running", + "private_ip": "172.26.3.6", + "private_ip_alloc_method": "Static", + "provisioning_state": "Succeeded", + "public_ip": "XXX.XXX.XXX.XXX", + "public_ip_alloc_method": "Static", + "public_ip_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/publicIPAddresses/object-name", + "public_ip_name": "object-name", + "resource_group": "galaxy-production", + "security_group": "object-name", + "security_group_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/networkSecurityGroups/object-name", + "tags": { + "db": "database" + }, + "type": "Microsoft.Compute/virtualMachines", + "virtual_machine_size": "Standard_DS4" +} + +Groups +------ +When run in --list mode, instances are grouped by the following categories: + - azure + - location + - resource_group + - security_group + - tag key + - tag key_value + +Control groups using azure_rm_inventory.ini or set environment variables: + +AZURE_GROUP_BY_RESOURCE_GROUP=yes +AZURE_GROUP_BY_LOCATION=yes +AZURE_GROUP_BY_SECURITY_GROUP=yes +AZURE_GROUP_BY_TAG=yes + +Select hosts within specific resource groups by assigning a comma separated list to: + +AZURE_RESOURCE_GROUPS=resource_group_a,resource_group_b + +Select hosts for specific tag key by assigning a comma separated list of tag keys to: + +AZURE_TAGS=key1,key2,key3 + +Or, select hosts for specific tag key:value pairs by assigning a comma separated list key:value pairs to: + +AZURE_TAGS=key1:value1,key2:value2 + +If you don't need the powerstate, you can improve performance by turning off powerstate fetching: +AZURE_INCLUDE_POWERSTATE=no + +azure_rm_inventory.ini +---------------------- +As mentioned above you can control execution using environment variables or an .ini file. A sample +azure_rm_inventory.ini is included. The name of the .ini file is the basename of the inventory script (in this case +'azure_rm_inventory') with a .ini extension. This provides you with the flexibility of copying and customizing this +script and having matching .ini files. Go forth and customize your Azure inventory! + +Powerstate: +----------- +The powerstate attribute indicates whether or not a host is running. If the value is 'running', the machine is +up. If the value is anything other than 'running', the machine is down, and will be unreachable. + +Examples: +--------- + Execute /bin/uname on all instances in the galaxy-qa resource group + $ ansible -i azure_rm_inventory.py galaxy-qa -m shell -a "/bin/uname -a" + + Use the inventory script to print instance specific information + $ contrib/inventory/azure_rm_inventory.py --host my_instance_host_name --pretty + + Use with a playbook + $ ansible-playbook -i contrib/inventory/azure_rm_inventory.py my_playbook.yml --limit galaxy-qa + + +Insecure Platform Warning +------------------------- +If you receive InsecurePlatformWarning from urllib3, install the +requests security packages: + + pip install requests[security] + + +author: + - Chris Houseknecht (@chouseknecht) + - Matt Davis (@nitzmahone) + +Company: Ansible by Red Hat + +Version: 1.0.0 +''' + +import argparse +import ConfigParser +import json +import os +import re +import sys + +from os.path import expanduser + +HAS_AZURE = True +HAS_AZURE_EXC = None + +try: + from msrestazure.azure_exceptions import CloudError + from azure.mgmt.compute import __version__ as azure_compute_version + from azure.common import AzureMissingResourceHttpError, AzureHttpError + from azure.common.credentials import ServicePrincipalCredentials, UserPassCredentials + from azure.mgmt.network.network_management_client import NetworkManagementClient,\ + NetworkManagementClientConfiguration + from azure.mgmt.resource.resources.resource_management_client import ResourceManagementClient,\ + ResourceManagementClientConfiguration + from azure.mgmt.compute.compute_management_client import ComputeManagementClient,\ + ComputeManagementClientConfiguration +except ImportError as exc: + HAS_AZURE_EXC = exc + HAS_AZURE = False + + +AZURE_CREDENTIAL_ENV_MAPPING = dict( + profile='AZURE_PROFILE', + subscription_id='AZURE_SUBSCRIPTION_ID', + client_id='AZURE_CLIENT_ID', + secret='AZURE_SECRET', + tenant='AZURE_TENANT', + ad_user='AZURE_AD_USER', + password='AZURE_PASSWORD' +) + +AZURE_CONFIG_SETTINGS = dict( + resource_groups='AZURE_RESOURCE_GROUPS', + tags='AZURE_TAGS', + include_powerstate='AZURE_INCLUDE_POWERSTATE', + group_by_resource_group='AZURE_GROUP_BY_RESOURCE_GROUP', + group_by_location='AZURE_GROUP_BY_LOCATION', + group_by_security_group='AZURE_GROUP_BY_SECURITY_GROUP', + group_by_tag='AZURE_GROUP_BY_TAG' +) + +AZURE_MIN_VERSION = "2016-03-30" + + +def azure_id_to_dict(id): + pieces = re.sub(r'^\/', '', id).split('/') + result = {} + index = 0 + while index < len(pieces) - 1: + result[pieces[index]] = pieces[index + 1] + index += 1 + return result + + +class AzureRM(object): + + def __init__(self, args): + self._args = args + self._compute_client = None + self._resource_client = None + self._network_client = None + + self.debug = False + if args.debug: + self.debug = True + + self.credentials = self._get_credentials(args) + if not self.credentials: + self.fail("Failed to get credentials. Either pass as parameters, set environment variables, " + "or define a profile in ~/.azure/credentials.") + + if self.credentials.get('subscription_id', None) is None: + self.fail("Credentials did not include a subscription_id value.") + self.log("setting subscription_id") + self.subscription_id = self.credentials['subscription_id'] + + if self.credentials.get('client_id') is not None and \ + self.credentials.get('secret') is not None and \ + self.credentials.get('tenant') is not None: + self.azure_credentials = ServicePrincipalCredentials(client_id=self.credentials['client_id'], + secret=self.credentials['secret'], + tenant=self.credentials['tenant']) + elif self.credentials.get('ad_user') is not None and self.credentials.get('password') is not None: + self.azure_credentials = UserPassCredentials(self.credentials['ad_user'], self.credentials['password']) + else: + self.fail("Failed to authenticate with provided credentials. Some attributes were missing. " + "Credentials must include client_id, secret and tenant or ad_user and password.") + + def log(self, msg): + if self.debug: + print (msg + u'\n') + + def fail(self, msg): + raise Exception(msg) + + def _get_profile(self, profile="default"): + path = expanduser("~") + path += "/.azure/credentials" + try: + config = ConfigParser.ConfigParser() + config.read(path) + except Exception as exc: + self.fail("Failed to access {0}. Check that the file exists and you have read " + "access. {1}".format(path, str(exc))) + credentials = dict() + for key in AZURE_CREDENTIAL_ENV_MAPPING: + try: + credentials[key] = config.get(profile, key, raw=True) + except: + pass + + if credentials.get('client_id') is not None or credentials.get('ad_user') is not None: + return credentials + + return None + + def _get_env_credentials(self): + env_credentials = dict() + for attribute, env_variable in AZURE_CREDENTIAL_ENV_MAPPING.iteritems(): + env_credentials[attribute] = os.environ.get(env_variable, None) + + if env_credentials['profile'] is not None: + credentials = self._get_profile(env_credentials['profile']) + return credentials + + if env_credentials['client_id'] is not None or env_credentials['ad_user'] is not None: + return env_credentials + + return None + + def _get_credentials(self, params): + # Get authentication credentials. + # Precedence: cmd line parameters-> environment variables-> default profile in ~/.azure/credentials. + + self.log('Getting credentials') + + arg_credentials = dict() + for attribute, env_variable in AZURE_CREDENTIAL_ENV_MAPPING.iteritems(): + arg_credentials[attribute] = getattr(params, attribute) + + # try module params + if arg_credentials['profile'] is not None: + self.log('Retrieving credentials with profile parameter.') + credentials = self._get_profile(arg_credentials['profile']) + return credentials + + if arg_credentials['client_id'] is not None: + self.log('Received credentials from parameters.') + return arg_credentials + + # try environment + env_credentials = self._get_env_credentials() + if env_credentials: + self.log('Received credentials from env.') + return env_credentials + + # try default profile from ~./azure/credentials + default_credentials = self._get_profile() + if default_credentials: + self.log('Retrieved default profile credentials from ~/.azure/credentials.') + return default_credentials + + return None + + def _register(self, key): + try: + # We have to perform the one-time registration here. Otherwise, we receive an error the first + # time we attempt to use the requested client. + resource_client = self.rm_client + resource_client.providers.register(key) + except Exception as exc: + self.fail("One-time registration of {0} failed - {1}".format(key, str(exc))) + + @property + def network_client(self): + self.log('Getting network client') + if not self._network_client: + self._network_client = NetworkManagementClient( + NetworkManagementClientConfiguration(self.azure_credentials, self.subscription_id)) + self._register('Microsoft.Network') + return self._network_client + + @property + def rm_client(self): + self.log('Getting resource manager client') + if not self._resource_client: + self._resource_client = ResourceManagementClient( + ResourceManagementClientConfiguration(self.azure_credentials, self.subscription_id)) + return self._resource_client + + @property + def compute_client(self): + self.log('Getting compute client') + if not self._compute_client: + self._compute_client = ComputeManagementClient( + ComputeManagementClientConfiguration(self.azure_credentials, self.subscription_id)) + self._register('Microsoft.Compute') + return self._compute_client + + +class AzureInventory(object): + + def __init__(self): + + self._args = self._parse_cli_args() + + try: + rm = AzureRM(self._args) + except Exception as e: + sys.exit("{0}".format(str(e))) + + self._compute_client = rm.compute_client + self._network_client = rm.network_client + self._resource_client = rm.rm_client + self._security_groups = None + + self.resource_groups = [] + self.tags = None + self.replace_dash_in_groups = False + self.group_by_resource_group = True + self.group_by_location = True + self.group_by_security_group = True + self.group_by_tag = True + self.include_powerstate = True + + self._inventory = dict( + _meta=dict( + hostvars=dict() + ), + azure=[] + ) + + self._get_settings() + + if self._args.resource_groups: + self.resource_groups = self._args.resource_groups.split(',') + + if self._args.tags: + self.tags = self._args.tags.split(',') + + if self._args.no_powerstate: + self.include_powerstate = False + + self.get_inventory() + print (self._json_format_dict(pretty=self._args.pretty)) + sys.exit(0) + + def _parse_cli_args(self): + # Parse command line arguments + parser = argparse.ArgumentParser( + description='Produce an Ansible Inventory file for an Azure subscription') + parser.add_argument('--list', action='store_true', default=True, + help='List instances (default: True)') + parser.add_argument('--debug', action='store_true', default=False, + help='Send debug messages to STDOUT') + parser.add_argument('--host', action='store', + help='Get all information about an instance') + parser.add_argument('--pretty', action='store_true', default=False, + help='Pretty print JSON output(default: False)') + parser.add_argument('--profile', action='store', + help='Azure profile contained in ~/.azure/credentials') + parser.add_argument('--subscription_id', action='store', + help='Azure Subscription Id') + parser.add_argument('--client_id', action='store', + help='Azure Client Id ') + parser.add_argument('--secret', action='store', + help='Azure Client Secret') + parser.add_argument('--tenant', action='store', + help='Azure Tenant Id') + parser.add_argument('--ad-user', action='store', + help='Active Directory User') + parser.add_argument('--password', action='store', + help='password') + parser.add_argument('--resource-groups', action='store', + help='Return inventory for comma separated list of resource group names') + parser.add_argument('--tags', action='store', + help='Return inventory for comma separated list of tag key:value pairs') + parser.add_argument('--no-powerstate', action='store_true', default=False, + help='Do not include the power state of each virtual host') + return parser.parse_args() + + def get_inventory(self): + if len(self.resource_groups) > 0: + # get VMs for requested resource groups + for resource_group in self.resource_groups: + try: + virtual_machines = self._compute_client.virtual_machines.list(resource_group) + except Exception as exc: + sys.exit("Error: fetching virtual machines for resource group {0} - {1}".format(resource_group, + str(exc))) + if self._args.host or self.tags: + selected_machines = self._selected_machines(virtual_machines) + self._load_machines(selected_machines) + else: + self._load_machines(virtual_machines) + else: + # get all VMs within the subscription + try: + virtual_machines = self._compute_client.virtual_machines.list_all() + except Exception as exc: + sys.exit("Error: fetching virtual machines - {0}".format(str(exc))) + + if self._args.host or self.tags > 0: + selected_machines = self._selected_machines(virtual_machines) + self._load_machines(selected_machines) + else: + self._load_machines(virtual_machines) + + def _load_machines(self, machines): + for machine in machines: + id_dict = azure_id_to_dict(machine.id) + + #TODO - The API is returning an ID value containing resource group name in ALL CAPS. If/when it gets + # fixed, we should remove the .lower(). Opened Issue + # #574: https://github.com/Azure/azure-sdk-for-python/issues/574 + resource_group = id_dict['resourceGroups'].lower() + + if self.group_by_security_group: + self._get_security_groups(resource_group) + + host_vars = dict( + ansible_host=None, + private_ip=None, + private_ip_alloc_method=None, + public_ip=None, + public_ip_name=None, + public_ip_id=None, + public_ip_alloc_method=None, + fqdn=None, + location=machine.location, + name=machine.name, + type=machine.type, + id=machine.id, + tags=machine.tags, + network_interface_id=None, + network_interface=None, + resource_group=resource_group, + mac_address=None, + plan=(machine.plan.name if machine.plan else None), + virtual_machine_size=machine.hardware_profile.vm_size.value, + computer_name=machine.os_profile.computer_name, + provisioning_state=machine.provisioning_state, + ) + + host_vars['os_disk'] = dict( + name=machine.storage_profile.os_disk.name, + operating_system_type=machine.storage_profile.os_disk.os_type.value + ) + + if self.include_powerstate: + host_vars['powerstate'] = self._get_powerstate(resource_group, machine.name) + + if machine.storage_profile.image_reference: + host_vars['image'] = dict( + offer=machine.storage_profile.image_reference.offer, + publisher=machine.storage_profile.image_reference.publisher, + sku=machine.storage_profile.image_reference.sku, + version=machine.storage_profile.image_reference.version + ) + + # Add windows details + if machine.os_profile.windows_configuration is not None: + host_vars['windows_auto_updates_enabled'] = \ + machine.os_profile.windows_configuration.enable_automatic_updates + host_vars['windows_timezone'] = machine.os_profile.windows_configuration.time_zone + host_vars['windows_rm'] = None + if machine.os_profile.windows_configuration.win_rm is not None: + host_vars['windows_rm'] = dict(listeners=None) + if machine.os_profile.windows_configuration.win_rm.listeners is not None: + host_vars['windows_rm']['listeners'] = [] + for listener in machine.os_profile.windows_configuration.win_rm.listeners: + host_vars['windows_rm']['listeners'].append(dict(protocol=listener.protocol, + certificate_url=listener.certificate_url)) + + for interface in machine.network_profile.network_interfaces: + interface_reference = self._parse_ref_id(interface.id) + network_interface = self._network_client.network_interfaces.get( + interface_reference['resourceGroups'], + interface_reference['networkInterfaces']) + if network_interface.primary: + if self.group_by_security_group and \ + self._security_groups[resource_group].get(network_interface.id, None): + host_vars['security_group'] = \ + self._security_groups[resource_group][network_interface.id]['name'] + host_vars['security_group_id'] = \ + self._security_groups[resource_group][network_interface.id]['id'] + host_vars['network_interface'] = network_interface.name + host_vars['network_interface_id'] = network_interface.id + host_vars['mac_address'] = network_interface.mac_address + for ip_config in network_interface.ip_configurations: + host_vars['private_ip'] = ip_config.private_ip_address + host_vars['private_ip_alloc_method'] = ip_config.private_ip_allocation_method.value + if ip_config.public_ip_address: + public_ip_reference = self._parse_ref_id(ip_config.public_ip_address.id) + public_ip_address = self._network_client.public_ip_addresses.get( + public_ip_reference['resourceGroups'], + public_ip_reference['publicIPAddresses']) + host_vars['ansible_host'] = public_ip_address.ip_address + host_vars['public_ip'] = public_ip_address.ip_address + host_vars['public_ip_name'] = public_ip_address.name + host_vars['public_ip_alloc_method'] = public_ip_address.public_ip_allocation_method.value + host_vars['public_ip_id'] = public_ip_address.id + if public_ip_address.dns_settings: + host_vars['fqdn'] = public_ip_address.dns_settings.fqdn + + self._add_host(host_vars) + + def _selected_machines(self, virtual_machines): + selected_machines = [] + for machine in virtual_machines: + if self._args.host and self._args.host == machine.name: + selected_machines.append(machine) + if self.tags and self._tags_match(machine.tags, self.tags): + selected_machines.append(machine) + return selected_machines + + def _get_security_groups(self, resource_group): + ''' For a given resource_group build a mapping of network_interface.id to security_group name ''' + if not self._security_groups: + self._security_groups = dict() + if not self._security_groups.get(resource_group): + self._security_groups[resource_group] = dict() + for group in self._network_client.network_security_groups.list(resource_group): + if group.network_interfaces: + for interface in group.network_interfaces: + self._security_groups[resource_group][interface.id] = dict( + name=group.name, + id=group.id + ) + + def _get_powerstate(self, resource_group, name): + try: + vm = self._compute_client.virtual_machines.get(resource_group, + name, + expand='instanceview') + except Exception as exc: + sys.exit("Error: fetching instanceview for host {0} - {1}".format(name, str(exc))) + + return next((s.code.replace('PowerState/', '') + for s in vm.instance_view.statuses if s.code.startswith('PowerState')), None) + + def _add_host(self, vars): + + host_name = self._to_safe(vars['name']) + resource_group = self._to_safe(vars['resource_group']) + security_group = None + if vars.get('security_group'): + security_group = self._to_safe(vars['security_group']) + + if self.group_by_resource_group: + if not self._inventory.get(resource_group): + self._inventory[resource_group] = [] + self._inventory[resource_group].append(host_name) + + if self.group_by_location: + if not self._inventory.get(vars['location']): + self._inventory[vars['location']] = [] + self._inventory[vars['location']].append(host_name) + + if self.group_by_security_group and security_group: + if not self._inventory.get(security_group): + self._inventory[security_group] = [] + self._inventory[security_group].append(host_name) + + self._inventory['_meta']['hostvars'][host_name] = vars + self._inventory['azure'].append(host_name) + + if self.group_by_tag and vars.get('tags'): + for key, value in vars['tags'].iteritems(): + safe_key = self._to_safe(key) + safe_value = safe_key + '_' + self._to_safe(value) + if not self._inventory.get(safe_key): + self._inventory[safe_key] = [] + if not self._inventory.get(safe_value): + self._inventory[safe_value] = [] + self._inventory[safe_key].append(host_name) + self._inventory[safe_value].append(host_name) + + def _json_format_dict(self, pretty=False): + # convert inventory to json + if pretty: + return json.dumps(self._inventory, sort_keys=True, indent=2) + else: + return json.dumps(self._inventory) + + def _get_settings(self): + # Load settings from the .ini, if it exists. Otherwise, + # look for environment values. + file_settings = self._load_settings() + if file_settings: + for key in AZURE_CONFIG_SETTINGS: + if key in ('resource_groups', 'tags') and file_settings.get(key, None) is not None: + values = file_settings.get(key).split(',') + if len(values) > 0: + setattr(self, key, values) + elif file_settings.get(key, None) is not None: + val = self._to_boolean(file_settings[key]) + setattr(self, key, val) + else: + env_settings = self._get_env_settings() + for key in AZURE_CONFIG_SETTINGS: + if key in('resource_groups', 'tags') and env_settings.get(key, None) is not None: + values = env_settings.get(key).split(',') + if len(values) > 0: + setattr(self, key, values) + elif env_settings.get(key, None) is not None: + val = self._to_boolean(env_settings[key]) + setattr(self, key, val) + + def _parse_ref_id(self, reference): + response = {} + keys = reference.strip('/').split('/') + for index in range(len(keys)): + if index < len(keys) - 1 and index % 2 == 0: + response[keys[index]] = keys[index + 1] + return response + + def _to_boolean(self, value): + if value in ['Yes', 'yes', 1, 'True', 'true', True]: + result = True + elif value in ['No', 'no', 0, 'False', 'false', False]: + result = False + else: + result = True + return result + + def _get_env_settings(self): + env_settings = dict() + for attribute, env_variable in AZURE_CONFIG_SETTINGS.iteritems(): + env_settings[attribute] = os.environ.get(env_variable, None) + return env_settings + + def _load_settings(self): + basename = os.path.splitext(os.path.basename(__file__))[0] + path = basename + '.ini' + config = None + settings = None + try: + config = ConfigParser.ConfigParser() + config.read(path) + except: + pass + + if config is not None: + settings = dict() + for key in AZURE_CONFIG_SETTINGS: + try: + settings[key] = config.get('azure', key, raw=True) + except: + pass + + return settings + + def _tags_match(self, tag_obj, tag_args): + ''' + Return True if the tags object from a VM contains the requested tag values. + + :param tag_obj: Dictionary of string:string pairs + :param tag_args: List of strings in the form key=value + :return: boolean + ''' + + if not tag_obj: + return False + + matches = 0 + for arg in tag_args: + arg_key = arg + arg_value = None + if re.search(r':', arg): + arg_key, arg_value = arg.split(':') + if arg_value and tag_obj.get(arg_key, None) == arg_value: + matches += 1 + elif not arg_value and tag_obj.get(arg_key, None) is not None: + matches += 1 + if matches == len(tag_args): + return True + return False + + def _to_safe(self, word): + ''' Converts 'bad' characters in a string to underscores so they can be used as Ansible groups ''' + regex = "[^A-Za-z0-9\_" + if not self.replace_dash_in_groups: + regex += "\-" + return re.sub(regex + "]", "_", word) + + +def main(): + if not HAS_AZURE: + sys.exit("The Azure python sdk is not installed (try 'pip install azure') - {0}".format(HAS_AZURE_EXC)) + + if azure_compute_version < AZURE_MIN_VERSION: + sys.exit("Expecting azure.mgmt.compute.__version__ to be >= {0}. Found version {1} " + "Do you have Azure >= 2.0.0rc2 installed?".format(AZURE_MIN_VERSION, azure_compute_version)) + + AzureInventory() + +if __name__ == '__main__': + main() diff --git a/awx/plugins/inventory/cloudforms.ini.example b/awx/plugins/inventory/cloudforms.ini.example new file mode 100644 index 0000000000..771fdf94c2 --- /dev/null +++ b/awx/plugins/inventory/cloudforms.ini.example @@ -0,0 +1,16 @@ +# Ansible CloudForms external inventory script settings +# + +[cloudforms] + +# The version of CloudForms (this is not used yet) +version = 3.1 + +# The hostname of the CloudForms server +hostname = #insert your hostname here + +# Username for CloudForms +username = #insert your cloudforms user here + +# Password for CloudForms user +password = #password diff --git a/awx/plugins/inventory/cloudforms.py b/awx/plugins/inventory/cloudforms.py new file mode 100644 index 0000000000..3de81d0bd2 --- /dev/null +++ b/awx/plugins/inventory/cloudforms.py @@ -0,0 +1,126 @@ +#!/usr/bin/python + +''' +CloudForms external inventory script +================================================== +Generates inventory that Ansible can understand by making API request to CloudForms. +Modeled after https://raw.githubusercontent.com/ansible/ansible/stable-1.9/plugins/inventory/ec2.py +jlabocki redhat.com or @jameslabocki on twitter +''' + +import os +import argparse +import ConfigParser +import requests +import json + +# This disables warnings and is not a good idea, but hey, this is a demo +# http://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings +requests.packages.urllib3.disable_warnings() + +class CloudFormsInventory(object): + + def _empty_inventory(self): + return {"_meta" : {"hostvars" : {}}} + + def __init__(self): + ''' Main execution path ''' + + # Inventory grouped by instance IDs, tags, security groups, regions, + # and availability zones + self.inventory = self._empty_inventory() + + # Index of hostname (address) to instance ID + self.index = {} + + # Read CLI arguments + self.read_settings() + self.parse_cli_args() + + # Get Hosts + if self.args.list: + self.get_hosts() + + # This doesn't exist yet and needs to be added + if self.args.host: + data2 = { } + print json.dumps(data2, indent=2) + + def parse_cli_args(self): + ''' Command line argument processing ''' + + parser = argparse.ArgumentParser(description='Produce an Ansible Inventory file based on CloudForms') + parser.add_argument('--list', action='store_true', default=False, + help='List instances (default: False)') + parser.add_argument('--host', action='store', + help='Get all the variables about a specific instance') + self.args = parser.parse_args() + + def read_settings(self): + ''' Reads the settings from the cloudforms.ini file ''' + + config = ConfigParser.SafeConfigParser() + config_paths = [ + os.path.join(os.path.dirname(os.path.realpath(__file__)), 'cloudforms.ini'), + "/opt/rh/cloudforms.ini", + ] + + env_value = os.environ.get('CLOUDFORMS_INI_PATH') + if env_value is not None: + config_paths.append(os.path.expanduser(os.path.expandvars(env_value))) + + config.read(config_paths) + + # Version + if config.has_option('cloudforms', 'version'): + self.cloudforms_version = config.get('cloudforms', 'version') + else: + self.cloudforms_version = "none" + + # CloudForms Endpoint + if config.has_option('cloudforms', 'hostname'): + self.cloudforms_hostname = config.get('cloudforms', 'hostname') + else: + self.cloudforms_hostname = None + + # CloudForms Username + if config.has_option('cloudforms', 'username'): + self.cloudforms_username = config.get('cloudforms', 'username') + else: + self.cloudforms_username = "none" + + # CloudForms Password + if config.has_option('cloudforms', 'password'): + self.cloudforms_password = config.get('cloudforms', 'password') + else: + self.cloudforms_password = "none" + + def get_hosts(self): + ''' Gets host from CloudForms ''' + r = requests.get("https://" + self.cloudforms_hostname + "/api/vms?expand=resources&attributes=name,power_state", auth=(self.cloudforms_username,self.cloudforms_password), verify=False) + + obj = r.json() + + #Remove objects that don't matter + del obj["count"] + del obj["subcount"] + del obj["name"] + + #Create a new list to grab VMs with power_state on to add to a new list + #I'm sure there is a cleaner way to do this + newlist = [] + getnext = False + for x in obj.items(): + for y in x[1]: + for z in y.items(): + if getnext == True: + newlist.append(z[1]) + getnext = False + if ( z[0] == "power_state" and z[1] == "on" ): + getnext = True + newdict = {'hosts': newlist} + newdict2 = {'Dynamic_CloudForms': newdict} + print json.dumps(newdict2, indent=2) + +# Run the script +CloudFormsInventory() diff --git a/awx/plugins/inventory/ec2.py b/awx/plugins/inventory/ec2.py index b8b1d43dea..6068df901f 100755 --- a/awx/plugins/inventory/ec2.py +++ b/awx/plugins/inventory/ec2.py @@ -141,6 +141,7 @@ except ImportError: class Ec2Inventory(object): + def _empty_inventory(self): return {"_meta" : {"hostvars" : {}}} @@ -157,6 +158,9 @@ class Ec2Inventory(object): # Boto profile to use (if any) self.boto_profile = None + # AWS credentials. + self.credentials = {} + # Read settings and parse CLI arguments self.parse_cli_args() self.read_settings() @@ -224,7 +228,7 @@ class Ec2Inventory(object): configRegions_exclude = config.get('ec2', 'regions_exclude') if (configRegions == 'all'): if self.eucalyptus_host: - self.regions.append(boto.connect_euca(host=self.eucalyptus_host).region.name) + self.regions.append(boto.connect_euca(host=self.eucalyptus_host).region.name, **self.credentials) else: for regionInfo in ec2.regions(): if regionInfo.name not in configRegions_exclude: @@ -236,6 +240,19 @@ class Ec2Inventory(object): self.destination_variable = config.get('ec2', 'destination_variable') self.vpc_destination_variable = config.get('ec2', 'vpc_destination_variable') + if config.has_option('ec2', 'hostname_variable'): + self.hostname_variable = config.get('ec2', 'hostname_variable') + else: + self.hostname_variable = None + + if config.has_option('ec2', 'destination_format') and \ + config.has_option('ec2', 'destination_format_tags'): + self.destination_format = config.get('ec2', 'destination_format') + self.destination_format_tags = config.get('ec2', 'destination_format_tags').split(',') + else: + self.destination_format = None + self.destination_format_tags = None + # Route53 self.route53_enabled = config.getboolean('ec2', 'route53') self.route53_excluded_zones = [] @@ -310,6 +327,29 @@ class Ec2Inventory(object): if config.has_option('ec2', 'boto_profile') and not self.boto_profile: self.boto_profile = config.get('ec2', 'boto_profile') + # AWS credentials (prefer environment variables) + if not (self.boto_profile or os.environ.get('AWS_ACCESS_KEY_ID') or + os.environ.get('AWS_PROFILE')): + if config.has_option('credentials', 'aws_access_key_id'): + aws_access_key_id = config.get('credentials', 'aws_access_key_id') + else: + aws_access_key_id = None + if config.has_option('credentials', 'aws_secret_access_key'): + aws_secret_access_key = config.get('credentials', 'aws_secret_access_key') + else: + aws_secret_access_key = None + if config.has_option('credentials', 'aws_security_token'): + aws_security_token = config.get('credentials', 'aws_security_token') + else: + aws_security_token = None + if aws_access_key_id: + self.credentials = { + 'aws_access_key_id': aws_access_key_id, + 'aws_secret_access_key': aws_secret_access_key + } + if aws_security_token: + self.credentials['security_token'] = aws_security_token + # Cache related cache_dir = os.path.expanduser(config.get('ec2', 'cache_path')) if self.boto_profile: @@ -317,10 +357,22 @@ class Ec2Inventory(object): if not os.path.exists(cache_dir): os.makedirs(cache_dir) - self.cache_path_cache = cache_dir + "/ansible-ec2.cache" - self.cache_path_index = cache_dir + "/ansible-ec2.index" + cache_name = 'ansible-ec2' + aws_profile = lambda: (self.boto_profile or + os.environ.get('AWS_PROFILE') or + os.environ.get('AWS_ACCESS_KEY_ID') or + self.credentials.get('aws_access_key_id', None)) + if aws_profile(): + cache_name = '%s-%s' % (cache_name, aws_profile()) + self.cache_path_cache = cache_dir + "/%s.cache" % cache_name + self.cache_path_index = cache_dir + "/%s.index" % cache_name self.cache_max_age = config.getint('ec2', 'cache_max_age') + if config.has_option('ec2', 'expand_csv_tags'): + self.expand_csv_tags = config.getboolean('ec2', 'expand_csv_tags') + else: + self.expand_csv_tags = False + # Configure nested groups instead of flat namespace. if config.has_option('ec2', 'nested_groups'): self.nested_groups = config.getboolean('ec2', 'nested_groups') @@ -382,7 +434,10 @@ class Ec2Inventory(object): # Instance filters (see boto and EC2 API docs). Ignore invalid filters. self.ec2_instance_filters = defaultdict(list) if config.has_option('ec2', 'instance_filters'): - for instance_filter in config.get('ec2', 'instance_filters', '').split(','): + + filters = [f for f in config.get('ec2', 'instance_filters').split(',') if f] + + for instance_filter in filters: instance_filter = instance_filter.strip() if not instance_filter or '=' not in instance_filter: continue @@ -401,7 +456,7 @@ class Ec2Inventory(object): help='Get all the variables about a specific instance') parser.add_argument('--refresh-cache', action='store_true', default=False, help='Force refresh of cache by making API requests to EC2 (default: False - use cache files)') - parser.add_argument('--boto-profile', action='store', + parser.add_argument('--profile', '--boto-profile', action='store', dest='boto_profile', help='Use boto profile for connections to EC2') self.args = parser.parse_args() @@ -426,7 +481,7 @@ class Ec2Inventory(object): def connect(self, region): ''' create connection to api server''' if self.eucalyptus: - conn = boto.connect_euca(host=self.eucalyptus_host) + conn = boto.connect_euca(host=self.eucalyptus_host, **self.credentials) conn.APIVersion = '2010-08-31' else: conn = self.connect_to_aws(ec2, region) @@ -440,7 +495,7 @@ class Ec2Inventory(object): return connect_args def connect_to_aws(self, module, region): - connect_args = {} + connect_args = self.credentials # only pass the profile name if it's set (as it is not supported by older boto versions) if self.boto_profile: @@ -466,15 +521,31 @@ class Ec2Inventory(object): else: reservations = conn.get_all_instances() + # Pull the tags back in a second step + # AWS are on record as saying that the tags fetched in the first `get_all_instances` request are not + # reliable and may be missing, and the only way to guarantee they are there is by calling `get_all_tags` + instance_ids = [] + for reservation in reservations: + instance_ids.extend([instance.id for instance in reservation.instances]) + max_filter_value = 199 + tags = [] + for i in range(0, len(instance_ids), max_filter_value): + tags.extend(conn.get_all_tags(filters={'resource-type': 'instance', 'resource-id': instance_ids[i:i+max_filter_value]})) + + tags_by_instance_id = defaultdict(dict) + for tag in tags: + tags_by_instance_id[tag.res_id][tag.name] = tag.value + for reservation in reservations: for instance in reservation.instances: + instance.tags = tags_by_instance_id[instance.id] self.add_instance(instance, region) except boto.exception.BotoServerError as e: if e.error_code == 'AuthFailure': error = self.get_auth_error_message() else: - backend = 'Eucalyptus' if self.eucalyptus else 'AWS' + backend = 'Eucalyptus' if self.eucalyptus else 'AWS' error = "Error connecting to %s backend.\n%s" % (backend, e.message) self.fail_with_error(error, 'getting EC2 instances') @@ -485,9 +556,14 @@ class Ec2Inventory(object): try: conn = self.connect_to_aws(rds, region) if conn: - instances = conn.get_all_dbinstances() - for instance in instances: - self.add_rds_instance(instance, region) + marker = None + while True: + instances = conn.get_all_dbinstances(marker=marker) + marker = instances.marker + for instance in instances: + self.add_rds_instance(instance, region) + if not marker: + break except boto.exception.BotoServerError as e: error = e.reason @@ -505,7 +581,7 @@ class Ec2Inventory(object): # that's why we need to call describe directly (it would be called by # the shorthand method anyway...) try: - conn = elasticache.connect_to_region(region) + conn = self.connect_to_aws(elasticache, region) if conn: # show_cache_node_info = True # because we also want nodes' information @@ -541,7 +617,7 @@ class Ec2Inventory(object): # that's why we need to call describe directly (it would be called by # the shorthand method anyway...) try: - conn = elasticache.connect_to_region(region) + conn = self.connect_to_aws(elasticache, region) if conn: response = conn.describe_replication_groups() @@ -609,7 +685,9 @@ class Ec2Inventory(object): return # Select the best destination address - if instance.subnet_id: + if self.destination_format and self.destination_format_tags: + dest = self.destination_format.format(*[ getattr(instance, 'tags').get(tag, '') for tag in self.destination_format_tags ]) + elif instance.subnet_id: dest = getattr(instance, self.vpc_destination_variable, None) if dest is None: dest = getattr(instance, 'tags').get(self.vpc_destination_variable, None) @@ -622,32 +700,46 @@ class Ec2Inventory(object): # Skip instances we cannot address (e.g. private VPC subnet) return + # Set the inventory name + hostname = None + if self.hostname_variable: + if self.hostname_variable.startswith('tag_'): + hostname = instance.tags.get(self.hostname_variable[4:], None) + else: + hostname = getattr(instance, self.hostname_variable) + + # If we can't get a nice hostname, use the destination address + if not hostname: + hostname = dest + else: + hostname = self.to_safe(hostname).lower() + # if we only want to include hosts that match a pattern, skip those that don't - if self.pattern_include and not self.pattern_include.match(dest): + if self.pattern_include and not self.pattern_include.match(hostname): return # if we need to exclude hosts that match a pattern, skip those - if self.pattern_exclude and self.pattern_exclude.match(dest): + if self.pattern_exclude and self.pattern_exclude.match(hostname): return # Add to index - self.index[dest] = [region, instance.id] + self.index[hostname] = [region, instance.id] # Inventory: Group by instance ID (always a group of 1) if self.group_by_instance_id: - self.inventory[instance.id] = [dest] + self.inventory[instance.id] = [hostname] if self.nested_groups: self.push_group(self.inventory, 'instances', instance.id) # Inventory: Group by region if self.group_by_region: - self.push(self.inventory, region, dest) + self.push(self.inventory, region, hostname) if self.nested_groups: self.push_group(self.inventory, 'regions', region) # Inventory: Group by availability zone if self.group_by_availability_zone: - self.push(self.inventory, instance.placement, dest) + self.push(self.inventory, instance.placement, hostname) if self.nested_groups: if self.group_by_region: self.push_group(self.inventory, region, instance.placement) @@ -656,28 +748,28 @@ class Ec2Inventory(object): # Inventory: Group by Amazon Machine Image (AMI) ID if self.group_by_ami_id: ami_id = self.to_safe(instance.image_id) - self.push(self.inventory, ami_id, dest) + self.push(self.inventory, ami_id, hostname) if self.nested_groups: self.push_group(self.inventory, 'images', ami_id) # Inventory: Group by instance type if self.group_by_instance_type: type_name = self.to_safe('type_' + instance.instance_type) - self.push(self.inventory, type_name, dest) + self.push(self.inventory, type_name, hostname) if self.nested_groups: self.push_group(self.inventory, 'types', type_name) # Inventory: Group by key pair if self.group_by_key_pair and instance.key_name: key_name = self.to_safe('key_' + instance.key_name) - self.push(self.inventory, key_name, dest) + self.push(self.inventory, key_name, hostname) if self.nested_groups: self.push_group(self.inventory, 'keys', key_name) # Inventory: Group by VPC if self.group_by_vpc_id and instance.vpc_id: vpc_id_name = self.to_safe('vpc_id_' + instance.vpc_id) - self.push(self.inventory, vpc_id_name, dest) + self.push(self.inventory, vpc_id_name, hostname) if self.nested_groups: self.push_group(self.inventory, 'vpcs', vpc_id_name) @@ -686,44 +778,51 @@ class Ec2Inventory(object): try: for group in instance.groups: key = self.to_safe("security_group_" + group.name) - self.push(self.inventory, key, dest) + self.push(self.inventory, key, hostname) if self.nested_groups: self.push_group(self.inventory, 'security_groups', key) except AttributeError: - self.fail_with_error('\n'.join(['Package boto seems a bit older.', + self.fail_with_error('\n'.join(['Package boto seems a bit older.', 'Please upgrade boto >= 2.3.0.'])) # Inventory: Group by tag keys if self.group_by_tag_keys: for k, v in instance.tags.items(): - if v: - key = self.to_safe("tag_" + k + "=" + v) + if self.expand_csv_tags and v and ',' in v: + values = map(lambda x: x.strip(), v.split(',')) else: - key = self.to_safe("tag_" + k) - self.push(self.inventory, key, dest) - if self.nested_groups: - self.push_group(self.inventory, 'tags', self.to_safe("tag_" + k)) + values = [v] + + for v in values: if v: - self.push_group(self.inventory, self.to_safe("tag_" + k), key) + key = self.to_safe("tag_" + k + "=" + v) + else: + key = self.to_safe("tag_" + k) + self.push(self.inventory, key, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'tags', self.to_safe("tag_" + k)) + if v: + self.push_group(self.inventory, self.to_safe("tag_" + k), key) # Inventory: Group by Route53 domain names if enabled if self.route53_enabled and self.group_by_route53_names: route53_names = self.get_instance_route53_names(instance) for name in route53_names: - self.push(self.inventory, name, dest) + self.push(self.inventory, name, hostname) if self.nested_groups: self.push_group(self.inventory, 'route53', name) # Global Tag: instances without tags if self.group_by_tag_none and len(instance.tags) == 0: - self.push(self.inventory, 'tag_none', dest) + self.push(self.inventory, 'tag_none', hostname) if self.nested_groups: self.push_group(self.inventory, 'tags', 'tag_none') # Global Tag: tag all EC2 instances - self.push(self.inventory, 'ec2', dest) + self.push(self.inventory, 'ec2', hostname) - self.inventory["_meta"]["hostvars"][dest] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname]['ansible_ssh_host'] = dest def add_rds_instance(self, instance, region): @@ -741,24 +840,38 @@ class Ec2Inventory(object): # Skip instances we cannot address (e.g. private VPC subnet) return + # Set the inventory name + hostname = None + if self.hostname_variable: + if self.hostname_variable.startswith('tag_'): + hostname = instance.tags.get(self.hostname_variable[4:], None) + else: + hostname = getattr(instance, self.hostname_variable) + + # If we can't get a nice hostname, use the destination address + if not hostname: + hostname = dest + + hostname = self.to_safe(hostname).lower() + # Add to index - self.index[dest] = [region, instance.id] + self.index[hostname] = [region, instance.id] # Inventory: Group by instance ID (always a group of 1) if self.group_by_instance_id: - self.inventory[instance.id] = [dest] + self.inventory[instance.id] = [hostname] if self.nested_groups: self.push_group(self.inventory, 'instances', instance.id) # Inventory: Group by region if self.group_by_region: - self.push(self.inventory, region, dest) + self.push(self.inventory, region, hostname) if self.nested_groups: self.push_group(self.inventory, 'regions', region) # Inventory: Group by availability zone if self.group_by_availability_zone: - self.push(self.inventory, instance.availability_zone, dest) + self.push(self.inventory, instance.availability_zone, hostname) if self.nested_groups: if self.group_by_region: self.push_group(self.inventory, region, instance.availability_zone) @@ -767,14 +880,14 @@ class Ec2Inventory(object): # Inventory: Group by instance type if self.group_by_instance_type: type_name = self.to_safe('type_' + instance.instance_class) - self.push(self.inventory, type_name, dest) + self.push(self.inventory, type_name, hostname) if self.nested_groups: self.push_group(self.inventory, 'types', type_name) # Inventory: Group by VPC if self.group_by_vpc_id and instance.subnet_group and instance.subnet_group.vpc_id: vpc_id_name = self.to_safe('vpc_id_' + instance.subnet_group.vpc_id) - self.push(self.inventory, vpc_id_name, dest) + self.push(self.inventory, vpc_id_name, hostname) if self.nested_groups: self.push_group(self.inventory, 'vpcs', vpc_id_name) @@ -783,31 +896,32 @@ class Ec2Inventory(object): try: if instance.security_group: key = self.to_safe("security_group_" + instance.security_group.name) - self.push(self.inventory, key, dest) + self.push(self.inventory, key, hostname) if self.nested_groups: self.push_group(self.inventory, 'security_groups', key) except AttributeError: - self.fail_with_error('\n'.join(['Package boto seems a bit older.', + self.fail_with_error('\n'.join(['Package boto seems a bit older.', 'Please upgrade boto >= 2.3.0.'])) # Inventory: Group by engine if self.group_by_rds_engine: - self.push(self.inventory, self.to_safe("rds_" + instance.engine), dest) + self.push(self.inventory, self.to_safe("rds_" + instance.engine), hostname) if self.nested_groups: self.push_group(self.inventory, 'rds_engines', self.to_safe("rds_" + instance.engine)) # Inventory: Group by parameter group if self.group_by_rds_parameter_group: - self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), dest) + self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), hostname) if self.nested_groups: self.push_group(self.inventory, 'rds_parameter_groups', self.to_safe("rds_parameter_group_" + instance.parameter_group.name)) # Global Tag: all RDS instances - self.push(self.inventory, 'rds', dest) + self.push(self.inventory, 'rds', hostname) - self.inventory["_meta"]["hostvars"][dest] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname]['ansible_ssh_host'] = dest def add_elasticache_cluster(self, cluster, region): ''' Adds an ElastiCache cluster to the inventory and index, as long as @@ -1120,6 +1234,8 @@ class Ec2Inventory(object): instance_vars['ec2_placement'] = value.zone elif key == 'ec2_tags': for k, v in value.items(): + if self.expand_csv_tags and ',' in v: + v = map(lambda x: x.strip(), v.split(',')) key = self.to_safe('ec2_tag_' + k) instance_vars[key] = v elif key == 'ec2_groups': @@ -1294,7 +1410,7 @@ class Ec2Inventory(object): def to_safe(self, word): ''' Converts 'bad' characters in a string to underscores so they can be used as Ansible groups ''' regex = "[^A-Za-z0-9\_" - if self.replace_dash_in_groups: + if not self.replace_dash_in_groups: regex += "\-" return re.sub(regex + "]", "_", word) @@ -1310,4 +1426,3 @@ class Ec2Inventory(object): # Run the script Ec2Inventory() - diff --git a/awx/plugins/inventory/foreman.ini.example b/awx/plugins/inventory/foreman.ini.example new file mode 100644 index 0000000000..d5cd56e441 --- /dev/null +++ b/awx/plugins/inventory/foreman.ini.example @@ -0,0 +1,15 @@ +[foreman] +url = http://localhost:3000/ +user = foreman +password = secret +ssl_verify = True + +[ansible] +group_patterns = ["{app}-{tier}-{color}", + "{app}-{color}", + "{app}", + "{tier}"] + +[cache] +path = . +max_age = 60 diff --git a/awx/plugins/inventory/foreman.py b/awx/plugins/inventory/foreman.py new file mode 100644 index 0000000000..57367b1e77 --- /dev/null +++ b/awx/plugins/inventory/foreman.py @@ -0,0 +1,305 @@ +#!/usr/bin/python +# +# NOTE FOR TOWER: change foreman_ to sattelite_ for the group prefix +# +# vim: set fileencoding=utf-8 : +# +# Copyright (C) 2016 Guido Günther +# +# This script is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with it. If not, see . +# +# This is somewhat based on cobbler inventory + +import argparse +import ConfigParser +import copy +import os +import re +from time import time +import requests +from requests.auth import HTTPBasicAuth + +try: + import json +except ImportError: + import simplejson as json + + +class ForemanInventory(object): + def __init__(self): + """ Main execution path """ + self.inventory = dict() # A list of groups and the hosts in that group + self.cache = dict() # Details about hosts in the inventory + self.params = dict() # Params of each host + self.hostgroups = dict() # host groups + + # Read settings and parse CLI arguments + self.read_settings() + self.parse_cli_args() + + # Cache + if self.args.refresh_cache: + self.update_cache() + elif not self.is_cache_valid(): + self.update_cache() + else: + self.load_inventory_from_cache() + self.load_params_from_cache() + self.load_cache_from_cache() + + data_to_print = "" + + # Data to print + if self.args.host: + data_to_print += self.get_host_info() + else: + self.inventory['_meta'] = {'hostvars': {}} + for hostname in self.cache: + self.inventory['_meta']['hostvars'][hostname] = { + 'foreman': self.cache[hostname], + 'foreman_params': self.params[hostname], + } + data_to_print += self.json_format_dict(self.inventory, True) + + print(data_to_print) + + def is_cache_valid(self): + """ Determines if the cache files have expired, or if it is still valid """ + + if os.path.isfile(self.cache_path_cache): + mod_time = os.path.getmtime(self.cache_path_cache) + current_time = time() + if (mod_time + self.cache_max_age) > current_time: + if (os.path.isfile(self.cache_path_inventory) and + os.path.isfile(self.cache_path_params)): + return True + return False + + def read_settings(self): + """ Reads the settings from the foreman.ini file """ + + config = ConfigParser.SafeConfigParser() + config_paths = [ + "/etc/ansible/foreman.ini", + os.path.dirname(os.path.realpath(__file__)) + '/foreman.ini', + ] + + env_value = os.environ.get('FOREMAN_INI_PATH') + if env_value is not None: + config_paths.append(os.path.expanduser(os.path.expandvars(env_value))) + + config.read(config_paths) + + # Foreman API related + self.foreman_url = config.get('foreman', 'url') + self.foreman_user = config.get('foreman', 'user') + self.foreman_pw = config.get('foreman', 'password') + self.foreman_ssl_verify = config.getboolean('foreman', 'ssl_verify') + + # Ansible related + try: + group_patterns = config.get('ansible', 'group_patterns') + except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): + group_patterns = "[]" + + self.group_patterns = eval(group_patterns) + + # Cache related + try: + cache_path = os.path.expanduser(config.get('cache', 'path')) + except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): + cache_path = '.' + (script, ext) = os.path.splitext(os.path.basename(__file__)) + self.cache_path_cache = cache_path + "/%s.cache" % script + self.cache_path_inventory = cache_path + "/%s.index" % script + self.cache_path_params = cache_path + "/%s.params" % script + self.cache_max_age = config.getint('cache', 'max_age') + + def parse_cli_args(self): + """ Command line argument processing """ + + parser = argparse.ArgumentParser(description='Produce an Ansible Inventory file based on foreman') + parser.add_argument('--list', action='store_true', default=True, help='List instances (default: True)') + parser.add_argument('--host', action='store', help='Get all the variables about a specific instance') + parser.add_argument('--refresh-cache', action='store_true', default=False, + help='Force refresh of cache by making API requests to foreman (default: False - use cache files)') + self.args = parser.parse_args() + + def _get_json(self, url): + page = 1 + results = [] + while True: + ret = requests.get(url, + auth=HTTPBasicAuth(self.foreman_user, self.foreman_pw), + verify=self.foreman_ssl_verify, + params={'page': page, 'per_page': 250}) + ret.raise_for_status() + json = ret.json() + if not json.has_key('results'): + return json + results = results + json['results'] + if len(results) >= json['total']: + break + page += 1 + return results + + def _get_hosts(self): + return self._get_json("%s/api/v2/hosts" % self.foreman_url) + + def _get_hostgroup_by_id(self, hid): + if hid not in self.hostgroups: + url = "%s/api/v2/hostgroups/%s" % (self.foreman_url, hid) + self.hostgroups[hid] = self._get_json(url) + return self.hostgroups[hid] + + def _get_params_by_id(self, hid): + url = "%s/api/v2/hosts/%s/parameters" % (self.foreman_url, hid) + return self._get_json(url) + + def _resolve_params(self, host): + """ + Resolve all host group params of the host using the top level + hostgroup and the ancestry. + """ + hostgroup_id = host['hostgroup_id'] + paramgroups = [] + params = {} + + if hostgroup_id: + hostgroup = self._get_hostgroup_by_id(hostgroup_id) + ancestry_path = hostgroup.get('ancestry', '') + ancestry = ancestry_path.split('/') if ancestry_path is not None else [] + + # Append top level hostgroup last to overwrite lower levels + # values + ancestry.append(hostgroup_id) + paramgroups = [self._get_hostgroup_by_id(hostgroup_id)['parameters'] + for hostgroup_id in ancestry] + + paramgroups += [self._get_params_by_id(host['id'])] + for paramgroup in paramgroups: + for param in paramgroup: + name = param['name'] + params[name] = param['value'] + + return params + + def update_cache(self): + """Make calls to foreman and save the output in a cache""" + + self.groups = dict() + self.hosts = dict() + + for host in self._get_hosts(): + dns_name = host['name'] + + # Create ansible groups for hostgroup, location and organization + for group in ['hostgroup', 'location', 'organization']: + val = host.get('%s_name' % group) + if val: + safe_key = self.to_safe('satellite_%s_%s' % (group, val.lower())) + self.push(self.inventory, safe_key, dns_name) + + params = self._resolve_params(host) + + # Ansible groups by parameters in host groups and Foreman host + # attributes. + groupby = copy.copy(params) + for k, v in host.items(): + if isinstance(v, basestring): + groupby[k] = self.to_safe(v) + elif isinstance(v, int): + groupby[k] = v + + # The name of the ansible groups is given by group_patterns: + for pattern in self.group_patterns: + try: + key = pattern.format(**groupby) + self.push(self.inventory, key, dns_name) + except KeyError: + pass # Host not part of this group + + self.cache[dns_name] = host + self.params[dns_name] = params + self.push(self.inventory, 'all', dns_name) + + self.write_to_cache(self.cache, self.cache_path_cache) + self.write_to_cache(self.inventory, self.cache_path_inventory) + self.write_to_cache(self.params, self.cache_path_params) + + def get_host_info(self): + """ Get variables about a specific host """ + + if not self.cache or len(self.cache) == 0: + # Need to load index from cache + self.load_cache_from_cache() + + if self.args.host not in self.cache: + # try updating the cache + self.update_cache() + + if self.args.host not in self.cache: + # host might not exist anymore + return self.json_format_dict({}, True) + + return self.json_format_dict(self.cache[self.args.host], True) + + def push(self, d, k, v): + if k in d: + d[k].append(v) + else: + d[k] = [v] + + def load_inventory_from_cache(self): + """ Reads the index from the cache file sets self.index """ + + cache = open(self.cache_path_inventory, 'r') + json_inventory = cache.read() + self.inventory = json.loads(json_inventory) + + def load_params_from_cache(self): + """ Reads the index from the cache file sets self.index """ + + cache = open(self.cache_path_params, 'r') + json_params = cache.read() + self.params = json.loads(json_params) + + def load_cache_from_cache(self): + """ Reads the cache from the cache file sets self.cache """ + + cache = open(self.cache_path_cache, 'r') + json_cache = cache.read() + self.cache = json.loads(json_cache) + + def write_to_cache(self, data, filename): + """ Writes data in JSON format to a file """ + json_data = self.json_format_dict(data, True) + cache = open(filename, 'w') + cache.write(json_data) + cache.close() + + def to_safe(self, word): + ''' Converts 'bad' characters in a string to underscores so they can be used as Ansible groups ''' + regex = "[^A-Za-z0-9\_]" + return re.sub(regex, "_", word.replace(" ", "")) + + def json_format_dict(self, data, pretty=False): + """ Converts a dict to a JSON object and dumps it as a formatted string """ + + if pretty: + return json.dumps(data, sort_keys=True, indent=2) + else: + return json.dumps(data) + +ForemanInventory() diff --git a/awx/plugins/inventory/gce.py b/awx/plugins/inventory/gce.py index b13c194a6e..498511d635 100755 --- a/awx/plugins/inventory/gce.py +++ b/awx/plugins/inventory/gce.py @@ -117,8 +117,10 @@ class GceInventory(object): pretty=self.args.pretty)) sys.exit(0) + zones = self.parse_env_zones() + # Otherwise, assume user wants all instances grouped - print(self.json_format_dict(self.group_instances(), + print(self.json_format_dict(self.group_instances(zones), pretty=self.args.pretty)) sys.exit(0) @@ -190,6 +192,14 @@ class GceInventory(object): ) return gce + def parse_env_zones(self): + '''returns a list of comma seperated zones parsed from the GCE_ZONE environment variable. + If provided, this will be used to filter the results of the grouped_instances call''' + import csv + reader = csv.reader([os.environ.get('GCE_ZONE',"")], skipinitialspace=True) + zones = [r for r in reader] + return [z for z in zones[0]] + def parse_cli_args(self): ''' Command line argument processing ''' @@ -240,7 +250,7 @@ class GceInventory(object): except Exception as e: return None - def group_instances(self): + def group_instances(self, zones=None): '''Group all instances''' groups = {} meta = {} @@ -252,6 +262,12 @@ class GceInventory(object): meta["hostvars"][name] = self.node_to_dict(node) zone = node.extra['zone'].name + + # To avoid making multiple requests per zone + # we list all nodes and then filter the results + if zones and zone not in zones: + continue + if groups.has_key(zone): groups[zone].append(name) else: groups[zone] = [name] diff --git a/awx/plugins/inventory/rax.py b/awx/plugins/inventory/rax.py index 4ac6b0f47e..f29e0e8ba0 100755 --- a/awx/plugins/inventory/rax.py +++ b/awx/plugins/inventory/rax.py @@ -385,6 +385,10 @@ def parse_args(): def setup(): default_creds_file = os.path.expanduser('~/.rackspace_cloud_credentials') + # pyrax does not honor the environment variable CLOUD_VERIFY_SSL=False, so let's help pyrax + if 'CLOUD_VERIFY_SSL' in os.environ: + pyrax.set_setting('verify_ssl', os.environ['CLOUD_VERIFY_SSL'] in [1, 'true', 'True']) + env = get_config(p, 'rax', 'environment', 'RAX_ENV', None) if env: pyrax.set_environment(env) diff --git a/awx/plugins/inventory/windows_azure.py b/awx/plugins/inventory/windows_azure.py index d566b0c4d3..d2999f1876 100755 --- a/awx/plugins/inventory/windows_azure.py +++ b/awx/plugins/inventory/windows_azure.py @@ -47,13 +47,9 @@ except ImportError: import simplejson as json try: - import azure - from azure import WindowsAzureError from azure.servicemanagement import ServiceManagementService except ImportError as e: - print("failed=True msg='`azure` library required for this script'") - sys.exit(1) - + sys.exit("ImportError: {0}".format(str(e))) # Imports for ansible import ConfigParser @@ -194,11 +190,8 @@ class AzureInventory(object): try: for cloud_service in self.sms.list_hosted_services(): self.add_deployments(cloud_service) - except WindowsAzureError as e: - print("Looks like Azure's API is down:") - print("") - print(e) - sys.exit(1) + except Exception as e: + sys.exit("Error: Failed to access cloud services - {0}".format(str(e))) def add_deployments(self, cloud_service): """Makes an Azure API call to get the list of virtual machines @@ -207,11 +200,8 @@ class AzureInventory(object): try: for deployment in self.sms.get_hosted_service_properties(cloud_service.service_name,embed_detail=True).deployments.deployments: self.add_deployment(cloud_service, deployment) - except WindowsAzureError as e: - print("Looks like Azure's API is down:") - print("") - print(e) - sys.exit(1) + except Exception as e: + sys.exit("Error: Failed to access deployments - {0}".format(str(e))) def add_deployment(self, cloud_service, deployment): """Adds a deployment to the inventory and index""" diff --git a/awx/plugins/library/scan_services.py b/awx/plugins/library/scan_services.py index 7e3b011e5c..1632ffab39 100644 --- a/awx/plugins/library/scan_services.py +++ b/awx/plugins/library/scan_services.py @@ -59,8 +59,8 @@ class ServiceScanService(BaseService): initctl_path = self.module.get_bin_path("initctl") chkconfig_path = self.module.get_bin_path("chkconfig") - # Upstart and sysvinit - if initctl_path is not None and chkconfig_path is None: + # sysvinit + if service_path is not None and chkconfig_path is None: rc, stdout, stderr = self.module.run_command("%s --status-all 2>&1 | grep -E \"\\[ (\\+|\\-) \\]\"" % service_path, use_unsafe_shell=True) for line in stdout.split("\n"): line_data = line.split() @@ -72,22 +72,21 @@ class ServiceScanService(BaseService): else: service_state = "stopped" services.append({"name": service_name, "state": service_state, "source": "sysv"}) + + # Upstart + if initctl_path is not None and chkconfig_path is None: + p = re.compile('^\s?(?P.*)\s(?P\w+)\/(?P\w+)(\,\sprocess\s(?P[0-9]+))?\s*$') rc, stdout, stderr = self.module.run_command("%s list" % initctl_path) real_stdout = stdout.replace("\r","") for line in real_stdout.split("\n"): - line_data = line.split() - if len(line_data) < 2: + m = p.match(line) + if not m: continue - service_name = line_data[0] - if line_data[1].find("/") == -1: # we expect this to look like: start/running - continue - service_goal = line_data[1].split("/")[0] - service_state = line_data[1].split("/")[1].replace(",","") - if len(line_data) > 3: # If there's a pid associated with the service it'll be on the end of this string "process 418" - if line_data[2] == 'process': - pid = line_data[3] - else: - pid = None + service_name = m.group('name') + service_goal = m.group('goal') + service_state = m.group('state') + if m.group('pid'): + pid = m.group('pid') else: pid = None # NOQA payload = {"name": service_name, "state": service_state, "goal": service_goal, "source": "upstart"} @@ -184,10 +183,11 @@ def main(): if svcmod.incomplete_warning: incomplete_warning = True if len(all_services) == 0: - module.fail_json(msg="Failed to find any services. Sometimes this is due to insufficient privileges.") - results = dict(ansible_facts=dict(services=all_services)) - if incomplete_warning: - results['msg'] = "WARNING: Could not find status for all services. Sometimes this is due to insufficient privileges." + results = dict(skipped=True, msg="Failed to find any services. Sometimes this is due to insufficient privileges.") + else: + results = dict(ansible_facts=dict(services=all_services)) + if incomplete_warning: + results['msg'] = "WARNING: Could not find status for all services. Sometimes this is due to insufficient privileges." module.exit_json(**results) main() diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index d61f0fac10..a4110e8286 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -18,6 +18,15 @@ for setting in dir(global_settings): # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(__file__)) +def is_testing(argv=None): + '''Return True if running django or py.test unit tests.''' + argv = sys.argv if argv is None else argv + if len(argv) >= 1 and ('py.test' in argv[0] or 'py/test.py' in argv[0]): + return True + elif len(argv) >= 2 and argv[1] == 'test': + return True + return False + DEBUG = True TEMPLATE_DEBUG = DEBUG SQL_DEBUG = DEBUG @@ -32,9 +41,11 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'awx.sqlite3'), - # Test database cannot be :memory: for celery/inventory tests to work. - 'TEST_NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), 'ATOMIC_REQUESTS': True, + 'TEST': { + # Test database cannot be :memory: for celery/inventory tests. + 'NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), + }, } } @@ -170,7 +181,6 @@ INSTALLED_APPS = ( 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.staticfiles', - 'south', 'rest_framework', 'django_extensions', 'djcelery', @@ -188,34 +198,34 @@ INSTALLED_APPS = ( INTERNAL_IPS = ('127.0.0.1',) REST_FRAMEWORK = { - 'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'awx.api.pagination.PaginationSerializer', - 'PAGINATE_BY': 25, - 'PAGINATE_BY_PARAM': 'page_size', + 'DEFAULT_PAGINATION_CLASS': 'awx.api.pagination.Pagination', + 'PAGE_SIZE': 25, 'DEFAULT_AUTHENTICATION_CLASSES': ( 'awx.api.authentication.TokenAuthentication', - 'rest_framework.authentication.BasicAuthentication', + 'awx.api.authentication.LoggedBasicAuthentication', #'rest_framework.authentication.SessionAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'awx.api.permissions.ModelAccessPermission', ), 'DEFAULT_FILTER_BACKENDS': ( - 'awx.api.filters.ActiveOnlyBackend', 'awx.api.filters.TypeFilterBackend', 'awx.api.filters.FieldLookupBackend', 'rest_framework.filters.SearchFilter', 'awx.api.filters.OrderByBackend', ), 'DEFAULT_PARSER_CLASSES': ( - 'rest_framework.parsers.JSONParser', + 'awx.api.parsers.JSONParser', ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', 'awx.api.renderers.BrowsableAPIRenderer', ), + 'DEFAULT_METADATA_CLASS': 'awx.api.metadata.Metadata', 'EXCEPTION_HANDLER': 'awx.api.views.api_exception_handler', 'VIEW_NAME_FUNCTION': 'awx.api.generics.get_view_name', 'VIEW_DESCRIPTION_FUNCTION': 'awx.api.generics.get_view_description', + 'NON_FIELD_ERRORS_KEY': '__all__', } AUTHENTICATION_BACKENDS = ( @@ -262,11 +272,11 @@ SERVER_EMAIL = 'root@localhost' # Default email address to use for various automated correspondence from # the site managers. -DEFAULT_FROM_EMAIL = 'webmaster@localhost' +DEFAULT_FROM_EMAIL = 'tower@localhost' # Subject-line prefix for email messages send with django.core.mail.mail_admins # or ...mail_managers. Make sure to include the trailing space. -EMAIL_SUBJECT_PREFIX = '[AWX] ' +EMAIL_SUBJECT_PREFIX = '[Tower] ' # The email backend to use. For possible shortcuts see django.core.mail. # The default is to use the SMTP backend. @@ -307,31 +317,12 @@ DEBUG_TOOLBAR_CONFIG = { 'ENABLE_STACKTRACES' : True, } -# Use Django-devserver if installed. -try: - import devserver - INSTALLED_APPS += (devserver.__name__,) -except ImportError: - pass - DEVSERVER_DEFAULT_ADDR = '0.0.0.0' DEVSERVER_DEFAULT_PORT = '8013' -DEVSERVER_MODULES = ( - 'devserver.modules.sql.SQLRealTimeModule', - 'devserver.modules.sql.SQLSummaryModule', - 'devserver.modules.profile.ProfileSummaryModule', - #'devserver.modules.ajax.AjaxDumpModule', - #'devserver.modules.profile.MemoryUseModule', - #'devserver.modules.cache.CacheSummaryModule', - #'devserver.modules.profile.LineProfilerModule', -) # Set default ports for live server tests. os.environ.setdefault('DJANGO_LIVE_TEST_SERVER_ADDRESS', 'localhost:9013-9199') -# Skip migrations when running tests. -SOUTH_TESTS_MIGRATE = False - # Initialize Django-Celery. djcelery.setup_loader() @@ -350,6 +341,18 @@ CELERYBEAT_SCHEDULE = { 'task': 'awx.main.tasks.tower_periodic_scheduler', 'schedule': timedelta(seconds=30) }, + 'admin_checks': { + 'task': 'awx.main.tasks.run_administrative_checks', + 'schedule': timedelta(days=30) + }, + 'label_cleanup': { + 'task': 'awx.main.tasks.run_label_cleanup', + 'schedule': timedelta(days=7) + }, + 'authtoken_cleanup': { + 'task': 'awx.main.tasks.cleanup_authtokens', + 'schedule': timedelta(days=30) + }, } # Social Auth configuration. @@ -537,6 +540,7 @@ EC2_REGION_NAMES = { 'ap-southeast-1': 'Asia Pacific (Singapore)', 'ap-southeast-2': 'Asia Pacific (Sydney)', 'ap-northeast-1': 'Asia Pacific (Tokyo)', + 'ap-northeast-2': 'Asia Pacific (Seoul)', 'sa-east-1': 'South America (Sao Paulo)', 'us-gov-west-1': 'US West (GovCloud)', 'cn-north-1': 'China (Beijing)', @@ -652,6 +656,16 @@ AZURE_HOST_FILTER = r'^.+$' AZURE_EXCLUDE_EMPTY_GROUPS = True AZURE_INSTANCE_ID_VAR = 'private_id' +# -------------------------------------- +# -- Microsoft Azure Resource Manager -- +# -------------------------------------- +AZURE_RM_GROUP_FILTER = r'^.+$' +AZURE_RM_HOST_FILTER = r'^.+$' +AZURE_RM_ENABLED_VAR = 'powerstate' +AZURE_RM_ENABLED_VALUE = 'running' +AZURE_RM_INSTANCE_ID_VAR = 'id' +AZURE_RM_EXCLUDE_EMPTY_GROUPS = True + # --------------------- # ----- OpenStack ----- # --------------------- @@ -670,10 +684,7 @@ ACTIVITY_STREAM_ENABLED = True ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC = False # Internal API URL for use by inventory scripts and callback plugin. -if 'devserver' in INSTALLED_APPS: - INTERNAL_API_URL = 'http://127.0.0.1:%s' % DEVSERVER_DEFAULT_PORT -else: - INTERNAL_API_URL = 'http://127.0.0.1:8000' +INTERNAL_API_URL = 'http://127.0.0.1:%s' % DEVSERVER_DEFAULT_PORT # ZeroMQ callback settings. CALLBACK_CONSUMER_PORT = "tcp://127.0.0.1:5556" @@ -688,6 +699,159 @@ FACT_CACHE_PORT = 6564 ORG_ADMINS_CAN_SEE_ALL_USERS = True +TOWER_ADMIN_ALERTS = True + +TOWER_URL_BASE = "https://towerhost" + +TOWER_SETTINGS_MANIFEST = { + "SCHEDULE_MAX_JOBS": { + "name": "Maximum Scheduled Jobs", + "description": "Maximum number of the same job template that can be waiting to run when launching from a schedule before no more are created", + "default": SCHEDULE_MAX_JOBS, + "type": "int", + "category": "jobs", + }, + "STDOUT_MAX_BYTES_DISPLAY": { + "name": "Standard Output Maximum Display Size", + "description": "Maximum Size of Standard Output in bytes to display before requiring the output be downloaded", + "default": STDOUT_MAX_BYTES_DISPLAY, + "type": "int", + "category": "jobs", + }, + "AUTH_TOKEN_EXPIRATION": { + "name": "Idle Time Force Log Out", + "description": "Number of seconds that a user is inactive before they will need to login again", + "type": "int", + "default": AUTH_TOKEN_EXPIRATION, + "category": "authentication", + }, + "AUTH_TOKEN_PER_USER": { + "name": "Maximum number of simultaneous logins", + "description": "Maximum number of simultaneous logins a user may have. To disable enter -1", + "type": "int", + "default": AUTH_TOKEN_PER_USER, + "category": "authentication", + }, + # "AUTH_BASIC_ENABLED": { + # "name": "Enable HTTP Basic Auth", + # "description": "Enable HTTP Basic Auth for the API Browser", + # "default": AUTH_BASIC_ENABLED, + # "type": "bool", + # "category": "authentication", + # }, + # "AUTH_LDAP_SERVER_URI": { + # "name": "LDAP Server URI", + # "description": "URI Location of the LDAP Server", + # "default": AUTH_LDAP_SERVER_URI, + # "type": "string", + # "category": "authentication", + # }, + # "RADIUS_SERVER": { + # "name": "Radius Server Host", + # "description": "Host to communicate with for Radius Authentication", + # "default": RADIUS_SERVER, + # "type": "string", + # "category": "authentication", + # }, + # "RADIUS_PORT": { + # "name": "Radius Server Port", + # "description": "Port on the Radius host for Radius Authentication", + # "default": RADIUS_PORT, + # "type": "string", + # "category": "authentication", + # }, + # "RADIUS_SECRET": { + # "name": "Radius Server Secret", + # "description": "Secret used when negotiating with the Radius server", + # "default": RADIUS_SECRET, + # "type": "string", + # "category": "authentication", + # }, + "AWX_PROOT_ENABLED": { + "name": "Enable PRoot for Job Execution", + "description": "Isolates an Ansible job from protected parts of the Tower system to prevent exposing sensitive information", + "default": AWX_PROOT_ENABLED, + "type": "bool", + "category": "jobs", + }, + "AWX_PROOT_HIDE_PATHS": { + "name": "Paths to hide from PRoot jobs", + "description": "Extra paths to hide from PRoot isolated processes", + "default": AWX_PROOT_HIDE_PATHS, + "type": "list", + "category": "jobs", + }, + "AWX_PROOT_SHOW_PATHS": { + "name": "Paths to expose to PRoot jobs", + "description": "Explicit whitelist of paths to expose to PRoot jobs", + "default": AWX_PROOT_SHOW_PATHS, + "type": "list", + "category": "jobs", + }, + "AWX_PROOT_BASE_PATH": { + "name": "Base PRoot execution path", + "description": "The location that PRoot will create its temporary working directory", + "default": AWX_PROOT_BASE_PATH, + "type": "string", + "category": "jobs", + }, + "AWX_ANSIBLE_CALLBACK_PLUGINS": { + "name": "Ansible Callback Plugins", + "description": "Colon Seperated Paths for extra callback plugins to be used when running jobs", + "default": AWX_ANSIBLE_CALLBACK_PLUGINS, + "type": "string", + "category": "jobs", + }, + "PENDO_TRACKING_STATE": { + "name": "Analytics Tracking State", + "description": "Enable or Disable Analytics Tracking", + "default": PENDO_TRACKING_STATE, + "type": "string", + "category": "ui", + }, + "AD_HOC_COMMANDS": { + "name": "Ansible Modules Allowed for Ad Hoc Jobs", + "description": "A colon-seperated whitelist of modules allowed to be used by ad-hoc jobs", + "default": AD_HOC_COMMANDS, + "type": "list", + "category": "jobs", + }, + "ACTIVITY_STREAM_ENABLED": { + "name": "Enable Activity Stream", + "description": "Enable capturing activity for the Tower activity stream", + "default": ACTIVITY_STREAM_ENABLED, + "type": "bool", + "category": "system", + }, + "ORG_ADMINS_CAN_SEE_ALL_USERS": { + "name": "All Users Visible to Organization Admins", + "description": "Controls whether any Organization Admin can view all users, even those not associated with their Organization", + "default": ORG_ADMINS_CAN_SEE_ALL_USERS, + "type": "bool", + "category": "system", + }, + "TOWER_ADMIN_ALERTS": { + "name": "Enable Tower Administrator Alerts", + "description": "Allow Tower to email Admin users for system events that may require attention", + "default": TOWER_ADMIN_ALERTS, + "type": "bool", + "category": "system", + }, + "TOWER_URL_BASE": { + "name": "Base URL of the Tower host", + "description": "This is used by services like Notifications to render a valid url to the Tower host", + "default": TOWER_URL_BASE, + "type": "string", + "category": "system", + }, + "LICENSE": { + "name": "Tower License", + "description": "Controls what features and functionality is enabled in Tower.", + "default": "{}", + "type": "string", + "category": "system", + }, +} # Logging configuration. LOGGING = { 'version': 1, @@ -838,3 +1002,4 @@ LOGGING = { }, } } + diff --git a/awx/settings/development.py b/awx/settings/development.py index cd25c3214c..438c152a0a 100644 --- a/awx/settings/development.py +++ b/awx/settings/development.py @@ -13,7 +13,6 @@ from split_settings.tools import optional, include # Load default settings. from defaults import * # NOQA - MONGO_HOST = '127.0.0.1' MONGO_PORT = 27017 MONGO_USERNAME = None @@ -71,13 +70,18 @@ SYSTEM_UUID = '00000000-0000-0000-0000-000000000000' include(optional('/etc/tower/settings.py'), scope=locals()) include(optional('/etc/tower/conf.d/*.py'), scope=locals()) +ANSIBLE_USE_VENV = True +ANSIBLE_VENV_PATH = "/tower_devel/venv/ansible" +TOWER_USE_VENV = True +TOWER_VENV_PATH = "/tower_devel/venv/tower" # If any local_*.py files are present in awx/settings/, use them to override # default settings for development. If not present, we can still run using # only the defaults. try: include(optional('local_*.py'), scope=locals()) - include('postprocess.py', scope=locals()) + if not is_testing(sys.argv): + include('postprocess.py', scope=locals()) except ImportError: traceback.print_exc() sys.exit(1) diff --git a/awx/settings/development_quiet.py b/awx/settings/development_quiet.py index c47e78b69d..924ae22072 100644 --- a/awx/settings/development_quiet.py +++ b/awx/settings/development_quiet.py @@ -13,3 +13,4 @@ from development import * # NOQA DEBUG = False TEMPLATE_DEBUG = DEBUG SQL_DEBUG = DEBUG + diff --git a/awx/settings/local_settings.py.docker_compose b/awx/settings/local_settings.py.docker_compose index 905e26857f..2e27a664ea 100644 --- a/awx/settings/local_settings.py.docker_compose +++ b/awx/settings/local_settings.py.docker_compose @@ -25,6 +25,7 @@ DATABASES = { 'NAME': 'awx-dev', 'USER': 'awx-dev', 'PASSWORD': 'AWXsome1', + 'ATOMIC_REQUESTS': True, 'HOST': 'postgres', 'PORT': '', } @@ -33,13 +34,15 @@ DATABASES = { # Use SQLite for unit tests instead of PostgreSQL. If the lines below are # commented out, Django will create the test_awx-dev database in PostgreSQL to # run unit tests. -if len(sys.argv) >= 2 and sys.argv[1] == 'test': +if is_testing(sys.argv): DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'awx.sqlite3'), - # Test database cannot be :memory: for celery/inventory tests. - 'TEST_NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), + 'TEST': { + # Test database cannot be :memory: for celery/inventory tests. + 'NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), + }, } } @@ -49,14 +52,14 @@ if len(sys.argv) >= 2 and sys.argv[1] == 'test': BROKER_URL = 'redis://redis/' # Mongo host configuration -MONGO_HOST = 'mongo' +MONGO_HOST = NotImplemented # Set True to enable additional logging from the job_event_callback plugin JOB_CALLBACK_DEBUG = False # Absolute filesystem path to the directory to host projects (with playbooks). # This directory should NOT be web-accessible. -PROJECTS_ROOT = os.path.join(BASE_DIR, 'projects') +PROJECTS_ROOT = '/projects/' # Absolute filesystem path to the directory for job status stdout # This directory should not be web-accessible diff --git a/awx/settings/local_settings.py.example b/awx/settings/local_settings.py.example index 2fb0c745fc..cb85724366 100644 --- a/awx/settings/local_settings.py.example +++ b/awx/settings/local_settings.py.example @@ -33,13 +33,15 @@ DATABASES = { # Use SQLite for unit tests instead of PostgreSQL. If the lines below are # commented out, Django will create the test_awx-dev database in PostgreSQL to # run unit tests. -if len(sys.argv) >= 2 and sys.argv[1] == 'test': +if is_testing(sys.argv): DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'awx.sqlite3'), - # Test database cannot be :memory: for celery/inventory tests. - 'TEST_NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), + 'TEST': { + # Test database cannot be :memory: for celery/inventory tests. + 'NAME': os.path.join(BASE_DIR, 'awx_test.sqlite3'), + }, } } diff --git a/awx/settings/production.py b/awx/settings/production.py index 397f48070a..1f33f2bbbd 100644 --- a/awx/settings/production.py +++ b/awx/settings/production.py @@ -21,9 +21,6 @@ SQL_DEBUG = DEBUG # Clear database settings to force production environment to define them. DATABASES = {} -# Enable South to look for migrations in .pyc files. -SOUTH_USE_PYC = True - # Clear the secret key to force production environment to define it. SECRET_KEY = None @@ -44,6 +41,14 @@ JOBOUTPUT_ROOT = '/var/lib/awx/job_status/' # The heartbeat file for the tower scheduler SCHEDULE_METADATA_LOCATION = '/var/lib/awx/.tower_cycle' +# Ansible base virtualenv paths and enablement +ANSIBLE_USE_VENV = True +ANSIBLE_VENV_PATH = "/var/lib/awx/venv/ansible" + +# Tower base virtualenv paths and enablement +TOWER_USE_VENV = True +TOWER_VENV_PATH = "/var/lib/awx/venv/tower" + LOGGING['handlers']['tower_warnings'] = { 'level': 'WARNING', 'class':'logging.handlers.RotatingFileHandler', @@ -122,7 +127,7 @@ except IOError: try: e = None open(settings_file) - except IOError, e: + except IOError as e: pass if e and e.errno == errno.EACCES: SECRET_KEY = 'permission-denied' diff --git a/awx/sso/backends.py b/awx/sso/backends.py index b2c11be2d6..91999034d5 100644 --- a/awx/sso/backends.py +++ b/awx/sso/backends.py @@ -6,6 +6,7 @@ import logging # Django from django.dispatch import receiver +from django.contrib.auth.models import User from django.conf import settings as django_settings # django-auth-ldap @@ -104,6 +105,18 @@ class RADIUSBackend(BaseRADIUSBackend): return None return super(RADIUSBackend, self).get_user(user_id) + def get_django_user(self, username, password=None): + try: + user = User.objects.get(username=username) + except User.DoesNotExist: + user = User(username=username) + + if password is not None: + user.set_unusable_password() + user.save() + + return user + class TowerSAMLIdentityProvider(BaseSAMLIdentityProvider): ''' @@ -163,7 +176,7 @@ class SAMLAuth(BaseSAMLAuth): return super(SAMLAuth, self).get_user(user_id) -def _update_m2m_from_groups(user, ldap_user, rel, opts, remove=False): +def _update_m2m_from_groups(user, ldap_user, rel, opts, remove=True): ''' Hepler function to update m2m relationship based on LDAP group membership. ''' @@ -188,7 +201,7 @@ def _update_m2m_from_groups(user, ldap_user, rel, opts, remove=False): rel.remove(user) -@receiver(populate_user) +@receiver(populate_user, dispatch_uid='populate-ldap-user') def on_populate_user(sender, **kwargs): ''' Handle signal from LDAP backend to populate the user object. Update user @@ -207,14 +220,14 @@ def on_populate_user(sender, **kwargs): org_map = getattr(backend.settings, 'ORGANIZATION_MAP', {}) for org_name, org_opts in org_map.items(): org, created = Organization.objects.get_or_create(name=org_name) - remove = bool(org_opts.get('remove', False)) + remove = bool(org_opts.get('remove', True)) admins_opts = org_opts.get('admins', None) remove_admins = bool(org_opts.get('remove_admins', remove)) - _update_m2m_from_groups(user, ldap_user, org.admins, admins_opts, + _update_m2m_from_groups(user, ldap_user, org.admin_role.members, admins_opts, remove_admins) users_opts = org_opts.get('users', None) remove_users = bool(org_opts.get('remove_users', remove)) - _update_m2m_from_groups(user, ldap_user, org.users, users_opts, + _update_m2m_from_groups(user, ldap_user, org.member_role.members, users_opts, remove_users) # Update team membership based on group memberships. @@ -225,8 +238,8 @@ def on_populate_user(sender, **kwargs): org, created = Organization.objects.get_or_create(name=team_opts['organization']) team, created = Team.objects.get_or_create(name=team_name, organization=org) users_opts = team_opts.get('users', None) - remove = bool(team_opts.get('remove', False)) - _update_m2m_from_groups(user, ldap_user, team.users, users_opts, + remove = bool(team_opts.get('remove', True)) + _update_m2m_from_groups(user, ldap_user, team.member_role.members, users_opts, remove) # Update user profile to store LDAP DN. diff --git a/awx/sso/pipeline.py b/awx/sso/pipeline.py index 7000d050ee..756e64279d 100644 --- a/awx/sso/pipeline.py +++ b/awx/sso/pipeline.py @@ -44,7 +44,7 @@ def prevent_inactive_login(backend, details, user=None, *args, **kwargs): raise AuthInactive(backend) -def _update_m2m_from_expression(user, rel, expr, remove=False): +def _update_m2m_from_expression(user, rel, expr, remove=True): ''' Helper function to update m2m relationship based on user matching one or more expressions. @@ -90,20 +90,20 @@ def update_user_orgs(backend, details, user=None, *args, **kwargs): org = Organization.objects.get_or_create(name=org_name)[0] else: try: - org = Organization.objects.filter(active=True).order_by('pk')[0] + org = Organization.objects.order_by('pk')[0] except IndexError: continue # Update org admins from expression(s). - remove = bool(org_opts.get('remove', False)) + remove = bool(org_opts.get('remove', True)) admins_expr = org_opts.get('admins', None) remove_admins = bool(org_opts.get('remove_admins', remove)) - _update_m2m_from_expression(user, org.admins, admins_expr, remove_admins) + _update_m2m_from_expression(user, org.admin_role.members, admins_expr, remove_admins) # Update org users from expression(s). users_expr = org_opts.get('users', None) remove_users = bool(org_opts.get('remove_users', remove)) - _update_m2m_from_expression(user, org.users, users_expr, remove_users) + _update_m2m_from_expression(user, org.member_role.members, users_expr, remove_users) def update_user_teams(backend, details, user=None, *args, **kwargs): @@ -126,12 +126,12 @@ def update_user_teams(backend, details, user=None, *args, **kwargs): org = Organization.objects.get_or_create(name=team_opts['organization'])[0] else: try: - org = Organization.objects.filter(active=True).order_by('pk')[0] + org = Organization.objects.order_by('pk')[0] except IndexError: continue # Update team members from expression(s). team = Team.objects.get_or_create(name=team_name, organization=org)[0] users_expr = team_opts.get('users', None) - remove = bool(team_opts.get('remove', False)) - _update_m2m_from_expression(user, team.users, users_expr, remove) + remove = bool(team_opts.get('remove', True)) + _update_m2m_from_expression(user, team.member_role.members, users_expr, remove) diff --git a/awx/sso/views.py b/awx/sso/views.py index a75bcd96ae..962b89943e 100644 --- a/awx/sso/views.py +++ b/awx/sso/views.py @@ -3,6 +3,7 @@ # Python import urllib +import logging # Django from django.core.urlresolvers import reverse @@ -10,6 +11,7 @@ from django.http import HttpResponse from django.utils.timezone import now, utc from django.views.generic import View from django.views.generic.base import RedirectView +from django.utils.encoding import smart_text # Django REST Framework from rest_framework.renderers import JSONRenderer @@ -18,6 +20,7 @@ from rest_framework.renderers import JSONRenderer from awx.main.models import AuthToken from awx.api.serializers import UserSerializer +logger = logging.getLogger('awx.sso.views') class BaseRedirectView(RedirectView): @@ -45,9 +48,11 @@ class CompleteView(BaseRedirectView): request_hash=request_hash, expires__gt=now())[0] token.refresh() + logger.info(smart_text(u"User {} logged in".format(self.request.user.username))) except IndexError: token = AuthToken.objects.create(user=request.user, request_hash=request_hash) + logger.info(smart_text(u"User {} logged in".format(self.request.user.username))) request.session['auth_token_key'] = token.key token_key = urllib.quote('"%s"' % token.key) response.set_cookie('token', token_key) diff --git a/awx/static/api/api.css b/awx/static/api/api.css new file mode 100644 index 0000000000..61d51fae12 --- /dev/null +++ b/awx/static/api/api.css @@ -0,0 +1,369 @@ +/************************************************* + * Copyright (c) 2016 Ansible, Inc. + * + * All Rights Reserved + *************************************************/ + +html, +body { + height: 100%; +} +body { + font-family: 'Open Sans', sans-serif; + font-weight: 400; + color: #161B1F; + background-color: #F6F6F6; + padding-top: 50px; + min-height: 100%; + position: relative; +} +body a { + color: #337AB7; +} +body a:hover { + color: #286090; +} +body code { + color: #D9534F; + background-color: #FFF5F5; +} +body pre code { + color: inherit; + background-color: transparent; +} + +body .navbar { + background-color: #FFFFFF; + border-color: #E8E8E8; +} +body .navbar > .container .navbar-brand, +body .navbar > .container-fluid .navbar-brand, +.navbar { + color: #707070; + padding: 0; + margin-left: 0px; + font-size: 14px; +} +body .navbar .navbar-brand:focus, +body .navbar .navbar-brand:hover { + color: #707070; +} +body .navbar .navbar-brand img { + display: inline-block; + width: 93px; + height: 30px; + margin-right:14px; +} +body .navbar .navbar-brand > span { + display: inline-block; + line-height: 50px; + vertical-align: middle; + margin-left: -10px; +} +body .navbar .navbar-title { + float: left; + height: 50px; + color: #707070; + padding: 0; + font-size: 14px; + display: none; +} +body .navbar .navbar-title > span { + display: inline-block; + line-height: 50px; + vertical-align: middle; +} +body.show-title .navbar .navbar-title { + display: inline-block; +} +body .navbar .navbar-nav > li > a { + color: #707070; + display: flex; + justify-content: center; +} +body .navbar .navbar-nav > li > a:focus, +body .navbar .navbar-nav > li > a:hover { + color: #707070; +} +body .navbar .navbar-nav > li > a > span.glyphicon { + font-size: 20px; + padding-right: 5px; + padding-left: 5px; + color: #848992; +} + +body .page-header { + margin-top: 20px; +} +body .page-header h1 { + font-size: 30px; + line-height: 33px; +} +body .page-header .toggle-description span.glyphicon { + font-size: 14px; + vertical-align: top; + padding: 2px; + color: #A9A9A9; +} +body .page-header .toggle-description:hover span.glyphicon { + color: #171717; +} +body .description .hide-description span.glyphicon { + color: #E1E1E1; + font-size: 20px; +} +body .description .hide-description:hover span.glyphicon { + color: #848992; +} +body ul.breadcrumb, +body .description, +body .request-info .prettyprint, +body .response-info .prettyprint, +body .well { + background-color: #FFFFFF; + border-radius: 5px; + padding: 10px; + border: 1px solid #E8E8E8; + margin-top: 20px; + box-shadow: none; +} +body .description { + margin-top: 0; + margin-bottom: 20px; + padding-bottom: 0; + display: none; +} +body .request-info .prettyprint { + margin-top: 0; +} +body .resource-description, +body .response-info { + margin-bottom: 0; +} +body pre, +body .prettyprint .pln, +body .request-info .prettyprint .lit { + color: #161B1F; +} +body .prettyprint .lit { + color: #337AB7; +} +body .prettyprint .str { + color: #D9534F; +} + +body .well.tab-content { + padding: 20px; +} +body .tab-content > .tab-pane { + display: block; +} +body .well.tab-content .form-actions { + float: right; +} +body .form-group { + margin-bottom: 10px; +} +body .form-actions button { + margin-left: 5px; +} +body .form-horizontal .control-label { + text-transform: uppercase; + font-weight: normal; + color: #707070; +} +body textarea.form-control { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 12px; + padding: 6px; +} +body .form-control, +body .description pre { + border-color: #E1E1E1; + background-color: #F6F6F6; + color: #161B1F; +} + +body .tooltip.bottom .tooltip-arrow { + border-bottom-color: #707070; +} +body .tooltip.top .tooltip-arrow { + border-top-color: #707070; +} +body .tooltip.left .tooltip-arrow { + border-left-color: #707070; +} +body .tooltip.right .tooltip-arrow { + border-right-color: #707070; +} +body .tooltip.in { + opacity: 1; +} +body .tooltip-inner { + background-color: #707070; +} + +body .btn { + transition: background-color 0.2s; +} +.btn-primary { + background-color: #FFFFFF; + color: #707070; + border: 1px solid #E8E8E8; +} +.btn-primary:hover, +.btn-primary.focus, +.btn-primary:focus, +.btn-primary.active, +.btn-primary:active, +.btn-primary.active.focus, +.btn-primary.active:focus, +.btn-primary.active:hover, +.btn-primary:active.focus, +.btn-primary:active:focus, +.btn-primary:active:hover, +.open>.dropdown-toggle.btn-primary.focus, +.open>.dropdown-toggle.btn-primary:focus, +.open>.dropdown-toggle.btn-primary:hover, +.open>.dropdown-toggle.btn-primary { + background-color: #FAFAFA; + color: #707070; + border: 1px solid #E8E8E8; +} + +body .tab-content .btn-primary { + background-color: #5cb85c; + color: #FFFFFF; + border: 1px solid #5cb85c; +} +body .tab-content .btn-primary:hover, +body .tab-content .btn-primary.focus, +body .tab-content .btn-primary:focus, +body .tab-content .btn-primary.active, +body .tab-content .btn-primary:active, +body .tab-content .btn-primary.active.focus, +body .tab-content .btn-primary.active:focus, +body .tab-content .btn-primary.active:hover, +body .tab-content .btn-primary:active.focus, +body .tab-content .btn-primary:active:focus, +body .tab-content .btn-primary:active:hover { + background-color: #449d44; + color: #FFFFFF; + border: 1px solid #449d44; +} + +.btn-danger { + background-color: #D9534F; + border-color: #D9534F; +} +.btn-danger:hover, +.btn-danger:hover, +.btn-danger.focus, +.btn-danger:focus, +.btn-danger.active, +.btn-danger:active, +.btn-danger.active.focus, +.btn-danger.active:focus, +.btn-danger.active:hover, +.btn-danger:active.focus, +.btn-danger:active:focus, +.btn-danger:active:hover { + background-color: #c9302c; + border-color: #c9302c; +} + +body .wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -40px; +} +body #push { + height: 40px; +} +body #footer { + width: 100%; + overflow: hidden; + margin-bottom: 0; + height: 40px; + color: #707070; +} +body #footer .footer-logo { + text-align: left; +} +body #footer .footer-logo a { + display: inline-block; +} +body #footer .footer-logo img { + height: 40px; + width: 250px; +} +body #footer .footer-copyright { + text-align: right; + font-size: 12px; + padding-right: 35px; + padding-top: 10px; +} +body #footer .footer-copyright a { + color: #707070; +} + +@media screen and (min-width: 768px) { + body .navbar-right { + margin-right: 0; + } +} + +@media screen and (max-width: 767px) { + body .navbar .container .navbar-header, + body .navbar .container-fluid .navbar-header { + margin-left: -20px; + } + body.show-title .navbar .navbar-title { + display: none; +} + body .navbar .navbar-toggle { + background-color: #FFFFFF; + border-color: #E8E8E8; + } + body .navbar .navbar-toggle:active, + body .navbar .navbar-toggle:hover { + background-color: #FAFAFA; + border-color: #E8E8E8; + } + body .navbar .navbar-toggle .icon-bar { + background-color: #848992; + } + body .navbar .tooltip { + visibility: hidden; + } + body .navbar .navbar-nav > li > a { + display: block; + padding-top: 8px; + padding-bottom: 12px; + } + body .navbar .navbar-nav > li > a > span.glyphicon { + top: 4px; + } + body .page-header h1 { + font-size: 24px; + } + body .wrapper { + margin: 0 auto -65px; + } + body #push { + height: 65px; + } + body #footer { + height: 65px; + } + body #footer .footer-logo { + text-align: center; + } + body #footer .footer-copyright { + text-align: center; + padding-right: 15px; + padding-top: 0; + white-space: nowrap; + } +} diff --git a/awx/static/api/api.js b/awx/static/api/api.js new file mode 100644 index 0000000000..67053ae2f6 --- /dev/null +++ b/awx/static/api/api.js @@ -0,0 +1,96 @@ +/************************************************* + * Copyright (c) 2016 Ansible, Inc. + * + * All Rights Reserved + *************************************************/ + +$(function() { + + // Add syntax highlighting to examples in description. + $('.description pre').addClass('prettyprint'); + prettyPrint(); + + // Make links from relative URLs to resources. + $('span.str').each(function() { + var s = $(this).html(); + if (s.match(/^\"\/.+\/\"$/) || s.match(/^\"\/.+\/\?.*\"$/)) { + $(this).html('"' + s.replace(/\"/g, '') + '"'); + } + }); + + // Make links for all inventory script hosts. + $('.request-info .pln').filter(function() { + return $(this).text() === 'script'; + }).each(function() { + $('.response-info span.str').filter(function() { + return $(this).text() === '"hosts"'; + }).each(function() { + $(this).nextUntil('span.pun:contains("]")').filter('span.str').each(function() { + if ($(this).text().match(/^\".+\"$/)) { + var s = $(this).text().replace(/\"/g, ''); + $(this).html('"' + s + '"'); + } + else if ($(this).text() !== '"') { + var s = $(this).text(); + $(this).html('' + s + ''); + } + }); + }); + }); + + // Add classes/icons for dynamically showing/hiding help. + if ($('.description').html()) { + $('.description').addClass('prettyprint').parent().css('float', 'none'); + $('.hidden a.hide-description').prependTo('.description'); + $('a.hide-description').click(function() { + $(this).tooltip('hide'); + $('.description').slideUp('fast'); + return false; + }); + $('.hidden a.toggle-description').appendTo('.page-header h1'); + $('a.toggle-description').click(function() { + $(this).tooltip('hide'); + $('.description').slideToggle('fast'); + return false; + }); + } + + $('[data-toggle="tooltip"]').tooltip(); + + if ($(window).scrollTop() >= 115) { + $('body').addClass('show-title'); + } + $(window).scroll(function() { + if ($(window).scrollTop() >= 115) { + $('body').addClass('show-title'); + } + else { + $('body').removeClass('show-title'); + } + }); + + $('a.resize').click(function() { + $(this).tooltip('hide'); + if ($(this).find('span.glyphicon-resize-full').size()) { + $(this).find('span.glyphicon').addClass('glyphicon-resize-small').removeClass('glyphicon-resize-full'); + $('.container').addClass('container-fluid').removeClass('container'); + document.cookie = 'api_width=wide; path=/api/'; + } + else { + $(this).find('span.glyphicon').addClass('glyphicon-resize-full').removeClass('glyphicon-resize-small'); + $('.container-fluid').addClass('container').removeClass('container-fluid'); + document.cookie = 'api_width=fixed; path=/api/'; + } + return false; + }); + + function getCookie(name) { + var value = "; " + document.cookie; + var parts = value.split("; " + name + "="); + if (parts.length == 2) return parts.pop().split(";").shift(); + } + if (getCookie('api_width') == 'wide') { + $('a.resize').click(); + } + +}); diff --git a/awx/static/favicon.ico b/awx/static/favicon.ico index 31b759caf9..5003cda615 100644 Binary files a/awx/static/favicon.ico and b/awx/static/favicon.ico differ diff --git a/awx/static/img/favicon.ico b/awx/static/img/favicon.ico deleted file mode 100644 index f53629b961..0000000000 Binary files a/awx/static/img/favicon.ico and /dev/null differ diff --git a/awx/static/img/tower_console_bug.png b/awx/static/img/tower_console_bug.png deleted file mode 100644 index 90737558ae..0000000000 Binary files a/awx/static/img/tower_console_bug.png and /dev/null differ diff --git a/awx/static/img/tower_console_logo.png b/awx/static/img/tower_console_logo.png deleted file mode 100644 index c93291a1c9..0000000000 Binary files a/awx/static/img/tower_console_logo.png and /dev/null differ diff --git a/awx/templates/error.html b/awx/templates/error.html index 660740ce52..7064b8687c 100644 --- a/awx/templates/error.html +++ b/awx/templates/error.html @@ -1,28 +1,31 @@ {% extends "rest_framework/api.html" %} -{% load i18n %} +{% load i18n staticfiles %} + +{% block title %}{{ name }} · {% trans 'Ansible Tower' %}{% endblock %} {% block style %} {{ block.super }} {% endblock %} -{% block branding_title %}{% endblock %} - -{% block breadcrumbs %} - +{% block navbar %} + {% endblock %} + +{% block breadcrumbs %}{% endblock %} diff --git a/awx/templates/rest_framework/api.html b/awx/templates/rest_framework/api.html index 2129ca2bc8..c40d81ff63 100644 --- a/awx/templates/rest_framework/api.html +++ b/awx/templates/rest_framework/api.html @@ -1,254 +1,66 @@ {% extends 'rest_framework/base.html' %} -{% load i18n %} +{% load i18n staticfiles %} {% block title %}{{ name }} · {% trans 'Ansible Tower REST API' %}{% endblock %} +{% block bootstrap_theme %} + + +{% endblock %} + {% block style %} + {{ block.super }} - - {% endblock %} -{% block branding %} - {% block branding_title %}{% trans 'REST API' %}{% endblock %} -{% endblock %} - -{% block userlinks %} - {% if user.is_authenticated %} -
  • - {{ user }} -
  • - {% endif %} -{% endblock %} - -{% block footer %} - +{% block navbar %} + {% endblock %} {% block script %} + + {{ block.super }} - + {% endblock %} diff --git a/awx/templates/rest_framework/base.html b/awx/templates/rest_framework/base.html index c34c4a9e36..6ed3cd456f 100644 --- a/awx/templates/rest_framework/base.html +++ b/awx/templates/rest_framework/base.html @@ -1,235 +1,270 @@ {# Copy of base.html from rest_framework with minor Ansible Tower change. #} -{% load url from future %} +{% load staticfiles %} {% load rest_framework %} +{% load i18n %} - - {% block head %} - - {% block meta %} - - - {% endblock %} - - {% block title %}Django REST framework{% endblock %} - - {% block style %} - {% block bootstrap_theme %} - - - {% endblock %} - - - {% endblock %} + + {% block head %} + {% block meta %} + + {% endblock %} - - + {% block title %}Django REST framework{% endblock %} -
    + {% block style %} + {% block bootstrap_theme %} + + + {% endblock %} + + + {% endblock %} + + {% endblock %} + + +{% block body %} + + +
    {% block navbar %} - + {# div#push added for Ansible Tower. #} +
    +
    + + {% block script %} + + + - {% endblock %} - + + {% endblock %} + + {% if filter_form %} + {{ filter_form }} + {% endif %} + + +{% endblock %} diff --git a/awx/ui/client/assets/cowsay-about.html b/awx/ui/client/assets/cowsay-about.html deleted file mode 100644 index b1cbcf9d24..0000000000 --- a/awx/ui/client/assets/cowsay-about.html +++ /dev/null @@ -1,29 +0,0 @@ - -
    -
    -
    -
    -
    - ________________
    -/  Tower Version \
    -\/
    - ----------------
    -        \   ^__^
    -         \  (oo)\_______
    -            (__)\     A)\/\
    -                ||----w |
    -                ||     ||
    -
    -
    -
    -
    -
    -

    Copyright 2015. All rights reserved.

    -

    Ansible and Ansible Tower are registered trademarks of Red Hat, Inc.

    -
    - -
    -

    Visit Ansible.com for more information.

    -

    -
    -
    diff --git a/awx/ui/client/assets/favicon.ico b/awx/ui/client/assets/favicon.ico index f53629b961..5003cda615 100644 Binary files a/awx/ui/client/assets/favicon.ico and b/awx/ui/client/assets/favicon.ico differ diff --git a/awx/ui/client/assets/fontcustom/.fontcustom-manifest.json b/awx/ui/client/assets/fontcustom/.fontcustom-manifest.json new file mode 100644 index 0000000000..06fddffd64 --- /dev/null +++ b/awx/ui/client/assets/fontcustom/.fontcustom-manifest.json @@ -0,0 +1,50 @@ +{ + "checksum": { + "previous": "e4442d278bfc4c1a673bdd29512213a18cfaf74decd9bb21ecd698b4860e7453", + "current": "e4442d278bfc4c1a673bdd29512213a18cfaf74decd9bb21ecd698b4860e7453" + }, + "fonts": [ + "..//fontcustom_e4442d278bfc4c1a673bdd29512213a1.ttf", + "..//fontcustom_e4442d278bfc4c1a673bdd29512213a1.svg", + "..//fontcustom_e4442d278bfc4c1a673bdd29512213a1.woff", + "..//fontcustom_e4442d278bfc4c1a673bdd29512213a1.eot" + ], + "glyphs": { + "fontcustom_fbf6cfce71d2c35351b84596defbfd01": { + "codepoint": 61696, + "source": "./fontcustom_fbf6cfce71d2c35351b84596defbfd01.svg" + } + }, + "options": { + "autowidth": false, + "config": false, + "css_selector": ".icon-{{glyph}}", + "debug": false, + "font_ascent": 448, + "font_descent": 64, + "font_design_size": 16, + "font_em": 512, + "font_name": "fontcustom", + "force": true, + "input": { + "templates": ".", + "vectors": "." + }, + "no_hash": false, + "output": { + "css": "../", + "fonts": "../", + "preview": "../" + }, + "preprocessor_path": null, + "quiet": false, + "templates": [ + "css", + "preview" + ] + }, + "templates": [ + "../fontcustom.css", + "../fontcustom-preview.html" + ] +} \ No newline at end of file diff --git a/awx/ui/client/assets/fontcustom/fontcustom-preview.html b/awx/ui/client/assets/fontcustom/fontcustom-preview.html index 385f401107..becd88eca8 100644 --- a/awx/ui/client/assets/fontcustom/fontcustom-preview.html +++ b/awx/ui/client/assets/fontcustom/fontcustom-preview.html @@ -141,11 +141,11 @@ @font-face { font-family: "fontcustom"; - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot"); - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot?#iefix") format("embedded-opentype"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff") format("woff"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf") format("truetype"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg#fontcustom") format("svg"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot?#iefix") format("embedded-opentype"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff") format("woff"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf") format("truetype"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg#fontcustom") format("svg"); font-weight: normal; font-style: normal; } @@ -153,15 +153,21 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: "fontcustom"; - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg#fontcustom") format("svg"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg#fontcustom") format("svg"); } } [data-icon]:before { content: attr(data-icon); } [data-icon]:before, - .icon-google:before, -.icon-saml-02:before { + .icon-activity-stream:before, +.icon-google:before, +.icon-launch:before, +.icon-launch-circle:before, +.icon-launch-new:before, +.icon-launch2:before, +.icon-saml-02:before, +.icon-user:before { display: inline-block; font-family: "fontcustom"; font-style: normal; @@ -176,8 +182,14 @@ font-smoothing: antialiased; } - .icon-google:before { content: "\f100"; } + .icon-activity-stream:before { content: "\f102"; } +.icon-google:before { content: "\f100"; } +.icon-launch:before { content: "\f103"; } +.icon-launch-circle:before { content: "\f105"; } +.icon-launch-new:before { content: "\f107"; } +.icon-launch2:before { content: "\f106"; } .icon-saml-02:before { content: "\f101"; } +.icon-user:before { content: "\f104"; } @@ -193,11 +205,24 @@
    -

    fontcustom contains 2 glyphs:

    +

    fontcustom contains 8 glyphs:

    Toggle Preview Characters
    +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    +
    PpPpPpPpPpPpPpPpPpPp @@ -211,6 +236,58 @@
    +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    + +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    + +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    + +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    +
    PpPpPpPpPpPpPpPpPpPp @@ -224,6 +301,19 @@
    +
    +
    + PpPpPpPpPpPpPpPpPpPp +
    +
    + 12141618212436486072 +
    +
    + + +
    +
    +
    Made with love using Font Custom. diff --git a/awx/ui/client/assets/fontcustom/fontcustom.css b/awx/ui/client/assets/fontcustom/fontcustom.css index 1fead6332d..39ab124bda 100644 --- a/awx/ui/client/assets/fontcustom/fontcustom.css +++ b/awx/ui/client/assets/fontcustom/fontcustom.css @@ -4,11 +4,11 @@ @font-face { font-family: "fontcustom"; - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot"); - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot?#iefix") format("embedded-opentype"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff") format("woff"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf") format("truetype"), - url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg#fontcustom") format("svg"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot?#iefix") format("embedded-opentype"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff") format("woff"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf") format("truetype"), + url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg#fontcustom") format("svg"); font-weight: normal; font-style: normal; } @@ -16,15 +16,21 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: "fontcustom"; - src: url("./fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg#fontcustom") format("svg"); + src: url("./fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg#fontcustom") format("svg"); } } [data-icon]:before { content: attr(data-icon); } [data-icon]:before, +.icon-activity-stream:before, .icon-google:before, -.icon-saml-02:before { +.icon-launch:before, +.icon-launch-circle:before, +.icon-launch-new:before, +.icon-launch2:before, +.icon-saml-02:before, +.icon-user:before { display: inline-block; font-family: "fontcustom"; font-style: normal; @@ -39,5 +45,11 @@ font-smoothing: antialiased; } +.icon-activity-stream:before { content: "\f102"; } .icon-google:before { content: "\f100"; } +.icon-launch:before { content: "\f103"; } +.icon-launch-circle:before { content: "\f105"; } +.icon-launch-new:before { content: "\f107"; } +.icon-launch2:before { content: "\f106"; } .icon-saml-02:before { content: "\f101"; } +.icon-user:before { content: "\f104"; } diff --git a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot b/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot deleted file mode 100644 index 2bdff030a7..0000000000 Binary files a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot and /dev/null differ diff --git a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg b/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg deleted file mode 100644 index dace3c481c..0000000000 --- a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - -Created by FontForge 20150401 at Fri Sep 25 14:52:01 2015 - By John Mitchell -Copyright (c) 2015, John Mitchell - - - - - - - - - - diff --git a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf b/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf deleted file mode 100644 index edfa1ff528..0000000000 Binary files a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf and /dev/null differ diff --git a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff b/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff deleted file mode 100644 index dc683eb4fa..0000000000 Binary files a/awx/ui/client/assets/fontcustom/fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff and /dev/null differ diff --git a/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot new file mode 100644 index 0000000000..739e0b64f5 Binary files /dev/null and b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot differ diff --git a/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg new file mode 100644 index 0000000000..f1fe2ac03d --- /dev/null +++ b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg @@ -0,0 +1,108 @@ + + + + + +Created by FontForge 20150401 at Thu Nov 12 14:46:50 2015 + By John Mitchell +Copyright (c) 2015, John Mitchell + + + + + + + + + + + + + + + + diff --git a/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf new file mode 100644 index 0000000000..5d151b75b0 Binary files /dev/null and b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf differ diff --git a/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff new file mode 100644 index 0000000000..4c79bee685 Binary files /dev/null and b/awx/ui/client/assets/fontcustom/fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff differ diff --git a/awx/ui/client/assets/fontcustom/new_icons/.fontcustom-manifest.json b/awx/ui/client/assets/fontcustom/new_icons/.fontcustom-manifest.json index 3f5b945913..3177b52034 100644 --- a/awx/ui/client/assets/fontcustom/new_icons/.fontcustom-manifest.json +++ b/awx/ui/client/assets/fontcustom/new_icons/.fontcustom-manifest.json @@ -1,27 +1,51 @@ { "checksum": { - "previous": "037607f2fd8b86abb9de4b13a05fde6090c547d09c5428dac65a185505077e6a", - "current": "037607f2fd8b86abb9de4b13a05fde6090c547d09c5428dac65a185505077e6a" + "previous": "d77a9996ed04d45b02f5c06874cd36db7f5daa9833b1a6c36bef7029a767a34f", + "current": "d77a9996ed04d45b02f5c06874cd36db7f5daa9833b1a6c36bef7029a767a34f" }, "fonts": [ - "..//fontcustom_037607f2fd8b86abb9de4b13a05fde60.ttf", - "..//fontcustom_037607f2fd8b86abb9de4b13a05fde60.svg", - "..//fontcustom_037607f2fd8b86abb9de4b13a05fde60.woff", - "..//fontcustom_037607f2fd8b86abb9de4b13a05fde60.eot" + "..//fontcustom_d77a9996ed04d45b02f5c06874cd36db.ttf", + "..//fontcustom_d77a9996ed04d45b02f5c06874cd36db.svg", + "..//fontcustom_d77a9996ed04d45b02f5c06874cd36db.woff", + "..//fontcustom_d77a9996ed04d45b02f5c06874cd36db.eot" ], "glyphs": { + "activity-stream": { + "codepoint": 61698, + "source": "./activity-stream.svg" + }, "google": { "codepoint": 61696, "source": "./google.svg" }, + "launch": { + "codepoint": 61699, + "source": "./launch.svg" + }, + "launch-circle": { + "codepoint": 61701, + "source": "./launch-circle.svg" + }, + "launch-new": { + "codepoint": 61703, + "source": "./launch-new.svg" + }, + "launch2": { + "codepoint": 61702, + "source": "./launch2.svg" + }, "saml-02": { "codepoint": 61697, "source": "./saml-02.svg" + }, + "user": { + "codepoint": 61700, + "source": "./user.svg" } }, "options": { "autowidth": false, - "config": "fontcustom.yml", + "config": false, "css_selector": ".icon-{{glyph}}", "debug": false, "font_ascent": 448, @@ -29,7 +53,7 @@ "font_design_size": 16, "font_em": 512, "font_name": "fontcustom", - "force": false, + "force": true, "input": { "templates": ".", "vectors": "." diff --git a/awx/ui/client/assets/fontcustom/new_icons/activity-stream.svg b/awx/ui/client/assets/fontcustom/new_icons/activity-stream.svg new file mode 100644 index 0000000000..2915f904da --- /dev/null +++ b/awx/ui/client/assets/fontcustom/new_icons/activity-stream.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/awx/ui/client/assets/fontcustom/new_icons/fontcustom.yml b/awx/ui/client/assets/fontcustom/new_icons/fontcustom.yml deleted file mode 100644 index 69a38ba71b..0000000000 --- a/awx/ui/client/assets/fontcustom/new_icons/fontcustom.yml +++ /dev/null @@ -1,96 +0,0 @@ -# ============================================================================= -# Font Custom Configuration -# This file should live in the directory where you run `fontcustom compile`. -# For more info, visit . -# ============================================================================= - - -# ----------------------------------------------------------------------------- -# Project Info -# ----------------------------------------------------------------------------- - -# The font's name. Also determines the file names of generated templates. -#font_name: icons - -# Format of CSS selectors. {{glyph}} is substituted for the glyph name. -#css_selector: .i-{{glyph}} - -# Generate fonts without asset-busting hashes. -#no_hash: true - -# Encode WOFF fonts into the generated CSS. -#base64: true - -# Forces compilation, even if inputs have not changed -#force: true - -# Display (possibly useful) debugging messages. -#debug: true - -# Hide status messages. -#quiet: true - - -# ----------------------------------------------------------------------------- -# Input / Output Locations -# You can save generated fonts, CSS, and other files to different locations -# here. Font Custom can also read input vectors and templates from different -# places. -# -# NOTE: -# - Be sure to preserve the whitespace in these YAML hashes. -# - INPUT[:vectors] and OUTPUT[:fonts] are required. Everything else is -# optional. -# - Specify output locations for custom templates by including their file -# names as the key. -# ----------------------------------------------------------------------------- - -#input: -# vectors: my/vectors -# templates: my/templates - -#output: -# fonts: app/assets/fonts -# css: app/assets/stylesheets -# preview: app/views/styleguide -# my-custom-template.yml: path/to/template/output - - -# ----------------------------------------------------------------------------- -# Templates -# A YAML array of templates and files to generate alongside fonts. Custom -# templates should be saved in the INPUT[:templates] directory and referenced -# by their base file name. -# -# For Rails and Compass templates, set `preprocessor_path` as the relative -# path from OUTPUT[:css] to OUTPUT[:fonts]. By default, these are the same -# directory. -# -# Included in Font Custom: preview, css, scss, scss-rails -# Default: css, preview -# ----------------------------------------------------------------------------- - -#templates: -#- scss-rails -#- preview -#- my-custom-template.yml - -#preprocessor_path: ../fonts/ - - -# ----------------------------------------------------------------------------- -# Font Settings (defaults shown) -# ----------------------------------------------------------------------------- - -# Size (in pica points) for which your font is designed. -#font_design_size: 16 - -# The em size. Setting this will scale the entire font to the given size. -#font_em: 512 - -# The font's ascent and descent. Used to calculate the baseline. -#font_ascent: 448 -#font_descent: 64 - -# Horizontally fit glyphs to their individual vector widths. -#autowidth: false diff --git a/awx/ui/client/assets/fontcustom/new_icons/launch.svg b/awx/ui/client/assets/fontcustom/new_icons/launch.svg new file mode 100644 index 0000000000..22eec6bab0 --- /dev/null +++ b/awx/ui/client/assets/fontcustom/new_icons/launch.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/awx/ui/client/assets/fontcustom/new_icons/user.svg b/awx/ui/client/assets/fontcustom/new_icons/user.svg new file mode 100644 index 0000000000..7b38db83e6 --- /dev/null +++ b/awx/ui/client/assets/fontcustom/new_icons/user.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/awx/ui/client/assets/tower-logo-header.svg b/awx/ui/client/assets/tower-logo-header.svg new file mode 100644 index 0000000000..61e1de41da --- /dev/null +++ b/awx/ui/client/assets/tower-logo-header.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/awx/ui/client/assets/tower-logo-login.svg b/awx/ui/client/assets/tower-logo-login.svg new file mode 100644 index 0000000000..2db9414ecd --- /dev/null +++ b/awx/ui/client/assets/tower-logo-login.svg @@ -0,0 +1 @@ +tower-logo-login2 \ No newline at end of file diff --git a/awx/ui/client/legacy-styles/ansible-ui.less b/awx/ui/client/legacy-styles/ansible-ui.less index 3f08896422..f5b6f42c9a 100644 --- a/awx/ui/client/legacy-styles/ansible-ui.less +++ b/awx/ui/client/legacy-styles/ansible-ui.less @@ -36,13 +36,15 @@ @import "breadcrumbs.less"; @import "stdout.less"; @import "lists.less"; +@import "forms.less"; @import "dashboard.less"; @import "jPushMenu.less"; @import "survey-maker.less"; -@import "portal.less"; @import "text-label.less"; @import "./bootstrap-datepicker.less"; - +@import "awx/ui/client/src/shared/branding/colors.default.less"; +// Bootstrap default overrides +@import "awx/ui/client/src/shared/bootstrap-settings.less"; /* Bootstrap fix that's causing a right margin to appear whenver a modal is opened */ body.modal-open { @@ -78,6 +80,12 @@ a.red-txt:active { text-overflow: ellipsis; } +.name-column { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + blockquote { font-size: 14px; } @@ -97,16 +105,18 @@ a:focus { color: @blue-dark; text-decoration: none; } - +.btn{ + text-transform: uppercase; +} /* Old style TB default button with grey background */ .btn-grey { - color: #333; - background-color: #ccc; - border-color: #ccc; + color: @default-data-txt; + background-color: @d7grey; + border-color: @d7grey; } .btn-grey:hover { - background-color: #FFF; + background-color: @default-bg; } #cowsay { @@ -142,11 +152,11 @@ a:focus { /* Bring primary (blue) buttons in line with link colors */ .btn-primary { - background-color: @blue-link; + background-color: @default-link; } .btn-primary:hover { - background-color: @blue-dark; + background-color: @default-link-hov; } /* List Actions column */ @@ -193,6 +203,10 @@ i:active, } } +.IdleModal-remainingSeconds{ + color: @default-err; +} + #configure-schedules-tab { position: relative; top: 0; @@ -213,7 +227,7 @@ i:active, height: 46px; padding-top: 10px; text-align: right; - border-top: 1px solid #A6C9E2; + border-top: 1px solid @default-border; margin-top: 5px; a { margin-right: 8px; @@ -226,16 +240,16 @@ i:active, top: 0; left: 0; display: none; - border: 1px solid #e5e5e5; + border: 1px solid @default-border; border-radius: 4px; - box-shadow: 3px 3px 6px 0 #666; + box-shadow: 3px 3px 6px 0 @default-dark; padding: 0 10px 15px 8px; background-color: @white; z-index: 200; } #configure-schedules-title { - border-bottom: 1px solid #e5e5e5; + border-bottom: 1px solid @default-border; padding-bottom: 8px; margin-bottom: 10px; margin-top: 0; @@ -316,8 +330,8 @@ i:active, #home_groups_table .actions .cancel { padding-right: 3px; } .success-badge { - color: #ffffff; - background-color: #5cb85c; + color: @default-bg; + background-color: @default-succ; } .bold-text .checkbox-inline { @@ -341,7 +355,7 @@ textarea.allowresize { width: 138px; height: 50px; text-align:center; - color: #eee; + color: @d7grey; background-color: @black; border: 1px solid @grey; border-radius: 6px; @@ -396,6 +410,10 @@ textarea.allowresize { /* TB tooltip overrides */ .popover-content { width: 100%; + + .table>tbody>tr>td { + border-top: 1px solid @b7grey; + } } h3.popover-title, .popover-content, .popover-content blockquote, .popover-content a { font-size: 12px; @@ -406,11 +424,44 @@ textarea.allowresize { .popover-title { padding-top: 5px; padding-bottom: 5px; + background-color: @default-interface-txt; + color: @default-bg; + font-weight: 600; + border-bottom: none; + text-transform: uppercase; } .popover { z-index: 2000; min-width: 200px; max-width: 325px; + background-color: @default-interface-txt; + color: @default-bg; //white + text-align: left; + + code { + color: @default-data-txt; + background-color: @default-white-button-bord; + line-height: 18px; + } + + a { + color: @default-warning; + &:hover { + color: @default-warning-hov; + } + } + } + .popover.right>.arrow:after { + border-right-color: @default-interface-txt; + } + .popover.left>.arrow:after { + border-left-color: @default-interface-txt; + } + .popover.bottom>.arrow:after { + border-bottom-color: @default-interface-txt; + } + .popover.top>.arrow:after { + border-top-color: @default-interface-txt; } .popover pre { white-space: pre-wrap; @@ -427,10 +478,17 @@ textarea.allowresize { border-radius: 3px; } } - .tooltip { - z-index: 2050; - opacity: 1.0; - } + +.tooltip { + z-index: 2050; + opacity: 1.0; +} + +.tooltip-inner { + padding: 10px; + text-align:left; + max-width: 150px; +} .alert { margin-top: 15px; @@ -438,7 +496,7 @@ textarea.allowresize { } hr { - border-color: #e3e3e3; + border-color: @default-border; } .help { @@ -490,13 +548,13 @@ td.actions { } .btn .caret { - border-top-color: #696969; + border-top-color: @default-icon; } .btn-light { - color: #333; - background-color: #ddd; - border-color: #ddd; + color: @default-data-txt; + background-color: @d7grey; + border-color: @d7grey; } .refresh-grp { @@ -513,13 +571,9 @@ td.actions { } .btn-light:hover { - color: #333; - background-color: #ccc; - border-color: #ccc; -} - -.ssh-key-field, .mono-space { - font-family: Fixed, monospace; + color: @d7grey; + background-color: @default-icon; + border-color: @default-icon; } /* Make a div or any element behave like pre. Use in conjunction with .mono-space */ @@ -549,7 +603,7 @@ dd { #navbar-container, .main-menu { width: 100%; - background-color: @black; + background-color: @default-dark; } .text-justify { @@ -568,7 +622,7 @@ dd { .help-link:hover, .ui-widget-content a.help-link:hover { - color: @black; + color: @default-icon; text-decoration: none; } @@ -594,16 +648,6 @@ dd { margin-bottom: 10px; } -.aw-form-well { - border: 1px solid @grey; - padding: 9px; - border-radius: 4px; -} - -.form-group { - margin-bottom: 25px; -} - .form-cancel { float: right; margin-right: 10px; @@ -637,12 +681,27 @@ dd { /* Outline required fields in Red when there is an error */ .form-control.ng-dirty.ng-invalid, .form-control.ng-dirty.ng-invalid:focus { - border-color: rgba(255, 88, 80, 0.8); + border-color: @default-err; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 5px rgba(255, 88, 80, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 5px rgba(255, 88, 80, 0.6); } + .form-control.ng-dirty.ng-invalid + .select2 .select2-selection, + .form-control.ng-dirty.ng-invalid + .select2 .select2-selection:focus { + border-color: @default-err !important; + outline: 0 !important; + box-shadow: none !important; + } + + .form-control.ng-dirty.ng-pristine { + border-color: @d7grey; + box-shadow: none; + } + + .form-control.ng-dirty.ng-pristine:focus { + border-color: @default-link; + } /* For some reason TB 3 RC1 does not provide an input-mini */ .input-mini { @@ -701,11 +760,23 @@ legend { margin-bottom: 7px; } - .pagination > li > a { + .pagination>li>a, + .pagination>li>span { + border: 1px solid @grey-border; padding: 3px 6px; font-size: 10px; } + .pagination li { + a#next-page { + border-radius: 0 4px 4px 0; + } + + a#previous-page { + border-radius: 4px 0 0 4px; + } + } + .modal-body { .pagination { margin-top: 15px; @@ -717,10 +788,20 @@ legend { padding-bottom: 0; } .pagination > .active > a { - background-color: #fff; + background-color: @default-bg; color: #428bca; border-color: none; - border: 1px solid #428bca; + border: 1px solid @default-link; + } + .alert { + padding: 0; + border: none; + margin: 0; + } + .alert-danger { + background-color: @default-bg; + border: none; + color: @default-interface-txt; } } @@ -787,28 +868,6 @@ select.page-size { vertical-align: middle; } - #search_value_input { - padding-right: 25px; - } - - .search-reset-start { - color: @grey; - float: right; - position: relative; - top: -25px; - left: -10px; - z-index: 10; - } - - .search-reset-start:hover { - cursor: pointer; - color: @black; - } - - .ui-widget-content a.search-reset-start { - color: @grey; - } - #search-widget-spacer { height: 20px; } @@ -820,10 +879,10 @@ select.page-size { margin-bottom: 15px; font-size: 14px; font-weight: bold; - background-color: #f5f5f5; - border: 1px solid #d8d8d8; + background-color: @default-no-items-bord; + border: 1px solid @d7grey; border-radius: 6px; - box-shadow: 3px 3px 4px 0 #808080; + box-shadow: 3px 3px 4px 0 @default-icon; .breadcrumb { display: inline-block; @@ -878,7 +937,6 @@ select.page-size { */ /* end */ - .greeting { padding-right: 22px; } @@ -901,10 +959,6 @@ select.field-mini-height { font-size: 10.5px; } -.ask-checkbox { - margin-left: 10px; -} - .no-padding { padding: 0; margin: 0; @@ -922,6 +976,10 @@ input[type="checkbox"].checkbox-no-label { .checkbox-inline, .radio-inline { margin-right: 10px; } + + .checkbox-inline.stack-inline { + display: block; + } } .checkbox-options { @@ -931,16 +989,12 @@ input[type="checkbox"].checkbox-no-label { /* Display list actions next to search widget */ .list-actions { - text-align: right; - margin-bottom: 10px; + text-align: right; + margin-bottom: 20px; - button { - margin-left: 4px; - } - - .fa-lg { - vertical-align: -8%; - } + .fa-lg { + vertical-align: -8%; + } } .jqui-accordion { @@ -973,7 +1027,7 @@ input[type="checkbox"].checkbox-no-label { .table-hover tbody tr:hover > td, .table-hover tbody tr:hover > th { - background-color: #fff; + background-color: @default-bg; } .table-hover-inverse tbody tr:hover > td, @@ -1008,11 +1062,11 @@ input[type="checkbox"].checkbox-no-label { .table-summary thead > tr > td, .table-summary tbody > tr > td, .table-summary tfoot > tr > td { - border-top: 1px solid #ccc; + border-top: 1px solid @d7grey; } .table-summary thead > tr > th { - border-bottom: 1px solid #ccc; + border-bottom: 1px solid @d7grey; } /* Table without row borders */ @@ -1043,6 +1097,12 @@ input[type="checkbox"].checkbox-no-label { } } +.table.table-condensed.flyout { + thead>tr>th { + border: none; + } +} + /* Table info rows */ @@ -1061,7 +1121,7 @@ input[type="checkbox"].checkbox-no-label { .active-failures-true a:active, .job-failed, .job-error { - color: #da4f49; + color: @default-err; } .icon-failures-true a:hover { @@ -1070,7 +1130,7 @@ input[type="checkbox"].checkbox-no-label { .job-failures-true { padding-top: 5px; - color: #da4f49; + color: @default-err; } .job-event-status, @@ -1093,13 +1153,13 @@ input[type="checkbox"].checkbox-no-label { .icon-job-changed:before, .icon-job-ok:before, .icon-job-OK:before, + .icon-job-failed:before, .icon-job-skipped:before { content: "\f111"; } .icon-job-stopped:before, .icon-job-error:before, - .icon-job-failed:before, .icon-job-canceled:before, .icon-job-unreachable:before { content: "\f06a"; @@ -1176,13 +1236,6 @@ input[type="checkbox"].checkbox-no-label { color: @warning; } - .badge { - padding: 2px 3px 3px 4px; - font-size: 10px; - font-weight: normal; - line-height: 1; - } - /* job_events page */ #jobevents_table { @@ -1204,12 +1257,12 @@ input[type="checkbox"].checkbox-no-label { /* Inventory job status badge */ .failures-true { background-color: @red; - color: #fff; + color: @default-bg; } .failures-false { background-color: @green; - color: #fff; + color: @default-bg; } /* Cloud inventory status. i.e. inventory_source.status values */ @@ -1306,11 +1359,11 @@ input[type="checkbox"].checkbox-no-label { /* end */ .field-success { - color: #5bb75b; + color: @default-succ; } .field-success input { - border-color: #5bb75b; + border-color: @default-succ; } .field-failure { @@ -1382,8 +1435,8 @@ input[type="checkbox"].checkbox-no-label { input[readonly], textarea[readonly] { - background-color: #FBFBFB; - border: 1px solid #E0E0E0; + background-color: @default-border; + border: 1px solid @default-icon; } .fa-external-link { @@ -1392,13 +1445,13 @@ input[type="checkbox"].checkbox-no-label { } .free-button { - background-color: #ff5850; - border: 1px solid #ff5850; + background-color: @default-err; + border: 1px solid @default-err; color: @white; } .free-button:hover { - background-color: #E64F48; - border: 1px solid #E64F48; + background-color: @default-err-hov; + border: 1px solid @default-err-hov; color: @white; } } @@ -1432,10 +1485,6 @@ input[type="checkbox"].checkbox-no-label { /* Inventory Edit */ - #groups-container.col-lg-6 { - padding-right: 7px; - } - #hosts-container.col-lg-6 { padding-left: 7px; padding-right: 17px; @@ -1449,7 +1498,7 @@ input[type="checkbox"].checkbox-no-label { #inventories_table i[class*="icon-job-"], #home_groups_table i[class*="icon-job-"] { - margin-left: 10px; + margin-left: 5px; } .selected { @@ -1464,8 +1513,8 @@ input[type="checkbox"].checkbox-no-label { .active-row { background-color: @white; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; + border-bottom: 1px solid @default-tertiary-bg; + border-right: 1px solid @default-tertiary-bg; } .node-toggle, .node-no-toggle { @@ -1558,6 +1607,12 @@ a.btn-disabled:hover { .parse-select .parse-label { margin-left: 3px; + color: @field-input-text; + } + + .parse-label { + color: @field-input-text; + font-weight: normal; } .external-editor-link { @@ -1583,7 +1638,7 @@ a.btn-disabled:hover { } .list-header .icon-sort { - color: #ccc; + color: @default-icon; } .list-header .icon-sort-down, @@ -1622,7 +1677,7 @@ tr td button i { margin-top: 0; margin-bottom: 10px; font-weight: bold; - border-bottom: 1px solid #d8d8d8; + border-bottom: 1px solid @default-border; } .modal-backdrop, @@ -1638,15 +1693,15 @@ tr td button i { /* overrides to TB modal */ .modal-header { - padding: 15px 10px; - color: #2078be; - border-bottom: 1px solid #eee; - -webkit-border-top-right-radius: 3px; - -moz-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-top-left-radius: 3px; - -moz-border-top-left-radius: 3px; - border-top-left-radius: 3px; + color: @default-interface-txt; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + border: none; + padding: 12px 14px 0 12px; } .modal { @@ -1665,13 +1720,18 @@ tr td button i { .modal-header h3 { margin: 0; - font-size: 22px; - font-weight: bold; text-rendering: optimizeLegibility; + font-size: 15px; + color: @default-interface-txt; + font-weight: bold; + line-height: normal; + font-family: 'Open Sans', helvetica; + text-transform: uppercase; } .modal-body { - padding-top: 30px; + padding: 20px 14px 7px 14px; + min-height: 120px; } #prompt-modal .modal-body { @@ -1682,6 +1742,30 @@ tr td button i { padding: 5px 10px 0 10px; } +.modal-footer { + padding: .3em 1em .5em .4em; + border: none; + + .btn.btn-primary { + text-transform: uppercase; + background-color: @default-succ; + border-color: @default-succ; + padding: 5px 15px; + margin: .5em .4em .5em 0; + cursor: pointer; + + &:hover { + background-color: @default-succ-hov; + border-color: @default-succ-hov; + } + + &:disabled { + background-color: @default-succ-disabled; + border-color: @default-succ-disabled; + } + } +} + /* form navigation */ .navigation-buttons { height: 40px; @@ -1750,33 +1834,6 @@ tr td button i { } } -/* Activity Stream Widget */ - - #stream-container { - display: none; - border-radius: 8px; - z-index: 20; /* has to be greater than tree selector */ - - .nav-path { - margin-bottom: 15px; - margin-top: 5px; - } - - padding-left: 10px; - padding-right: 10px; - } - - #stream-content { - border: 1px solid @grey; - border-radius: 8px; - padding: 8px; - - h5 { - margin-top: 0; - margin-bottom: 20px; - } - } - /* job stdout */ #pre-container { @@ -1853,10 +1910,6 @@ tr td button i { padding-left: 0; } - .list-actions button, .list-actions .checkbox-inline { - margin-top: 10px; - } - .label-text { text-align: left; } @@ -1915,10 +1968,6 @@ tr td button i { margin-bottom: 5px; } - .list-actions button, .list-actions .checkbox-inline { - margin-top: 10px; - } - .group-name { width: 80%; } @@ -1941,22 +1990,31 @@ tr td button i { padding-right: 15px; } + .list-actions { + text-align: left; + } + } .nvtooltip { border-radius: 4px; + padding: 3px 10px; } .nvtooltip td.value { padding-right: 0px; } +.nvtooltip p { + padding: 3px 0px; +} + .nvd3 g.nv-groups path.nv-line { stroke-width: 3px; } .stdout-panel-body { - background-color: #e9e9e9; + background-color: @default-list-header-bg; } .job-stdout-panel { @@ -2005,11 +2063,215 @@ tr td button i { } } -button.dropdown-toggle, -.input-group-btn { - z-index: 1; -} - #login-modal-body { padding-bottom: 5px; } + +.tooltip.bottom .tooltip-arrow { + border-bottom-color: @default-interface-txt; +} + + +.tooltip.top .tooltip-arrow { + border-top-color: @default-interface-txt; +} + +.tooltip.left .tooltip-arrow { + border-left-color: @default-interface-txt; +} + +.tooltip.right .tooltip-arrow { + border-right-color: @default-interface-txt; +} + +.tooltip.Tooltip.fade.bottom.in { + opacity: 1; + padding-top: 4px; +} + +.tooltip.in { + opacity: 1; +} + +.tooltip-inner { + background-color: @default-interface-txt; +} + +.tooltip-inner--logOut { + margin-left: -15px !important; +} + +.modal { + transition: all 0.3s ease-out !important; +} + +.modal.fade .modal-dialog { + transform: translate(0, 0); + margin: 100px auto; +} + +.modal-backdrop, .modal-backdrop.fade.in { + opacity: .25; +} + +.form-control { + border-color: @d7grey; + background-color: @default-no-items-bord; + color: @default-data-txt; + transition: border-color 0.3s; + box-shadow: none; + font-size: 14px; + font-family: 'Open Sans', sans-serif; +} + +.form-control + .select2 .select2-selection { + border-color: @d7grey !important; + background-color: #fcfcfc !important; + color: @default-data-txt !important; + transition: border-color 0.3s !important; + box-shadow: none !important; +} + +.form-control:active, .form-control:focus { + box-shadow: none; + border-color: @default-link; +} + +.form-control:active + .select2 .select2-selection, .form-control:focus + .select2 .select2-selection { + box-shadow: none !important; + border-color: @default-link !important; +} + +.form-control.ng-dirty.ng-invalid, .form-control.ng-dirty.ng-invalid:focus { + box-shadow: none; +} + +.form-control.ng-dirty.ng-invalid + .select2 .select2-selection, .form-control.ng-dirty.ng-invalid:focus + .select2 .select2-selection { + box-shadow: none !important; +} + +.error { + opacity: 1; + transition: opacity 0.2s; +} + +.error.ng-hide-add { + display: none; +} + +.error.ng-hide { + opacity: 0; +} + +/* Overwrite select2 base styles for single/multiple selects so that match up with other form elements. Also overwrite disabled styles. */ +.select2-container--disabled,.select2-container--disabled .select2-selection--single,.select2-container--disabled .select2-selection--multiple { + cursor: not-allowed !important; +} + +.select2-container--disabled { + opacity: .35; +} + +.select2-container--default .select2-selection--single { + background-color: @field-secondary-bg; + border: 1px solid @d7grey; + border-radius: 4px; +} + +.select2-container--default .select2-selection--multiple { + background-color: @field-secondary-bg; + border: 1px solid @d7grey; + border-radius: 4px; + cursor: text; +} + +body.is-modalOpen { + overflow: hidden; +} + +input[type=file]:focus, input[type=radio]:focus, input[type=checkbox]:focus { + outline: 0 !important; +} + +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + background-color: @d7grey; + color: @default-bg; + border: 0; +} + +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + border-color: @default-succ; +} + +a { + color: @default-link; +} + +a:hover { + color: @default-link-hov; +} + +.form-control:active, .form-control:focus { + border-color: @default-link; +} + +.nv-axislabel { + font-weight: bold !important; + fill: @db-graph-axis-label !important; + font-family: 'Open Sans' !important; +} + +.nv-axis text { + fill: @db-graph-axis-label !important; //rgb(169, 178, 189); + font-family: 'Open Sans' !important; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding-left: 0px; + border-left-width: 0px; + border-bottom-width: 0px; + border-top-width: 0px; + padding-right: 10px; + border-right-width: 0px; + background-color: @default-link; + color: @default-bg; + border-radius: 5px; + line-height: 21px; + font-size: 13px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 8px !important; + padding: 0 6px; + color: @default-bg !important; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + background-color: @default-link; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + background-color: @default-err; +} + +.dropdown-menu>li>a { + padding: 3px 10px; +} + +#scheduled-jobs-tab .List-header { + display: none; +} + +.ui-widget { + font-family: 'Open Sans'; +} + +.modal-body .alert { + padding: 10px; +} diff --git a/awx/ui/client/legacy-styles/forms.less b/awx/ui/client/legacy-styles/forms.less new file mode 100644 index 0000000000..b77d3738a2 --- /dev/null +++ b/awx/ui/client/legacy-styles/forms.less @@ -0,0 +1,611 @@ +/********************************************* + * Copyright (c) 2016 Ansible, Inc. + * + * Forms.less + * + * custom styles for generated forms + * + */ + +@import "awx/ui/client/src/shared/branding/colors.default.less"; + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Chrome/Safari/Opera */ + -khtml-user-select: none; /* Konqueror */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + not supported by any browser */ +} + +.Form{ + display:flex; + flex-wrap:wrap; + flex-direction: row; +} + +.Form-header--fields{ + flex: 1 1 auto; +} + +.Form-header-field{ + margin-left: 10px; + flex: 1 1 auto; +} + +.Form-header{ + display: flex; +} + +.Form-title{ + flex: 0 1 auto; + text-transform: uppercase; + color: @list-header-txt; + font-size: 14px; + font-weight: bold; + white-space: nowrap; + padding-bottom: 25px; + min-height: 45px; +} + +.Form-secondaryTitle{ + color: @default-icon; + padding-bottom: 20px; + min-height: 40px; +} + +.Form-title--is_superuser, .Form-title--is_system_auditor, .Form-title--is_ldap_user{ + height:15px; + color: @default-interface-txt; + background-color: @default-list-header-bg; + border-radius: 5px; + font-size: 10px; + padding-left: 10px; + padding-right: 10px; + margin-left: 10px; + text-transform: uppercase; + font-weight: 100; + //position: absolute; + margin-top: 2.25px; + height: 16px; +} + +.Form-exitHolder{ + justify-content: flex-end; + display:flex; +} + +.Form-exit{ + cursor:pointer; + padding:0px; + border: none; + height:20px; + font-size: 20px; + background-color:@default-bg; + color:@d7grey; + transition: color 0.2s; + line-height:1; +} + +.Form-exit:hover{ + color:@default-icon; +} + +.Form-tabHolder{ + display: flex; + margin-bottom: 20px; + min-height: 30px; +} + +.Form-tabs { + flex: 1 0 auto; + display: flex; +} + +.Form-tab { + color: @btn-txt; + background-color: @btn-bg; + font-size: 12px; + border: 1px solid @btn-bord; + height: 30px; + border-radius: 5px; + margin-right: 20px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 5px; + padding-top: 5px; + transition: background-color 0.2s; + text-transform: uppercase; + text-align: center; + white-space: nowrap; + .noselect; +} + +.Form-tab:hover { + color: @btn-txt; + background-color: @btn-bg-hov; + cursor: pointer; +} + +.Form-tab:active { + color: @btn-txt-sel; + background-color: @btn-bg-sel; + cursor: pointer; +} + +.Form-tab:focus { + color: @btn-txt-sel; +} + +.Form-tab.is-selected { + color: @btn-txt-sel; + background-color: @default-icon; + border-color: @default-icon; +} + +.Form-tab--disabled { + opacity: 0.4; +} + +.Form-tab--disabled:hover { + color: @btn-txt; + background-color: @btn-bg; + cursor:not-allowed!important; +} + +.Form-tabSection{ + display: none; + width: 0%; +} + +.Form-tabSection.is-selected{ + width: 100%; + display: block; +} + +.Form-tabActions { + display: flex; +} + +.Form-formGroup { + flex: 1 0 auto; + margin-bottom: 20px; + width: 33%; + max-width: 33%; + padding-right: 30px; +} + +.Form-formGroup--fullWidth { + max-width: none !important; + width: 100% !important; +} + +.Form-formGroup--checkbox{ + display: flex; + margin-top: 10px; +} + +.Form-checkbox--stacked { + label { + display: block; + } +} + +.Form-textUneditable { + .Form-textInput { + border: none; + padding: 0; + } +} + +.Form-subForm { + width: 100%; + margin-bottom: 15px; + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: flex-start; + position: relative; +} + +.Form-subForm:before { + content: ''; + left: -20px; + position: absolute; + width: 5px; + background-color: @default-border; + height: 100%; +} + +.Form-subForm--title { + font-weight: bold; + text-transform: uppercase; + color: @default-interface-txt; + font-size: small; + width: 100%; + float: left; + margin-bottom: 10px; +} + +.Form-textAreaLabel{ + width:100%; + order: 1; +} + +.Form-formGroup.Form-textAreaLabel { + max-width: 100%; +} + +.Form-textArea{ + border-radius: 5px; + color: @field-input-text; + background-color: @field-secondary-bg!important; + width:100%!important; +} + +.Form-textInput{ + height: 30px; + background-color: @field-secondary-bg!important; + border-radius: 5px; + border:1px solid @field-border; + color: @field-input-text; +} + +.Form-textInput:active{ + border:1px solid @field-border-sel; +} + +.Form-monospace{ + font-family: Menlo,Monaco,Consolas,"Courier New",monospace!important; +} + +.Form-alertblock { + margin: 20px 0; + font-size: 12px; + width: 100%; + padding: 15px; + padding-top: 10px; + margin-bottom: 15px; + border-radius: 4px; + border: 1px solid @login-notice-border; + background-color: @login-notice-bg; + color: @login-notice-text; +} + +.ui-spinner{ + height: 30px; + background-color: @field-secondary-bg; + border-radius: 5px; + border:1px solid @field-border; + color: @field-input-text; + width:100% +} + +.ui-spinner-input{ + color: @field-input-text; + background-color: @field-secondary-bg; +} + +.ui-spinner-input:focus{ + outline: none; +} + +.ui-spinner-button{ + border-left:1px solid @field-border!important; + background-color: @field-button-bg !important; +} + +.ui-spinner-button:hover{ + background-color:@field-button-hov !important; + cursor: pointer!important; +} + +.Form-inputButton { + border-color: @d7grey; + color: @default-data-txt; +} + +.Form-numberInputButton{ + color: @default-icon!important; + font-size: 14px; + +} + +.Form-dropDown { + min-height: 30px !important; + border-radius: 5px !important; + border:1px solid @field-border!important; + color: @field-input-text!important; +} + +.select2-selection__arrow{ + border-left:1px solid @field-border; + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; + background-color: @field-button-bg !important; + width: 30px!important; + height: 28px!important; +} + +.select2-selection__arrow:hover{ + background-color:@field-button-hov !important; +} + +.select2-results__option{ + color: @field-label !important; + height: 30px!important; +} + +.select2-container--default .select2-results__option--highlighted[aria-selected]{ + background-color: @field-button-hov !important; +} + +.select2-container--default .select2-results__option[aria-selected=true]{ + background-color: @default-white-button-bord !important; +} + +.select2-container--default .select2-selection--single .select2-selection__arrow b{ + border-color: @field-dropdown-icon transparent transparent transparent !important; +} + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{ + border-color: transparent transparent @field-dropdown-icon transparent!important; +} + +.select2-dropdown{ + border:1px solid @field-border; + +} + +.select2-container--open .select2-dropdown--below { + margin-top: -1px; + border-top: 1px solid @field-border; +} + +.Form-dropDown:focus{ + outline: none!important; +} + +.Form-dropDown--scmType{ + width: 100%; +} + +.Form-passwordButton{ + height: 30px; + color: @field-lookup-btn-icon!important; + text-transform: uppercase; + line-height: 1; + padding-left: 7px; + padding-right: 7px; + background-color: @field-lookup-btn-bg; + border:1px solid @field-border; +} + +.Form-passwordButton:hover { + cursor: pointer; + background-color: @field-lookup-btn-hov-bg; + border: 1px solid @field-border; + color: @field-lookup-btn-icon; +} + +.Form-passwordButton:focus{ + border: 1px solid @field-border; + background-color: @field-lookup-btn-hov-bg; +} + +.Form-passwordButton:active { + border: 1px solid @field-border; + background-color: @field-lookup-btn-hov-bg; +} + +.Form-lookupButton { + height: 30px; + width: 30px; + color: @field-lookup-btn-icon!important; + font-size: 16px; + background-color: @field-lookup-btn-bg; + display: flex; + align-items: center; + justify-content: center; + border:1px solid @field-border; +} + +.Form-lookupButton:hover { + cursor: pointer; + background-color: @field-lookup-btn-hov-bg; + border: 1px solid @field-border; + color: @field-lookup-btn-icon; +} + +.Form-lookupButton:focus { + border: 1px solid @field-border; +} + +.CodeMirror{ + border-radius: 5px; + font-style: normal; + color: @field-input-text; +} + +.CodeMirror-gutters{ + background-color:@code-mirror-gutter !important; +} + +input[type='radio'] { + -webkit-appearance:none; + width:14px; + height:14px; + border:1px solid @radio-bg; + border-radius:50%; + outline:none; + vertical-align: sub; +} + +input[type='radio']:focus { + outline:none; +} + +input[type='radio']:hover { + box-shadow:0 0 5px 0px @btn-bg-hov inset; +} + +input[type='radio']:before { + content:''; + display:block; + width:65%; + height:60%; + margin: 20% auto; + border-radius:50%; +} + +input[type='radio']:checked:before { + background:@radio-bg; + outline:none; +} + +.Form-inputLabelContainer { + width: 100%; + display: block !important; +} +.Form-inputLabel{ + text-transform: uppercase; + color: @default-interface-txt; + font-weight: normal; + font-size: small; + padding-right:5px; + width: 100%; + .noselect; +} + +.Form-labelAction { + text-transform: uppercase; + font-weight: normal; + font-size: 0.8em; + padding-left:5px; + float: right; + margin-top: 3px; + .noselect; +} + +.Form-buttons{ + height: 30px; + display: flex; + justify-content: flex-end; + + button:last-of-type { + margin-left: 20px; + } +} + +.Form-button{ + margin-left: 4px; +} + +.Form-buttonDefault { + background-color: @default-bg; + color: @default-interface-txt; + border-color: @default-border; +} + +.Form-saveButton, .Form-launchButton{ + background-color: @submit-button-bg; + color: @submit-button-text; + text-transform: uppercase; + transition: background-color 0.2s; + padding-left:15px; + padding-right: 15px; +} + +.Form-saveButton:disabled, .Form-launchButton:disabled{ + background-color: @submit-button-bg-dis; +} + +.Form-saveButton:hover, .Form-launchButton:hover{ + background-color: @submit-button-bg-hov; + color: @submit-button-text; +} + +.Form-cancelButton{ + background-color: @default-bg; + color: @btn-txt; + text-transform: uppercase; + border-radius: 5px; + border: 1px solid @btn-bord; + transition: background-color 0.2s; + padding-left:15px; + padding-right: 15px; + margin-left: 20px; +} + +.Form-cancelButton:hover{ + background-color: @btn-bg-hov; + color: @btn-txt; +} + +.Form-surveyButton { + background-color: @default-link; + color: @default-bg; + text-transform: uppercase; + padding-left:15px; + padding-right: 15px; +} + +.Form-surveyButton:hover{ + background-color: @default-link-hov; + color: @default-bg; +} + +.Form-formGroup--singleColumn { + width: 100% !important; + padding-right: 0px; + max-width: 100% !important; +} + +.Form-subCheckbox { + margin-top: 5px; + font-size: small; + color: @default-interface-txt; + .noselect; +} + +@media only screen and (max-width: 650px) { + .Form-formGroup { + flex: 1 0 auto; + margin-bottom: 25px; + max-width: 100%; + width: 100%; + padding-right: 50px; + } +} + +@media (min-width: 651px) and (max-width: 900px) { + .Form-formGroup { + flex: 1 0 auto; + margin-bottom: 25px; + max-width: 50%; + width: 50%; + padding-right: 50px; + } +} + +.action_column { + float: right; +} + +.alert-info { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100px; + border-radius: 5px; + border: 1px solid @default-no-items-bord; + background-color: @default-no-items-bord; + color: @default-icon; + text-transform: uppercase; +} + +.alert-info--noTextTransform { + text-transform: none; +} diff --git a/awx/ui/client/legacy-styles/job-details.less b/awx/ui/client/legacy-styles/job-details.less index 32c88aae35..6f19e70fe8 100644 --- a/awx/ui/client/legacy-styles/job-details.less +++ b/awx/ui/client/legacy-styles/job-details.less @@ -166,9 +166,6 @@ .unreachable-hosts-color { color: @unreachable-hosts-color; } - .missing-hosts { - color: transparent; - } .job_well { padding: 8px; @@ -197,9 +194,6 @@ margin-bottom: 0; } - #job-detail-tables { - margin-top: 20px; - } #job_options { height: 100px; @@ -208,7 +202,6 @@ } #job_plays, #job_tasks { - height: 150px; overflow-y: auto; overflow-x: none; } @@ -221,10 +214,7 @@ } #job-detail-container { - position: relative; - padding-left: 15px; - padding-right: 7px; - width: 58.33333333%; + .well { overflow: hidden; } @@ -286,15 +276,14 @@ overflow-x: hidden; overflow-y: auto; background-color: @white; + min-height: 40px; + .row { border-top: 1px solid @grey; } .row:first-child { border: none; } - .active { - background-color: @active-color; - } .loading-info { padding-top: 5px; padding-left: 3px; @@ -329,13 +318,9 @@ text-overflow: ellipsis; } - #tasks-table-detail { - height: 150px; - } - #play-section { .table-detail { - height: 150px; + min-height: 40px; } } @@ -438,7 +423,6 @@ table-layout: fixed; } #hosts-table-detail { - height: 150px; background-color: @white; } #hosts-table-detail table { @@ -520,7 +504,7 @@ } #graph-section svg{ - margin-top: 15px; + margin: 0 auto; } path.slice{ @@ -549,7 +533,7 @@ word-break: break-all; word-wrap: break-word; padding: 9.5px; - ont-family: Fixed, monospace; + font-family: Fixed, monospace; max-height: 200px; } diff --git a/awx/ui/client/legacy-styles/jobs.less b/awx/ui/client/legacy-styles/jobs.less index bc1fe5cbc5..a3b403c44c 100644 --- a/awx/ui/client/legacy-styles/jobs.less +++ b/awx/ui/client/legacy-styles/jobs.less @@ -17,18 +17,12 @@ } .job-list { - thead >tr >th, .page-row { - font-size: 12px; - color: #666; - } .pagination li { } .pagination li a { font-size: 12px; - padding-left: 3px; - padding-right: 3px; - padding-bottom: 2px; + padding: 3px 6px; } i[class*="icon-job-"] { font-size: 13px; diff --git a/awx/ui/client/legacy-styles/jquery-ui-overrides.less b/awx/ui/client/legacy-styles/jquery-ui-overrides.less index c21dadb3c6..53d29ddc16 100644 --- a/awx/ui/client/legacy-styles/jquery-ui-overrides.less +++ b/awx/ui/client/legacy-styles/jquery-ui-overrides.less @@ -8,18 +8,20 @@ * */ +@import "awx/ui/client/src/shared/branding/colors.default.less"; table.ui-datepicker-calendar { background-color: @well; } /* Modal dialog */ - .ui-dialog-title { - font-size: 22px; - color: @blue-link; + font-size: 15px; + color: @default-interface-txt; font-weight: bold; line-height: normal; + font-family: 'Open Sans', helvetica; + text-transform: uppercase; } .ui-dialog { .close { @@ -27,18 +29,27 @@ table.ui-datepicker-calendar { font-weight: bold; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1; - opacity: .7; + opacity: 1; text-shadow: 0 1px 0 @white; + color:@d7grey; + } + .close:hover{ + color:@default-icon; + } + .ui-widget { + font-family: 'Open Sans', sans-serif; } .ui-widget-header { border-radius: 0; border: none; - border-bottom: 1px solid #A9A9A9; - height: 55px; } .ui-dialog-titlebar { padding-bottom: 0; padding-top: 12px; + + button.close i { + font-size: 24px; + } } .ui-dialog-titlebar .ui-state-default { background-image: none; @@ -58,9 +69,59 @@ table.ui-datepicker-calendar { background-position: -80px -224px; color: @black; } + + button.btn.btn-primary, + button.btn.btn-default { + padding: 5px 15px; + font-size: 12px; + line-height: 1.5; + transition: background-color 0.2s; + font-size: 12px; + } + + button.btn.btn-primary { + text-transform: uppercase; + background-color: @default-succ; + border-color: @default-succ; + + &:hover { + background-color: @default-succ-hov; + border-color: @default-succ-hov; + } + + &:disabled { + background-color: @default-succ-disabled; + border-color: @default-succ-disabled; + } + } + + button.btn.btn-default { + text-transform: uppercase; + border-color: @d7grey; + color: @default-interface-txt; + } + + .ui-dialog-buttonpane.ui-widget-content { + border: none; + margin: 0; + padding-top: 0; + padding-right: 8px; + } + + .input-group-btn.dropdown, .List-pagination, .List-tableHeader { + font-family: 'Open Sans', sans-serif; + } + +} +.ui-dialog-buttonpane > .ui-dialog-buttonset { + button { + margin-left: 20px; + } } .ui-dialog-buttonset { + text-transform: uppercase; + button.btn.btn-default.ui-state-hover, button.btn.btn-default.ui-state-active, button.btn.btn-default.ui-state-focus { @@ -114,7 +175,7 @@ table.ui-datepicker-calendar { } .dropdown-menu>li>a { - color: @black; + color: @default-interface-txt; } .pagination .active { diff --git a/awx/ui/client/legacy-styles/lists.less b/awx/ui/client/legacy-styles/lists.less index a7653cb01f..6282ab340e 100644 --- a/awx/ui/client/legacy-styles/lists.less +++ b/awx/ui/client/legacy-styles/lists.less @@ -7,29 +7,410 @@ * */ - .list-well { + @import "awx/ui/client/src/shared/branding/colors.default.less"; + + +table, tbody { + border-collapse: separate !important; +} + +.List-well { + margin-top: 25px; +} + +.List-table{ + width: 100%; + table-layout: fixed; +} + +.List-tableHeader{ + height: 30px; + font-size: 14px; + font-weight: normal; + text-transform: uppercase; + color: @list-header-txt; + background-color: @list-header-bg; + padding-left: 15px; + padding-right: 15px; + border-bottom-width:0px!important; +} + +.List-tableHeader:first-of-type { + border-top-left-radius: 5px; +} + +.List-tableHeader:last-of-type { + border-top-right-radius: 5px; +} + +.List-tableHeader--actions { + text-align: right; +} + +.List-tableHeader:not([ng-click]) { + cursor: default !important; +} + +.List-tableHeaderSort { + color: @list-header-icon; +} + +.List-tableRow { + height: 40px; + font-size: 14px; + color: @list-item; +} + +.List-tableRow--selected, +.List-tableRow--selected > :first-child { + border-left: 5px solid @list-row-select-bord; +} + +.List-tableRow--selected > :first-child { + padding-left: 10px; +} + +.List-tableRow--evenRow { + background-color: @list-alt-item-bg; +} + +.List-tableCell { + padding-left: 15px; + padding-right: 15px; + border-top:0px!important; +} + +.List-tableCell.description-column { + padding-top: 15px; + padding-bottom: 15px; +} + +.List-actionButtonCell { + padding-top:5px; + padding-right: 15px; + display:flex; + justify-content: flex-end; +} + +.List-actionButton { + font-size: 16px; + height: 30px; + min-width: 30px; + color: @list-action-icon; + background-color: @list-actn-bg; + border: none; + border-radius: 50%; +} + +.List-actionButton:hover { + background-color: @list-actn-bg-hov !important; + color: @list-actn-icn-hov; +} + +.List-actionButton--delete:hover { + background-color: @list-actn-del-bg-hov !important; +} + +.List-actionButton + .List-actionButton { + margin-left: 15px; +} + +/* -- Pagination -- */ +.List-pagination { margin-top: 20px; - - table >thead >tr >th { - font-weight: normal; - } - } - -.is-selected-row, .is-selected-row td { - background-color: #E4F1FF !important; + font-size: 12px; + color: @list-pagin-text; + text-transform: uppercase; + height: 22px; + display: flex; } -.select-column { - text-align: center; +.List-paginationPagerHolder { + display: flex; + flex: 1 0 auto; } -th.select-column { - label { - // overrides the default style of - // display: inline-block, which allowed - // margins to push down the label, - // thus breaking the vertical-alignment - // of the cell - display: inline; +.List-paginationPager { + display: flex; +} + +.List-paginationPager--pageof { + line-height: 22px; + margin-left: 10px; +} + +.List-paginationPager--item { + border-color: @list-pagin-bord; +} + +.List-paginationPager--active { + border-color: @list-pagin-bord-act!important; + background-color: @list-pagin-bg-act!important; +} + +.List-paginationItemsOf { + display: flex; + justify-content: flex-end; +} + +.List-header { + display: flex; + min-height: 34px; +} + +.List-title { + align-items: center; + flex: 1 0 auto; + display: flex; + height: 34px; +} + +.List-titleBadge { + font-size: 11px; + font-weight: normal; + padding: 1px 10px; + height: 14px; + margin: 3px 0; + background-color: @list-title-badge; + border-radius: 5px; +} + +.List-titleBadge--selected { + background-color: @default-link; +} + +.List-titleText { + color: @list-title-txt; + font-size: 14px; + font-weight: bold; + margin-right: 10px; + text-transform: uppercase; +} + +.List-actionHolder { + justify-content: flex-end; + display: flex; +} + +.List-actions { + display: flex; +} + +.List-auxAction { + align-items: center; + display: flex; + order: 1; + margin-left: 20px; +} + +.List-auxActionStream { + width: 175px; +} + +.List-action:not(.ng-hide) ~ .List-action:not(.ng-hide) { + margin-left: 20px; +} + +.List-buttonSubmit { + background-color: @submit-button-bg; + color: @submit-button-text; +} + +.List-buttonSubmit:hover, +.List-buttonSubmit:focus { + color: @submit-button-text; + background-color: @submit-button-bg-hov; +} + +.List-buttonDefault { + background-color: @btn-bg; + color: @btn-txt; + border-color: @btn-bord; +} + +.List-buttonDefault:hover, +.List-buttonDefault:focus { + background-color: @btn-bg-hov; + color: @btn-txt; +} + +.List-searchDropdown { + border-top-left-radius: 5px!important; + border-bottom-left-radius: 5px!important; + height: 34px!important; + border-color: @d7grey; + color: @default-icon; + background-color: @default-bg; + border-right: none; +} + +.List-searchDropdown:focus, +.List-searchDropdown:active, +.List-searchDropdown.active +{ + color: @default-icon; + background-color: @default-tertiary-bg; +} + +.List-searchDropdown:hover { + background-color: @default-tertiary-bg; + color: @default-icon; +} + +.List-searchDropdownCarat { + border-top-color: @default-icon!important; +} + +.List-searchInput { + background-color: @list-srch-inpt-bg!important; + font-size: 14px!important; + color: @list-srch-inpt-txt!important; + border-color: @list-srch-inpt-bord!important; + border-radius: 0px 5px 5px 0px!important; + padding-left: 15px!important; + height: 34px!important; + padding-right: 45px!important; + font-family: 'Open Sans', sans-serif; +} + +.List-searchInput:placeholder-shown { + color: @list-srch-inpt-ph-txt!important; + text-transform: uppercase; +} + +.List-searchInput:focus { + border-color: @list-srch-inpt-focus!important; +} + +.List-searchInputIcon { + height: 32px; + width: 32px; + border-left: 1px solid @list-srch-inpt-bord; + color: @list-srch-btn-icon!important; + float: right; + position: relative; + top: -33px; + left: -2px; + z-index: 10; + font-size: 16px; + background-color: @list-srch-btn-bg; + display: flex; + align-items: center; + justify-content: center; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.List-searchInputIcon:hover { + cursor: pointer; + background-color: @list-srch-btn-hov-bg; + color: @list-srch-btn-icon; +} + +.List-searchNoResults { + color: @default-interface-txt; +} + +.List-noItems { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 200px; + border-radius: 5px; + border: 1px solid @list-no-items-bord; + background-color: @default-no-items-bord; + color: @list-no-items-txt; + text-transform: uppercase; +} + +.List-editButton--selected { + background-color: @list-actn-bg-hov !important; + color: @list-actn-icn-hov; +} + +.List-searchWidget { + height: 34px; +} + +.List-searchWidget--compact { + max-width: ~"calc(100% - 91px)"; + margin-top: 10px; +} + +.List-searchRow { + margin-bottom: 20px; +} + +.List-staticColumn--smallStatus { + width: 25px; + padding-right: 0px!important; +} + +.List-staticColumn--mediumStatus { + width: 51px; + padding-right: 0px!important; +} + +.List-staticColumn--toggle { + width: 55px; + padding-right: 0px !important; +} + +.List-staticColumn--schedulerTime { + max-width: 164px; +} + +.List-staticColumnAdjacent { + padding-left: 10px!important; +} + +.List-titleLockup { + margin-left: 4px; + margin-right: 6px; + display: inline-block; + margin-top: 0px; + padding-bottom: 2px; + vertical-align: bottom; +} + +.List-titleLockup:before { + content: "\007C"; + color: #d7d7d7; + display: block; + font-size: 13px; +} + +.List-action--showTooltipOnDisabled { + display: inline-block; +} + +.List-action--showTooltipOnDisabled .btn[disabled] { + pointer-events: none; +} + +.List-action--showTooltipOnDisabled.disabled { + cursor: not-allowed; +} + +@media (max-width: 991px) { + .List-searchWidget + .List-searchWidget { + margin-top: 20px; + } +} + +@media (max-width: 600px) { + .List-header { + flex-direction: column; + align-items: stretch; + } + .List-actionHolder { + justify-content: flex-start; + align-items: center; + flex: 1 0 auto; + margin-top: 12px; + } + .List-well { + margin-top: 20px; } } diff --git a/awx/ui/client/legacy-styles/main-layout.less b/awx/ui/client/legacy-styles/main-layout.less index 20a8b2639b..2aa3491b05 100644 --- a/awx/ui/client/legacy-styles/main-layout.less +++ b/awx/ui/client/legacy-styles/main-layout.less @@ -7,13 +7,25 @@ * */ -html, body { height: 100%; } +@import "src/shared/branding/colors.less"; +@import "src/shared/branding/colors.default.less"; + +html { height: 100%; } body { font-family: 'Open Sans', sans-serif; font-weight: 400; - color: @black; - padding-top: 58px; + color: @default-data-txt; + padding-top: 100px; + min-height: 100%; + padding-bottom: 50px; + position: relative; + background-color: @default-secondary-bg; +} + +.container-fluid { + padding-left: 20px; + padding-right: 20px; } #main-menu-container { @@ -49,7 +61,7 @@ body { } #content-container { - margin-top: 40px; + padding-bottom: 40px; } .group-breadcrumbs { @@ -72,6 +84,18 @@ body { height: 15px; } +.Panel { + background-color: @panel-bg; + border-radius: 5px; + padding: 20px; + border: 1px solid @panel-border; + margin-top: 20px; +} + +.btn{ + text-transform: uppercase; +} + @media (max-width: 1075px) { #main-menu-container { @@ -84,7 +108,7 @@ body { position: relative; top: 1px; left: 10px; - color: @black; + color: @default-data-txt; text-transform:capitalize; } #account-menu { diff --git a/awx/ui/client/legacy-styles/portal.less b/awx/ui/client/legacy-styles/portal.less deleted file mode 100644 index 6d0bb4edbd..0000000000 --- a/awx/ui/client/legacy-styles/portal.less +++ /dev/null @@ -1,49 +0,0 @@ -/********************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * portal.css - * - * custom styles for poral mode - * - */ - - - - - -.portal-container{ - border: 1px solid @grey; - border-radius: 4px; - padding: 5px; -} - -.portal-header{ - margin: 5px; - margin-left: 10px; - font-size: 14px; - font-weight: bold; -} - -#portal-jobs{ - margin-top: 20px; -} - @media (min-width: 769px) { - .left-side { - padding-right: 7px; - } - - .right-side { - padding-left: px; - } -} - - #job_templates_table, - #portal_jobs_table { - table-layout:fixed; - } - #portal_jobs_table .name-column, - #job_templates_table .name-column { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } diff --git a/awx/ui/client/legacy-styles/stdout.less b/awx/ui/client/legacy-styles/stdout.less index e8f764dee6..7d15a11c53 100644 --- a/awx/ui/client/legacy-styles/stdout.less +++ b/awx/ui/client/legacy-styles/stdout.less @@ -5,6 +5,8 @@ * */ + @import "awx/ui/client/src/shared/branding/colors.default.less"; + #jobs-stdout { margin-bottom: 20px; @@ -32,6 +34,7 @@ #pre-container { overflow-x: scroll; overflow-y: auto; + padding: 10px; } } @@ -42,22 +45,25 @@ .ansi3 { font-weight: italic; } .ansi4 { text-decoration: underline; } .ansi9 { text-decoration: line-through; } -.ansi30 { color: #000316; } -.ansi31 { color: @red; } -.ansi32 { color: @green; } -.ansi33 { color: @changed; } -.ansi34 { color: #0000AA; } -.ansi35 { color: #E850A8; } -.ansi36 { color: @skipped; } -.ansi37 { color: #F5F1DE; } -.ansi40 { background-color: #000316; } -.ansi41 { background-color: @red; } -.ansi42 { background-color: @green; } -.ansi43 { background-color: @changed; } -.ansi44 { background-color: #0000AA; } -.ansi45 { background-color: #E850A8; } -.ansi46 { background-color: @skipped; } -.ansi47 { background-color: #F5F1DE; } +.ansi30 { color: @default-stdout-txt; } +.ansi31 { color: @default-err; } +.ansi1.ansi31 { + color: @default-unreachable; +} +.ansi32 { color: @default-succ; } +.ansi33 { color: @default-warning; } +.ansi34 { color: @default-link; } +.ansi35 { color: @default-magenta; } +.ansi36 { color: @default-cyan; } +.ansi37 { color: @default-bg; } +.ansi40 { background-color: @default-stdout-txt; } +.ansi41 { background-color: @default-err; } +.ansi42 { background-color: @default-succ; } +.ansi43 { background-color: @default-warning; } +.ansi44 { background-color: @default-link; } +.ansi45 { background-color: @default-magenta; } +.ansi46 { background-color: @default-cyan; } +.ansi47 { background-color: @default-bg; } #pre-container-content > span { display: inline-block; diff --git a/awx/ui/client/legacy-styles/text-label.less b/awx/ui/client/legacy-styles/text-label.less index 63aee6c9a3..57d50f3f8b 100644 --- a/awx/ui/client/legacy-styles/text-label.less +++ b/awx/ui/client/legacy-styles/text-label.less @@ -1,7 +1,17 @@ -@import "src/shared/text-label.less"; +@import "src/shared/branding/colors.default.less"; .host-disabled-label { &:after { - .include-text-label(#676767; white; "disabled"); + display: inline-block; + content: "disabled"; + border-radius: 3px; + color: @default-icon; + text-transform: uppercase; + font-size: .7em; + font-style: normal; + margin-left: 0.5em; + padding: 0.35em; + padding-bottom: 0.2em; + line-height: 1.1; } } diff --git a/awx/ui/client/lib/angular-animate/.bower.json b/awx/ui/client/lib/angular-animate/.bower.json index 27ddb8cc93..fd1a3db81b 100644 --- a/awx/ui/client/lib/angular-animate/.bower.json +++ b/awx/ui/client/lib/angular-animate/.bower.json @@ -1,19 +1,19 @@ { "name": "angular-animate", - "version": "1.4.3", + "version": "1.4.8", "main": "./angular-animate.js", "ignore": [], "dependencies": { - "angular": "1.4.3" + "angular": "1.4.8" }, "homepage": "https://github.com/angular/bower-angular-animate", - "_release": "1.4.3", + "_release": "1.4.8", "_resolution": { "type": "version", - "tag": "v1.4.3", - "commit": "4ce2a76359401102d2e0146ccf69e6c060799ff8" + "tag": "v1.4.8", + "commit": "cc1d9740059f5e8fd43abf0e2e80695d43b3b6b1" }, "_source": "git://github.com/angular/bower-angular-animate.git", - "_target": "~1.4.3", + "_target": "~1.4.8", "_originalSource": "angular-animate" } \ No newline at end of file diff --git a/awx/ui/client/lib/angular-animate/angular-animate.js b/awx/ui/client/lib/angular-animate/angular-animate.js index fc0e217f7e..30610044a9 100644 --- a/awx/ui/client/lib/angular-animate/angular-animate.js +++ b/awx/ui/client/lib/angular-animate/angular-animate.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.4.3 + * @license AngularJS v1.4.8 * (c) 2010-2015 Google, Inc. http://angularjs.org * License: MIT */ @@ -21,12 +21,60 @@ var isElement = angular.isElement; var ELEMENT_NODE = 1; var COMMENT_NODE = 8; +var ADD_CLASS_SUFFIX = '-add'; +var REMOVE_CLASS_SUFFIX = '-remove'; +var EVENT_CLASS_PREFIX = 'ng-'; +var ACTIVE_CLASS_SUFFIX = '-active'; + var NG_ANIMATE_CLASSNAME = 'ng-animate'; var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren'; +// Detect proper transitionend/animationend event names. +var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; + +// If unprefixed events are not supported but webkit-prefixed are, use the latter. +// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. +// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` +// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. +// Register both events in case `window.onanimationend` is not supported because of that, +// do the same for `transitionend` as Safari is likely to exhibit similar behavior. +// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit +// therefore there is no reason to test anymore for other vendor prefixes: +// http://caniuse.com/#search=transition +if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) { + CSS_PREFIX = '-webkit-'; + TRANSITION_PROP = 'WebkitTransition'; + TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; +} else { + TRANSITION_PROP = 'transition'; + TRANSITIONEND_EVENT = 'transitionend'; +} + +if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) { + CSS_PREFIX = '-webkit-'; + ANIMATION_PROP = 'WebkitAnimation'; + ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; +} else { + ANIMATION_PROP = 'animation'; + ANIMATIONEND_EVENT = 'animationend'; +} + +var DURATION_KEY = 'Duration'; +var PROPERTY_KEY = 'Property'; +var DELAY_KEY = 'Delay'; +var TIMING_KEY = 'TimingFunction'; +var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; +var ANIMATION_PLAYSTATE_KEY = 'PlayState'; +var SAFE_FAST_FORWARD_DURATION_VALUE = 9999; + +var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY; +var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY; +var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY; +var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY; + var isPromiseLike = function(p) { return p && p.then ? true : false; -} +}; function assertArg(arg, name, reason) { if (!arg) { @@ -177,8 +225,21 @@ function mergeAnimationOptions(element, target, newOptions) { var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || ''); var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove); + if (newOptions.preparationClasses) { + target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses); + delete newOptions.preparationClasses; + } + + // noop is basically when there is no callback; otherwise something has been set + var realDomOperation = target.domOperation !== noop ? target.domOperation : null; + extend(target, newOptions); + // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this. + if (realDomOperation) { + target.domOperation = realDomOperation; + } + if (classes.addClass) { target.addClass = classes.addClass; } else { @@ -256,18 +317,75 @@ function getDomNode(element) { return (element instanceof angular.element) ? element[0] : element; } +function applyGeneratedPreparationClasses(element, event, options) { + var classes = ''; + if (event) { + classes = pendClasses(event, EVENT_CLASS_PREFIX, true); + } + if (options.addClass) { + classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX)); + } + if (options.removeClass) { + classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX)); + } + if (classes.length) { + options.preparationClasses = classes; + element.addClass(classes); + } +} + +function clearGeneratedClasses(element, options) { + if (options.preparationClasses) { + element.removeClass(options.preparationClasses); + options.preparationClasses = null; + } + if (options.activeClasses) { + element.removeClass(options.activeClasses); + options.activeClasses = null; + } +} + +function blockTransitions(node, duration) { + // we use a negative delay value since it performs blocking + // yet it doesn't kill any existing transitions running on the + // same element which makes this safe for class-based animations + var value = duration ? '-' + duration + 's' : ''; + applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]); + return [TRANSITION_DELAY_PROP, value]; +} + +function blockKeyframeAnimations(node, applyBlock) { + var value = applyBlock ? 'paused' : ''; + var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY; + applyInlineStyle(node, [key, value]); + return [key, value]; +} + +function applyInlineStyle(node, styleTuple) { + var prop = styleTuple[0]; + var value = styleTuple[1]; + node.style[prop] = value; +} + +function concatWithSpace(a,b) { + if (!a) return b; + if (!b) return a; + return a + ' ' + b; +} + var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { - var tickQueue = []; - var cancelFn; + var queue, cancelFn; function scheduler(tasks) { // we make a copy since RAFScheduler mutates the state // of the passed in array variable and this would be difficult // to track down on the outside code - tickQueue.push([].concat(tasks)); + queue = queue.concat(tasks); nextTick(); } + queue = scheduler.queue = []; + /* waitUntilQuiet does two things: * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through * 2. It will delay the next wave of tasks from running until the quiet `fn` has run. @@ -289,17 +407,12 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { return scheduler; function nextTick() { - if (!tickQueue.length) return; + if (!queue.length) return; - var updatedQueue = []; - for (var i = 0; i < tickQueue.length; i++) { - var innerQueue = tickQueue[i]; - runNextTask(innerQueue); - if (innerQueue.length) { - updatedQueue.push(innerQueue); - } + var items = queue.shift(); + for (var i = 0; i < items.length; i++) { + items[i](); } - tickQueue = updatedQueue; if (!cancelFn) { $$rAF(function() { @@ -307,11 +420,6 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { }); } } - - function runNextTask(tasks) { - var nextTask = tasks.shift(); - nextTask(); - } }]; var $$AnimateChildrenDirective = [function() { @@ -328,6 +436,8 @@ var $$AnimateChildrenDirective = [function() { }; }]; +var ANIMATE_TIMER_KEY = '$$animateCss'; + /** * @ngdoc service * @name $animateCss @@ -512,8 +622,10 @@ var $$AnimateChildrenDirective = [function() { * * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.) + * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and + * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted. * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both). - * * `transition` - The raw CSS transition style that will be used (e.g. `1s linear all`). + * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`). * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`). * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation. * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition. @@ -528,63 +640,23 @@ var $$AnimateChildrenDirective = [function() { * * `stagger` - A numeric time value representing the delay between successively animated elements * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.}) * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a - * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) - * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.) + * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) + * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.) + * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once + * the animation is closed. This is useful for when the styles are used purely for the sake of + * the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation). + * By default this value is set to `false`. * * @return {object} an object with start and end methods and details about the animation. * * * `start` - The method to start the animation. This will return a `Promise` when called. * * `end` - This method will cancel the animation and remove all applied CSS classes and styles. */ - -// Detect proper transitionend/animationend event names. -var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT; - -// If unprefixed events are not supported but webkit-prefixed are, use the latter. -// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them. -// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend` -// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`. -// Register both events in case `window.onanimationend` is not supported because of that, -// do the same for `transitionend` as Safari is likely to exhibit similar behavior. -// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit -// therefore there is no reason to test anymore for other vendor prefixes: -// http://caniuse.com/#search=transition -if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { - CSS_PREFIX = '-webkit-'; - TRANSITION_PROP = 'WebkitTransition'; - TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; -} else { - TRANSITION_PROP = 'transition'; - TRANSITIONEND_EVENT = 'transitionend'; -} - -if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { - CSS_PREFIX = '-webkit-'; - ANIMATION_PROP = 'WebkitAnimation'; - ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; -} else { - ANIMATION_PROP = 'animation'; - ANIMATIONEND_EVENT = 'animationend'; -} - -var DURATION_KEY = 'Duration'; -var PROPERTY_KEY = 'Property'; -var DELAY_KEY = 'Delay'; -var TIMING_KEY = 'TimingFunction'; -var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount'; -var ANIMATION_PLAYSTATE_KEY = 'PlayState'; -var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; -var CLOSING_TIME_BUFFER = 1.5; var ONE_SECOND = 1000; var BASE_TEN = 10; -var SAFE_FAST_FORWARD_DURATION_VALUE = 9999; - -var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY; -var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY; - -var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY; -var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY; +var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; +var CLOSING_TIME_BUFFER = 1.5; var DETECT_CSS_PROPERTIES = { transitionDuration: TRANSITION_DURATION_PROP, @@ -602,6 +674,15 @@ var DETECT_STAGGER_CSS_PROPERTIES = { animationDelay: ANIMATION_DELAY_PROP }; +function getCssKeyframeDurationStyle(duration) { + return [ANIMATION_DURATION_PROP, duration + 's']; +} + +function getCssDelayStyle(delay, isKeyframeAnimation) { + var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP; + return [prop, delay + 's']; +} + function computeCssStyles($window, element, properties) { var styles = Object.create(null); var detectedStyles = $window.getComputedStyle(element) || {}; @@ -658,37 +739,6 @@ function getCssTransitionDurationStyle(duration, applyOnlyDuration) { return [style, value]; } -function getCssKeyframeDurationStyle(duration) { - return [ANIMATION_DURATION_PROP, duration + 's']; -} - -function getCssDelayStyle(delay, isKeyframeAnimation) { - var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP; - return [prop, delay + 's']; -} - -function blockTransitions(node, duration) { - // we use a negative delay value since it performs blocking - // yet it doesn't kill any existing transitions running on the - // same element which makes this safe for class-based animations - var value = duration ? '-' + duration + 's' : ''; - applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]); - return [TRANSITION_DELAY_PROP, value]; -} - -function blockKeyframeAnimations(node, applyBlock) { - var value = applyBlock ? 'paused' : ''; - var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY; - applyInlineStyle(node, [key, value]); - return [key, value]; -} - -function applyInlineStyle(node, styleTuple) { - var prop = styleTuple[0]; - var value = styleTuple[1]; - node.style[prop] = value; -} - function createLocalCacheLookup() { var cache = Object.create(null); return { @@ -716,14 +766,31 @@ function createLocalCacheLookup() { }; } +// we do not reassign an already present style value since +// if we detect the style property value again we may be +// detecting styles that were added via the `from` styles. +// We make use of `isDefined` here since an empty string +// or null value (which is what getPropertyValue will return +// for a non-existing style) will still be marked as a valid +// value for the style (a falsy value implies that the style +// is to be removed at the end of the animation). If we had a simple +// "OR" statement then it would not be enough to catch that. +function registerRestorableStyles(backup, node, properties) { + forEach(properties, function(prop) { + backup[prop] = isDefined(backup[prop]) + ? backup[prop] + : node.style.getPropertyValue(prop); + }); +} + var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var gcsLookup = createLocalCacheLookup(); var gcsStaggerLookup = createLocalCacheLookup(); this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', - '$document', '$sniffer', '$$rAFScheduler', + '$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate', function($window, $$jqLite, $$AnimateRunner, $timeout, - $document, $sniffer, $$rAFScheduler) { + $$forceReflow, $sniffer, $$rAFScheduler, $animate) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); @@ -780,7 +847,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return stagger || {}; } - var bod = getDomNode($document).body; + var cancelLastRAFRequest; var rafWaitQueue = []; function waitUntilQuiet(callback) { rafWaitQueue.push(callback); @@ -788,27 +855,19 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { gcsLookup.flush(); gcsStaggerLookup.flush(); - //the line below will force the browser to perform a repaint so - //that all the animated elements within the animation frame will - //be properly updated and drawn on screen. This is required to - //ensure that the preparation animation is properly flushed so that - //the active state picks up from there. DO NOT REMOVE THIS LINE. - //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH - //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND - //WILL TAKE YEARS AWAY FROM YOUR LIFE. - var width = bod.offsetWidth + 1; + // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable. + // PLEASE EXAMINE THE `$$forceReflow` service to understand why. + var pageWidth = $$forceReflow(); // we use a for loop to ensure that if the queue is changed // during this looping then it will consider new requests for (var i = 0; i < rafWaitQueue.length; i++) { - rafWaitQueue[i](width); + rafWaitQueue[i](pageWidth); } rafWaitQueue.length = 0; }); } - return init; - function computeTimings(node, className, cacheKey) { var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES); var aD = timings.animationDelay; @@ -823,9 +882,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return timings; } - function init(element, options) { + return function init(element, options) { + var restoreStyles = {}; var node = getDomNode(element); - if (!node || !node.parentNode) { + if (!node + || !node.parentNode + || !$animate.enabled()) { return closeAndReturnNoopAnimator(); } @@ -857,20 +919,20 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var addRemoveClassName = ''; if (isStructural) { - structuralClassName = pendClasses(method, 'ng-', true); + structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true); } else if (method) { structuralClassName = method; } if (options.addClass) { - addRemoveClassName += pendClasses(options.addClass, '-add'); + addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX); } if (options.removeClass) { if (addRemoveClassName.length) { addRemoveClassName += ' '; } - addRemoveClassName += pendClasses(options.removeClass, '-remove'); + addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX); } // there may be a situation where a structural animation is combined together @@ -881,12 +943,11 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // there actually is a detected transition or keyframe animation if (options.applyClassesEarly && addRemoveClassName.length) { applyAnimationClasses(element, options); - addRemoveClassName = ''; } - var setupClasses = [structuralClassName, addRemoveClassName].join(' ').trim(); - var fullClassName = classes + ' ' + setupClasses; - var activeClasses = pendClasses(setupClasses, '-active'); + var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim(); + var fullClassName = classes + ' ' + preparationClasses; + var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX); var hasToStyles = styles.to && Object.keys(styles.to).length > 0; var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0; @@ -895,7 +956,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // unless there a is raw keyframe value that is applied to the element. if (!containsKeyframeAnimation && !hasToStyles - && !setupClasses) { + && !preparationClasses) { return closeAndReturnNoopAnimator(); } @@ -910,10 +971,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { }; } else { cacheKey = gcsHashFn(node, fullClassName); - stagger = computeCachedCssStaggerStyles(node, setupClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES); + stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES); } - $$jqLite.addClass(element, setupClasses); + if (!options.$$skipPreparationClasses) { + $$jqLite.addClass(element, preparationClasses); + } var applyOnlyDuration; @@ -952,7 +1015,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { // transition delay to allow for the transition to naturally do it's thing. The beauty here is // that if there is no transition defined then nothing will happen and this will also allow // other transitions to be stacked on top of each other without any chopping them out. - if (isFirst) { + if (isFirst && !options.skipBlocking) { blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE); } @@ -994,6 +1057,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return closeAndReturnNoopAnimator(); } + if (options.delay != null) { + var delayStyle = parseFloat(options.delay); + + if (flags.applyTransitionDelay) { + temporaryStyles.push(getCssDelayStyle(delayStyle)); + } + + if (flags.applyAnimationDelay) { + temporaryStyles.push(getCssDelayStyle(delayStyle, true)); + } + } + // we need to recalculate the delay value since we used a pre-emptive negative // delay value and the delay value is required for the final event checking. This // property will ensure that this will happen after the RAF phase has passed. @@ -1010,12 +1085,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { stagger.animationDuration === 0; } - applyAnimationFromStyles(element, options); - if (!flags.blockTransition) { - blockTransitions(node, false); + if (options.from) { + if (options.cleanupStyles) { + registerRestorableStyles(restoreStyles, node, Object.keys(options.from)); + } + applyAnimationFromStyles(element, options); } - applyBlocking(maxDuration); + if (flags.blockTransition || flags.blockKeyframeAnimation) { + applyBlocking(maxDuration); + } else if (!options.skipBlocking) { + blockTransitions(node, false); + } // TODO(matsko): for 1.5 change this code to have an animator object for better debugging return { @@ -1058,7 +1139,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { animationClosed = true; animationPaused = false; - $$jqLite.removeClass(element, setupClasses); + if (!options.$$skipPreparationClasses) { + $$jqLite.removeClass(element, preparationClasses); + } $$jqLite.removeClass(element, activeClasses); blockKeyframeAnimations(node, false); @@ -1074,6 +1157,13 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { applyAnimationClasses(element, options); applyAnimationStyles(element, options); + if (Object.keys(restoreStyles).length) { + forEach(restoreStyles, function(value, prop) { + value ? node.style.setProperty(prop, value) + : node.style.removeProperty(prop); + }); + } + // the reason why we have this option is to allow a synchronous closing callback // that is fired as SOON as the animation ends (when the CSS is removed) or if // the animation never takes off at all. A good example is a leave animation since @@ -1105,6 +1195,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { cancel: cancelFn }); + // should flush the cache animation + waitUntilQuiet(noop); close(); return { @@ -1185,7 +1277,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { $$jqLite.addClass(element, activeClasses); if (flags.recalculateTimingStyles) { - fullClassName = node.className + ' ' + setupClasses; + fullClassName = node.className + ' ' + preparationClasses; cacheKey = gcsHashFn(node, fullClassName); timings = computeTimings(node, fullClassName, cacheKey); @@ -1202,27 +1294,16 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { flags.hasAnimations = timings.animationDuration > 0; } - if (flags.applyTransitionDelay || flags.applyAnimationDelay) { + if (flags.applyAnimationDelay) { relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay) ? parseFloat(options.delay) : relativeDelay; maxDelay = Math.max(relativeDelay, 0); - - var delayStyle; - if (flags.applyTransitionDelay) { - timings.transitionDelay = relativeDelay; - delayStyle = getCssDelayStyle(relativeDelay); - temporaryStyles.push(delayStyle); - node.style[delayStyle[0]] = delayStyle[1]; - } - - if (flags.applyAnimationDelay) { - timings.animationDelay = relativeDelay; - delayStyle = getCssDelayStyle(relativeDelay, true); - temporaryStyles.push(delayStyle); - node.style[delayStyle[0]] = delayStyle[1]; - } + timings.animationDelay = relativeDelay; + delayStyle = getCssDelayStyle(relativeDelay, true); + temporaryStyles.push(delayStyle); + node.style[delayStyle[0]] = delayStyle[1]; } maxDelayTime = maxDelay * ONE_SECOND; @@ -1251,17 +1332,52 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } startTime = Date.now(); - element.on(events.join(' '), onAnimationProgress); - $timeout(onAnimationExpired, maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime); + var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime; + var endTime = startTime + timerTime; - applyAnimationToStyles(element, options); + var animationsData = element.data(ANIMATE_TIMER_KEY) || []; + var setupFallbackTimer = true; + if (animationsData.length) { + var currentTimerData = animationsData[0]; + setupFallbackTimer = endTime > currentTimerData.expectedEndTime; + if (setupFallbackTimer) { + $timeout.cancel(currentTimerData.timer); + } else { + animationsData.push(close); + } + } + + if (setupFallbackTimer) { + var timer = $timeout(onAnimationExpired, timerTime, false); + animationsData[0] = { + timer: timer, + expectedEndTime: endTime + }; + animationsData.push(close); + element.data(ANIMATE_TIMER_KEY, animationsData); + } + + element.on(events.join(' '), onAnimationProgress); + if (options.to) { + if (options.cleanupStyles) { + registerRestorableStyles(restoreStyles, node, Object.keys(options.to)); + } + applyAnimationToStyles(element, options); + } } function onAnimationExpired() { - // although an expired animation is a failed animation, getting to - // this outcome is very easy if the CSS code screws up. Therefore we - // should still continue normally as if the animation completed correctly. - close(); + var animationsData = element.data(ANIMATE_TIMER_KEY); + + // this will be false in the event that the element was + // removed from the DOM (via a leave animation or something + // similar) + if (animationsData) { + for (var i = 1; i < animationsData.length; i++) { + animationsData[i](); + } + element.removeData(ANIMATE_TIMER_KEY); + } } function onAnimationProgress(event) { @@ -1288,7 +1404,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } } } - } + }; }]; }]; @@ -1301,16 +1417,27 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out'; var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in'; - this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$document', '$sniffer', - function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $document, $sniffer) { + function isDocumentFragment(node) { + return node.parentNode && node.parentNode.nodeType === 11; + } + + this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document', + function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) { // only browsers that support these properties can render animations if (!$sniffer.animations && !$sniffer.transitions) return noop; - var bodyNode = getDomNode($document).body; + var bodyNode = $document[0].body; var rootNode = getDomNode($rootElement); - var rootBodyElement = jqLite(bodyNode.parentNode === rootNode ? bodyNode : rootNode); + var rootBodyElement = jqLite( + // this is to avoid using something that exists outside of the body + // we also special case the doc fragement case because our unit test code + // appends the $rootElement to the body after the app has been bootstrapped + isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode + ); + + var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); return function initDriverFn(animationDetails) { return animationDetails.from && animationDetails.to @@ -1462,8 +1589,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro } function prepareFromToAnchorAnimation(from, to, classes, anchors) { - var fromAnimation = prepareRegularAnimation(from); - var toAnimation = prepareRegularAnimation(to); + var fromAnimation = prepareRegularAnimation(from, noop); + var toAnimation = prepareRegularAnimation(to, noop); var anchorAnimations = []; forEach(anchors, function(anchor) { @@ -1519,19 +1646,23 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var options = animationDetails.options || {}; if (animationDetails.structural) { - // structural animations ensure that the CSS classes are always applied - // before the detection starts. - options.structural = options.applyClassesEarly = true; + options.event = animationDetails.event; + options.structural = true; + options.applyClassesEarly = true; // we special case the leave animation since we want to ensure that // the element is removed as soon as the animation is over. Otherwise // a flicker might appear or the element may not be removed at all - options.event = animationDetails.event; - if (options.event === 'leave') { + if (animationDetails.event === 'leave') { options.onDone = options.domOperation; } - } else { - options.event = null; + } + + // We assign the preparationClasses as the actual animation event since + // the internals of $animateCss will just suffix the event token values + // with `-active` to trigger the animation. + if (options.preparationClasses) { + options.event = concatWithSpace(options.event, options.preparationClasses); } var animator = $animateCss(element, options); @@ -1550,8 +1681,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro // by the time... var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { - this.$get = ['$injector', '$$AnimateRunner', '$$rAFMutex', '$$jqLite', - function($injector, $$AnimateRunner, $$rAFMutex, $$jqLite) { + this.$get = ['$injector', '$$AnimateRunner', '$$jqLite', + function($injector, $$AnimateRunner, $$jqLite) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); // $animateJs(element, 'enter'); @@ -1908,8 +2039,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }); rules.skip.push(function(element, newAnimation, currentAnimation) { - // if there is a current animation then skip the class-based animation - return currentAnimation.structural && !newAnimation.structural; + // if there is an ongoing current animation then don't even bother running the class-based animation + return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural; }); rules.cancel.push(function(element, newAnimation, currentAnimation) { @@ -1932,15 +2063,32 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }); this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap', - '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', + '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow', function($$rAF, $rootScope, $rootElement, $document, $$HashMap, - $$animation, $$AnimateRunner, $templateRequest, $$jqLite) { + $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) { var activeAnimationsLookup = new $$HashMap(); var disabledElementsLookup = new $$HashMap(); - var animationsEnabled = null; + function postDigestTaskFactory() { + var postDigestCalled = false; + return function(fn) { + // we only issue a call to postDigest before + // it has first passed. This prevents any callbacks + // from not firing once the animation has completed + // since it will be out of the digest cycle. + if (postDigestCalled) { + fn(); + } else { + $rootScope.$$postDigest(function() { + postDigestCalled = true; + fn(); + }); + } + }; + } + // Wait until all directive and route-related templates are downloaded and // compiled. The $templateRequest.totalPendingRequests variable keeps track of // all of the remote templates being currently downloaded. If there are no @@ -1970,8 +2118,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } ); - var bodyElement = jqLite($document[0].body); - var callbackRegistry = {}; // remember that the classNameFilter is set during the provider/config @@ -1989,8 +2135,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return mergeAnimationOptions(element, options, {}); } - function findCallbacks(element, event) { + function findCallbacks(parent, element, event) { var targetNode = getDomNode(element); + var targetParentNode = getDomNode(parent); var matches = []; var entries = callbackRegistry[event]; @@ -1998,6 +2145,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { forEach(entries, function(entry) { if (entry.node.contains(targetNode)) { matches.push(entry.callback); + } else if (event === 'leave' && entry.node.contains(targetParentNode)) { + matches.push(entry.callback); } }); } @@ -2005,14 +2154,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return matches; } - function triggerCallback(event, element, phase, data) { - $$rAF(function() { - forEach(findCallbacks(element, event), function(callback) { - callback(element, phase, data); - }); - }); - } - return { on: function(event, container, callback) { var node = extractElementNode(container); @@ -2107,22 +2248,25 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // These methods will become available after the digest has passed var runner = new $$AnimateRunner(); - // there are situations where a directive issues an animation for - // a jqLite wrapper that contains only comment nodes... If this - // happens then there is no way we can perform an animation - if (!node) { - close(); - return runner; - } + // this is used to trigger callbacks in postDigest mode + var runInNextPostDigestOrNow = postDigestTaskFactory(); if (isArray(options.addClass)) { options.addClass = options.addClass.join(' '); } + if (options.addClass && !isString(options.addClass)) { + options.addClass = null; + } + if (isArray(options.removeClass)) { options.removeClass = options.removeClass.join(' '); } + if (options.removeClass && !isString(options.removeClass)) { + options.removeClass = null; + } + if (options.from && !isObject(options.from)) { options.from = null; } @@ -2131,6 +2275,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { options.to = null; } + // there are situations where a directive issues an animation for + // a jqLite wrapper that contains only comment nodes... If this + // happens then there is no way we can perform an animation + if (!node) { + close(); + return runner; + } + var className = [node.className, options.addClass, options.removeClass].join(' '); if (!isAnimatableClassName(className)) { close(); @@ -2195,8 +2347,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // method which will call the runner methods in async. existingAnimation.close(); } else { - // this will merge the existing animation options into this new follow-up animation - mergeAnimationOptions(element, newAnimation.options, existingAnimation.options); + // this will merge the new animation options into existing animation options + mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); + return existingAnimation.runner; } } else { // a joined animation means that this animation will take over the existing one @@ -2207,9 +2360,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { if (existingAnimation.state === RUNNING_STATE) { normalizeAnimationOptions(element, options); } else { + applyGeneratedPreparationClasses(element, isStructural ? event : null, options); + event = newAnimation.event = existingAnimation.event; options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); - return runner; + + //we return the same runner since only the option values of this animation will + //be fed into the `existingAnimation`. + return existingAnimation.runner; } } } @@ -2235,10 +2393,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return runner; } - if (isStructural) { - closeParentClassBasedAnimations(parent); - } - // the counter keeps track of cancelled animations var counter = (existingAnimation.counter || 0) + 1; newAnimation.counter = counter; @@ -2296,12 +2450,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { ? 'setClass' : animationDetails.event; - if (animationDetails.structural) { - closeParentClassBasedAnimations(parentElement); - } - markElementAnimationState(element, RUNNING_STATE); var realRunner = $$animation(element, event, animationDetails.options); + realRunner.done(function(status) { close(!status); var animationDetails = activeAnimationsLookup.get(node); @@ -2320,11 +2471,25 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return runner; function notifyProgress(runner, event, phase, data) { - triggerCallback(event, element, phase, data); + runInNextPostDigestOrNow(function() { + var callbacks = findCallbacks(parent, element, event); + if (callbacks.length) { + // do not optimize this call here to RAF because + // we don't know how heavy the callback code here will + // be and if this code is buffered then this can + // lead to a performance regression. + $$rAF(function() { + forEach(callbacks, function(callback) { + callback(element, phase, data); + }); + }); + } + }); runner.progress(event, phase, data); } function close(reject) { // jshint ignore:line + clearGeneratedClasses(element, options); applyAnimationClasses(element, options); applyAnimationStyles(element, options); options.domOperation(); @@ -2361,36 +2526,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB); } - function closeParentClassBasedAnimations(startingElement) { - var parentNode = getDomNode(startingElement); - do { - if (!parentNode || parentNode.nodeType !== ELEMENT_NODE) break; - - var animationDetails = activeAnimationsLookup.get(parentNode); - if (animationDetails) { - examineParentAnimation(parentNode, animationDetails); - } - - parentNode = parentNode.parentNode; - } while (true); - - // since animations are detected from CSS classes, we need to flush all parent - // class-based animations so that the parent classes are all present for child - // animations to properly function (otherwise any CSS selectors may not work) - function examineParentAnimation(node, animationDetails) { - // enter/leave/move always have priority - if (animationDetails.structural || !hasAnimationClasses(animationDetails.options)) return; - - if (animationDetails.state === RUNNING_STATE) { - animationDetails.runner.end(); - } - clearElementAnimationState(node); - } - } - function areAnimationsAllowed(element, parentElement, event) { - var bodyElementDetected = false; - var rootElementDetected = false; + var bodyElement = jqLite($document[0].body); + var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML'; + var rootElementDetected = isMatchingElement(element, $rootElement); var parentAnimationDetected = false; var animateChildren; @@ -2471,19 +2610,34 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }]; }]; -var $$rAFMutexFactory = ['$$rAF', function($$rAF) { +var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) { + var waitQueue = []; + + function waitForTick(fn) { + waitQueue.push(fn); + if (waitQueue.length > 1) return; + $$rAF(function() { + for (var i = 0; i < waitQueue.length; i++) { + waitQueue[i](); + } + waitQueue = []; + }); + } + return function() { var passed = false; - $$rAF(function() { + waitForTick(function() { passed = true; }); - return function(fn) { - passed ? fn() : $$rAF(fn); + return function(callback) { + passed ? callback() : waitForTick(callback); }; }; }]; -var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) { +var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun', + function($q, $sniffer, $$animateAsyncRun) { + var INITIAL_STATE = 0; var DONE_PENDING_STATE = 1; var DONE_COMPLETE_STATE = 2; @@ -2528,7 +2682,7 @@ var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) { this.setHost(host); this._doneCallbacks = []; - this._runInAnimationFrame = $$rAFMutex(); + this._runInAnimationFrame = $$animateAsyncRun(); this._state = 0; } @@ -2640,15 +2794,93 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { return element.data(RUNNER_STORAGE_KEY); } - this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$rAFScheduler', - function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$rAFScheduler) { + this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler', + function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) { var animationQueue = []; var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - var totalPendingClassBasedAnimations = 0; - var totalActiveClassBasedAnimations = 0; - var classBasedAnimationsQueue = []; + function sortAnimations(animations) { + var tree = { children: [] }; + var i, lookup = new $$HashMap(); + + // this is done first beforehand so that the hashmap + // is filled with a list of the elements that will be animated + for (i = 0; i < animations.length; i++) { + var animation = animations[i]; + lookup.put(animation.domNode, animations[i] = { + domNode: animation.domNode, + fn: animation.fn, + children: [] + }); + } + + for (i = 0; i < animations.length; i++) { + processNode(animations[i]); + } + + return flatten(tree); + + function processNode(entry) { + if (entry.processed) return entry; + entry.processed = true; + + var elementNode = entry.domNode; + var parentNode = elementNode.parentNode; + lookup.put(elementNode, entry); + + var parentEntry; + while (parentNode) { + parentEntry = lookup.get(parentNode); + if (parentEntry) { + if (!parentEntry.processed) { + parentEntry = processNode(parentEntry); + } + break; + } + parentNode = parentNode.parentNode; + } + + (parentEntry || tree).children.push(entry); + return entry; + } + + function flatten(tree) { + var result = []; + var queue = []; + var i; + + for (i = 0; i < tree.children.length; i++) { + queue.push(tree.children[i]); + } + + var remainingLevelEntries = queue.length; + var nextLevelEntries = 0; + var row = []; + + for (i = 0; i < queue.length; i++) { + var entry = queue[i]; + if (remainingLevelEntries <= 0) { + remainingLevelEntries = nextLevelEntries; + nextLevelEntries = 0; + result.push(row); + row = []; + } + row.push(entry.fn); + entry.children.forEach(function(childEntry) { + nextLevelEntries++; + queue.push(childEntry); + }); + remainingLevelEntries--; + } + + if (row.length) { + result.push(row); + } + + return result; + } + } // TODO(matsko): document the signature in a better way return function(element, event, options) { @@ -2678,19 +2910,12 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { options.tempClasses = null; } - var classBasedIndex; - if (!isStructural) { - classBasedIndex = totalPendingClassBasedAnimations; - totalPendingClassBasedAnimations += 1; - } - animationQueue.push({ // this data is used by the postDigest code and passed into // the driver step function element: element, classes: classes, event: event, - classBasedIndex: classBasedIndex, structural: isStructural, options: options, beforeStart: beforeStart, @@ -2705,10 +2930,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { if (animationQueue.length > 1) return runner; $rootScope.$$postDigest(function() { - totalActiveClassBasedAnimations = totalPendingClassBasedAnimations; - totalPendingClassBasedAnimations = 0; - classBasedAnimationsQueue.length = 0; - var animations = []; forEach(animationQueue, function(entry) { // the element was destroyed early on which removed the runner @@ -2716,67 +2937,58 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { // at all and it already has been closed due to destruction. if (getRunner(entry.element)) { animations.push(entry); + } else { + entry.close(); } }); // now any future animations will be in another postDigest animationQueue.length = 0; - forEach(groupAnimations(animations), function(animationEntry) { - if (animationEntry.structural) { - triggerAnimationStart(); - } else { - classBasedAnimationsQueue.push({ - node: getDomNode(animationEntry.element), - fn: triggerAnimationStart - }); + var groupedAnimations = groupAnimations(animations); + var toBeSortedAnimations = []; - if (animationEntry.classBasedIndex === totalActiveClassBasedAnimations - 1) { - // we need to sort each of the animations in order of parent to child - // relationships. This ensures that the child classes are applied at the - // right time. - classBasedAnimationsQueue = classBasedAnimationsQueue.sort(function(a,b) { - return b.node.contains(a.node); - }).map(function(entry) { - return entry.fn; - }); + forEach(groupedAnimations, function(animationEntry) { + toBeSortedAnimations.push({ + domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element), + fn: function triggerAnimationStart() { + // it's important that we apply the `ng-animate` CSS class and the + // temporary classes before we do any driver invoking since these + // CSS classes may be required for proper CSS detection. + animationEntry.beforeStart(); - $$rAFScheduler(classBasedAnimationsQueue); - } - } + var startAnimationFn, closeFn = animationEntry.close; - function triggerAnimationStart() { - // it's important that we apply the `ng-animate` CSS class and the - // temporary classes before we do any driver invoking since these - // CSS classes may be required for proper CSS detection. - animationEntry.beforeStart(); + // in the event that the element was removed before the digest runs or + // during the RAF sequencing then we should not trigger the animation. + var targetElement = animationEntry.anchors + ? (animationEntry.from.element || animationEntry.to.element) + : animationEntry.element; - var startAnimationFn, closeFn = animationEntry.close; + if (getRunner(targetElement)) { + var operation = invokeFirstDriver(animationEntry); + if (operation) { + startAnimationFn = operation.start; + } + } - // in the event that the element was removed before the digest runs or - // during the RAF sequencing then we should not trigger the animation. - var targetElement = animationEntry.anchors - ? (animationEntry.from.element || animationEntry.to.element) - : animationEntry.element; - - if (getRunner(targetElement) && getDomNode(targetElement).parentNode) { - var operation = invokeFirstDriver(animationEntry); - if (operation) { - startAnimationFn = operation.start; + if (!startAnimationFn) { + closeFn(); + } else { + var animationRunner = startAnimationFn(); + animationRunner.done(function(status) { + closeFn(!status); + }); + updateAnimationRunners(animationEntry, animationRunner); } } - - if (!startAnimationFn) { - closeFn(); - } else { - var animationRunner = startAnimationFn(); - animationRunner.done(function(status) { - closeFn(!status); - }); - updateAnimationRunners(animationEntry, animationRunner); - } - } + }); }); + + // we need to sort each of the animations in order of parent to child + // relationships. This ensures that the child classes are applied at the + // right time. + $$rAFScheduler(sortAnimations(toBeSortedAnimations)); }); return runner; @@ -2963,7 +3175,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { /* global angularAnimateModule: true, - $$rAFMutexFactory, + $$AnimateAsyncRunFactory, $$rAFSchedulerFactory, $$AnimateChildrenDirective, $$AnimateRunnerFactory, @@ -2981,7 +3193,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * @description * * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via - * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` then the animation hooks are enabled for an Angular app. + * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app. * *
    * @@ -3014,7 +3226,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation. * - * The example below shows how an `enter` animation can be made possible on a element using `ng-if`: + * The example below shows how an `enter` animation can be made possible on an element using `ng-if`: * * ```html *
    @@ -3149,8 +3361,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * /* this will have a 100ms delay between each successive leave animation */ * transition-delay: 0.1s; * - * /* in case the stagger doesn't work then the duration value - * must be set to 0 to avoid an accidental CSS inheritance */ + * /* As of 1.4.4, this must always be set: it signals ngAnimate + * to not accidentally inherit a delay property from another CSS class */ * transition-duration: 0s; * } * .my-animation.ng-enter.ng-enter-active { @@ -3251,7 +3463,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * jQuery(element).fadeOut(1000, doneFn); * } * } - * }] + * }]); * ``` * * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as @@ -3282,7 +3494,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * // do some cool animation and call the doneFn * } * } - * }] + * }]); * ``` * * ## CSS + JS Animations Together @@ -3304,7 +3516,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * jQuery(element).slideIn(1000, doneFn); * } * } - * }] + * }]); * ``` * * ```css @@ -3324,16 +3536,15 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * ```js * myModule.animation('.slide', ['$animateCss', function($animateCss) { * return { - * enter: function(element, doneFn) { + * enter: function(element) { * // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`. - * var runner = $animateCss(element, { + * return $animateCss(element, { * event: 'enter', * structural: true - * }).start(); -* runner.done(doneFn); + * }); * } * } - * }] + * }]); * ``` * * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework. @@ -3345,18 +3556,17 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * ```js * myModule.animation('.slide', ['$animateCss', function($animateCss) { * return { - * enter: function(element, doneFn) { - * var runner = $animateCss(element, { + * enter: function(element) { + * return $animateCss(element, { * event: 'enter', + * structural: true, * addClass: 'maroon-setting', * from: { height:0 }, * to: { height: 200 } - * }).start(); - * - * runner.done(doneFn); + * }); * } * } - * }] + * }]); * ``` * * Now we can fill in the rest via our transition CSS code: @@ -3698,15 +3908,14 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { * @description * The ngAnimate `$animate` service documentation is the same for the core `$animate` service. * - * Click here {@link ng.$animate $animate to learn more about animations with `$animate`}. + * Click here {@link ng.$animate to learn more about animations with `$animate`}. */ angular.module('ngAnimate', []) .directive('ngAnimateChildren', $$AnimateChildrenDirective) - - .factory('$$rAFMutex', $$rAFMutexFactory) .factory('$$rAFScheduler', $$rAFSchedulerFactory) .factory('$$AnimateRunner', $$AnimateRunnerFactory) + .factory('$$animateAsyncRun', $$AnimateAsyncRunFactory) .provider('$$animateQueue', $$AnimateQueueProvider) .provider('$$animation', $$AnimationProvider) diff --git a/awx/ui/client/lib/angular-animate/angular-animate.min.js b/awx/ui/client/lib/angular-animate/angular-animate.min.js index a99eac13cc..9461603d04 100644 --- a/awx/ui/client/lib/angular-animate/angular-animate.min.js +++ b/awx/ui/client/lib/angular-animate/angular-animate.min.js @@ -1,52 +1,56 @@ /* - AngularJS v1.4.3 + AngularJS v1.4.8 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT */ -(function(F,t,W){'use strict';function ua(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function va(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ea(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function ba(a,b,c){var d="";a=X(a)?a:a&&U(a)&&a.length?a.split(/\s+/):[];u(a,function(a,s){a&&0=F&&b>=J&&(C=!0,m())}if(!K)if(g.parentNode){var x,p=[],k=function(a){if(C)D&&a&&(D=!1,m());else if(D=!a,y.animationDuration)if(a= -ma(g,D),D)l.push(a);else{var b=l,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0=a&&(a=m,m=0,b.push(e),e=[]);e.push(h.fn);h.children.forEach(function(a){m++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var $=[],u=N(a);return function(g,C,D){function K(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];q(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b} +function l(a){var b=[],c={};q(a,function(a,f){var d=B(a.element),t=0<=["enter","move"].indexOf(a.event),d=a.structural?K(d):[];if(d.length){var m=t?"to":"from";q(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][m]={animationID:f,element:L(a)}})}else b.push(a)});var f={},d={};q(c,function(c,m){var w=c.from,e=c.to;if(w&&e){var h=a[w.animationID],g=a[e.animationID],x=w.animationID.toString();if(!d[x]){var A=d[x]={structural:!0,beforeStart:function(){h.beforeStart();g.beforeStart()}, +close:function(){h.close();g.close()},classes:y(h.classes,g.classes),from:h,to:g,anchors:[]};A.classes.length?b.push(A):(b.push(h),b.push(g))}d[x].anchors.push({out:w.element,"in":e.element})}else w=w?w.animationID:e.animationID,e=w.toString(),f[e]||(f[e]=!0,b.push(a[w]))});return b}function y(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],f=0;fG.expectedEndTime)?h.cancel(G.timer):l.push(m)}r&&(v=h(d,v,!1),l[0]={timer:v,expectedEndTime:k},l.push(m),a.data("$$animateCss",l));a.on(x.join(" "),g);c.to&&(c.cleanupStyles&&Ea(t,n,Object.keys(c.to)),za(a,c))}}function d(){var b=a.data("$$animateCss");if(b){for(var c=1;c=N&&b>=J&&(va=!0,m())}if(!ga)if(n.parentNode){var A,x=[],l=function(a){if(va)k&&a&&(k=!1,m());else if(k=!a,E.animationDuration)if(a=na(n,k),k)y.push(a);else{var b=y,c=b.indexOf(a);0<=a&&b.splice(c,1)}},v=0=1.0.8", + "angular-ui-router": ">=0.2.0" + }, + "devDependencies": { + "bootstrap": "~2.3.2", + "angular-ui-bootstrap-bower": "~0.8.0", + "underscore": "~1.5.1", + "angular-mocks": ">=1.0.8", + "angular-sanitize": ">=1.0.8" + }, + "homepage": "https://github.com/ncuillery/angular-breadcrumb", + "_release": "0.4.1", + "_resolution": { + "type": "version", + "tag": "v0.4.1", + "commit": "b291e06f4010ebebbb41ea2c14e73e236aa70930" + }, + "_source": "git://github.com/ncuillery/angular-breadcrumb.git", + "_target": "~0.4.1", + "_originalSource": "angular-breadcrumb", + "_direct": true +} \ No newline at end of file diff --git a/awx/ui/client/lib/angular-breadcrumb/.editorconfig b/awx/ui/client/lib/angular-breadcrumb/.editorconfig new file mode 100644 index 0000000000..16480f1870 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/awx/ui/client/lib/angular-breadcrumb/.npmignore b/awx/ui/client/lib/angular-breadcrumb/.npmignore new file mode 100644 index 0000000000..86b98729db --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/.npmignore @@ -0,0 +1,15 @@ +sample +src +test +.idea +bower_components +coverage +testDependencies +.bowerrc +.coveralls.yml +.gitignore +.jshintrc +.travis.yml +gruntfile.js +karma.conf.js +libpeerconnection.log diff --git a/awx/ui/client/lib/angular-breadcrumb/CHANGELOG.md b/awx/ui/client/lib/angular-breadcrumb/CHANGELOG.md new file mode 100644 index 0000000000..6bec7b2db5 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/CHANGELOG.md @@ -0,0 +1,151 @@ + +### 0.4.1 (2015-08-09) + + +#### Features + +* add the scope-based ncyBreadcrumbIgnore flag ([934c5523](http://github.com/ncuillery/angular-breadcrumb/commit/934c5523208a9615d7cfa3abcb397bbe131332ac), closes [#42](http://github.com/ncuillery/angular-breadcrumb/issues/42), [#62](http://github.com/ncuillery/angular-breadcrumb/issues/42)) + + + +### 0.4.0 (2015-05-17) + + +#### Bug Fixes + +* **$breadcrumb:** Handle parents provided by StateObject references ([f4288d37](http://github.com/ncuillery/angular-breadcrumb/commit/f4288d375fd1090ffec1d67e85c6300d74d86d37), closes [#82](http://github.com/ncuillery/angular-breadcrumb/issues/82)) +* **ncyBreadcrumb:** + * Prevent memory leak when label is a binding ([264e10f6](http://github.com/ncuillery/angular-breadcrumb/commit/264e10f680e1bbb8d1e00cf500de39cac4222cfd), closes [#88](http://github.com/ncuillery/angular-breadcrumb/issues/88)) + * Removed trailing spaces from breadcrumb items([bc276ed5](http://github.com/ncuillery/angular-breadcrumb/commit/bc276ed5351a586d4a6dc83ada0687e6ca485344), closes [#77](http://github.com/ncuillery/angular-breadcrumb/issues/77)) + +#### Features + +* Add force to ncyBreadcrumb options ([31125a38](http://github.com/ncuillery/angular-breadcrumb/commit/31125a386d706dd76df807b3b02e1fccea38fb59), closes [#77](http://github.com/ncuillery/angular-breadcrumb/issues/78)) +* **ncyBreadcrumbText:** Add ncyBreadcrumbText directive ([82b2b443](http://github.com/ncuillery/angular-breadcrumb/commit/82b2b443fab220cd9ac7d3a8c90c1edc4291e54a), closes [#71](http://github.com/ncuillery/angular-breadcrumb/issues/71), [#83](http://github.com/ncuillery/angular-breadcrumb/issues/83)) + + + +### 0.3.3 (2014-12-16) + + +#### Bug Fixes + +* **ncyBreadcrumb:** define `$$templates` with var instead of attaching it to `window` ([c35c9d25](http://github.com/ncuillery/angular-breadcrumb/commit/c35c9d255b5e2585d225a961d1efdb51d18f6a55), closes [#55](http://github.com/ncuillery/angular-breadcrumb/issues/55)) + + + +### 0.3.2 (2014-11-15) + +* **npm:** nothing, it's only a blank release due to a network problem during the last `npm publish` (f...ing npm doesn't allow a republish with the same version number [npm-registry-couchapp#148](https://github.com/npm/npm-registry-couchapp/issues/148)). + + +### 0.3.1 (2014-11-15) + + +#### Bug Fixes + +* **npm:** update package.json after (unclean) npm publish ([ab8161c2](http://github.com/ncuillery/angular-breadcrumb/commit/ab8161c25f98613f725b5e5ff8fe147acd60b365), closes [#52](http://github.com/ncuillery/angular-breadcrumb/issues/52)) +* **sample:** Send correct url params for the room link in booking view ([876de49a](http://github.com/ncuillery/angular-breadcrumb/commit/876de49a9c5d6e2d75714a606238e9041ed49baf)) + + + +## 0.3.0 (2014-10-29) + + +#### Bug Fixes + +* organize state-level options in `ncyBreadcrumb` key instead of `data` ([1ea436d3](http://github.com/ncuillery/angular-breadcrumb/commit/1ea436d3f6d5470b7ae3e71e71259dbd2422bc00), closes [#30](http://github.com/ncuillery/angular-breadcrumb/issues/30)) +* curly braces appearing on title of sample app ([855e76cb](http://github.com/ncuillery/angular-breadcrumb/commit/855e76cb33fda607fa3caa230564b77b48262c40)) + + +#### Features + +* Add a global option to include abstract states ([6f0461ea](http://github.com/ncuillery/angular-breadcrumb/commit/6f0461ea7db36d8e10c29ed10de1f1c08d215a19), closes [#35](http://github.com/ncuillery/angular-breadcrumb/issues/35), [#28](http://github.com/ncuillery/angular-breadcrumb/issues/28)) +* **$breadcrumb:** + * Support url params when using `ncyBreadcrumb.parent` property ([55730045](http://github.com/ncuillery/angular-breadcrumb/commit/55730045dcf3b4fb1048c67f1e18953505563ed4), closes [#46](http://github.com/ncuillery/angular-breadcrumb/issues/46)) + * add the customization of the parent state with a function ([ada09015](http://github.com/ncuillery/angular-breadcrumb/commit/ada09015c49f05a94349dabf078f1ed621811aaa), closes [#32](http://github.com/ncuillery/angular-breadcrumb/issues/32)) +* **ncyBreadcrumbLast:** Add a new directive rendering the last step ([1eef24fb](http://github.com/ncuillery/angular-breadcrumb/commit/1eef24fbe862a1e3308181c38f50755843cf4426), closes [#37](http://github.com/ncuillery/angular-breadcrumb/issues/37)) + + +#### Breaking Changes + +* state-level options has been moved under the custom key +`ncyBreadcrumb` in state's configuration. + +To migrate the code follow the example below: +``` +// Before +$stateProvider.state('A', { + url: '/a', + data: { + ncyBreadcrumbLabel: 'State A' + } +}); +``` + +``` +// After +$stateProvider.state('A', { + url: '/a', + ncyBreadcrumb: { + label: 'State A' + } +}); +``` +See [API reference](https://github.com/ncuillery/angular-breadcrumb/wiki/API-Reference) for more informations. + ([1ea436d3](http://github.com/ncuillery/angular-breadcrumb/commit/1ea436d3f6d5470b7ae3e71e71259dbd2422bc00)) + + + +### 0.2.3 (2014-07-26) + + +#### Bug Fixes + +* **$breadcrumb:** use `$stateParams` in case of unhierarchical states ([1c3c05e0](http://github.com/ncuillery/angular-breadcrumb/commit/1c3c05e0acac191fe2e76db2ef18da339caefaaa), closes [#29](http://github.com/ncuillery/angular-breadcrumb/issues/29)) + + + +### 0.2.2 (2014-06-23) + + +#### Bug Fixes + +* catch the `$viewContentLoaded` earlier ([bb47dd54](http://github.com/ncuillery/angular-breadcrumb/commit/bb47dd54deb5efc579ccb9b1575e686803dee1c5), closes [#14](http://github.com/ncuillery/angular-breadcrumb/issues/14)) +* **sample:** + * make the CRU(D) about rooms working ([3ca89ec7](http://github.com/ncuillery/angular-breadcrumb/commit/3ca89ec771fd20dc4ab2d733612bdcfb96ced703)) + * prevent direct URL access to a day disabled in the datepicker ([95236916](http://github.com/ncuillery/angular-breadcrumb/commit/95236916e00b19464a3dfe3584ef1b18da9ffb25), closes [#17](http://github.com/ncuillery/angular-breadcrumb/issues/17)) + * use the same variable in the datepicker and from url params for state `booking.day` ([646f7060](http://github.com/ncuillery/angular-breadcrumb/commit/646f70607e494f0e5e3c2483ed69f689684b2742), closes [#16](http://github.com/ncuillery/angular-breadcrumb/issues/16)) + + +#### Features + +* **ncyBreadcrumb:** watch every expression founded in labels ([1363515e](http://github.com/ncuillery/angular-breadcrumb/commit/1363515e20977ce2f39a1f5e5e1d701f0d7af296), closes [#20](http://github.com/ncuillery/angular-breadcrumb/issues/20)) + + + +### 0.2.1 (2014-05-16) + + +#### Bug Fixes + +* **$breadcrumb:** check if a state has a parent when looking for an inheritated property ([77e668b5](http://github.com/ncuillery/angular-breadcrumb/commit/77e668b5eb759570a64c2a885e81580953af3201), closes [#11](http://github.com/ncuillery/angular-breadcrumb/issues/11)) + + + +### 0.2.0 (2014-05-08) + + +#### Bug Fixes + +* **$breadcrumb:** remove abstract states from breadcrumb ([8a06c5ab](http://github.com/ncuillery/angular-breadcrumb/commit/8a06c5abce749027d48f7309d1aabea1e447dfd5), closes [#8](http://github.com/ncuillery/angular-breadcrumb/issues/8)) +* **ncyBreadcrumb:** display the correct breadcrumb in case of direct access ([e1f455ba](http://github.com/ncuillery/angular-breadcrumb/commit/e1f455ba4def97d3fc76b53772867b5f9daf4232), closes [#10](http://github.com/ncuillery/angular-breadcrumb/issues/10)) + + +#### Features + +* **$breadcrumb:** + * add a configuration property for skipping a state in the breadcrumb ([dd255d90](http://github.com/ncuillery/angular-breadcrumb/commit/dd255d906c4231f44b48f066d4db197a9c6b9e27), closes [#9](http://github.com/ncuillery/angular-breadcrumb/issues/9)) + * allow chain of states customization ([028e493a](http://github.com/ncuillery/angular-breadcrumb/commit/028e493a1ebcae5ae60b8a9d42b949262000d7df), closes [#7](http://github.com/ncuillery/angular-breadcrumb/issues/7)) +* **ncyBreadcrumb:** add 'Element' declaration style '' ([b51441ea](http://github.com/ncuillery/angular-breadcrumb/commit/b51441eafb1659b782fea1f8668c7f455e1d6b4d)) + diff --git a/awx/ui/client/lib/angular-breadcrumb/CONTRIBUTING.md b/awx/ui/client/lib/angular-breadcrumb/CONTRIBUTING.md new file mode 100644 index 0000000000..720c4f142a --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/CONTRIBUTING.md @@ -0,0 +1,52 @@ +# Contributing to angular-breadcrumb + +I am very glad to see this project living with PR from contributors who trust in it. Here is some guidelines to keep the contributions useful and efficient. + +## Development hints + +### Installation +- Checkout the repository +- Run `npm install` +- Run `bower install` + +### Test running +This module uses the classic AngularJS stack with: + +- Karma (test runner) +- Jasmine (assertion framework) +- angular-mocks (AngularJS module for testing) + +Run the test with the grunt task `grunt test`. It runs the tests with different versions of AngularJS. + +### Test developing +Tests are build around modules with a specific `$stateProvider` configuration: + +- [Basic configuration](https://github.com/ncuillery/angular-breadcrumb/blob/master/test/mock/test-modules.js#L6): Basic definitions (no template, no controller) +- [Interpolation configuration](https://github.com/ncuillery/angular-breadcrumb/blob/master/test/mock/test-modules.js#L21): States with bindings in `ncyBreadcrumbLabel` +- [HTML configuration](https://github.com/ncuillery/angular-breadcrumb/blob/master/test/mock/test-modules.js#L36): States with HTML in `ncyBreadcrumbLabel` +- [Sample configuration](https://github.com/ncuillery/angular-breadcrumb/blob/master/test/mock/test-modules.js#L41): Bridge towards the sample app configuration for using in tests +- [UI-router's configuration](https://github.com/ncuillery/angular-breadcrumb/blob/master/test/mock/test-ui-router-sample.js#L9): Clone of the UI-router sample app (complemented with breadcrumb configuration) + +Theses modules are loaded by Karma and they are available in test specifications. + +Specifications are generally related to the directive `ncyBreadcrumb` or the service `$breadcrumb`. + +### Sample +If you are not familiar with JS testing. You can run the [sample](http://ncuillery.github.io/angular-breadcrumb/#/sample) locally for testing purposes by using `grunt sample`. Sources are live-reloaded after each changes. + +## Submitting a Pull Request +- Fork the [repository](https://github.com/ncuillery/angular-breadcrumb/) +- Make your changes in a new git branch following the coding rules below. +- Run the grunt default task (by typing `grunt` or `grunt default`): it will run the tests and build the module in `dist` directory) +- Commit the changes (including the `dist` directory) by using the commit conventions explained below. +- Push and make the PR + + +## Coding rules +- When making changes on the source file, please check that your changes are covered by the tests. If not, create a new test case. + + +## Commit conventions +angular-breadcrumb uses the same strict conventions as AngularJS and UI-router. These conventions are explained [here](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#-git-commit-guidelines). + +It is very important to fit these conventions especially for types `fix` and `feature` which are used by the CHANGELOG.md generation (it uses the [grunt-conventional-changelog](https://github.com/btford/grunt-conventional-changelog)). diff --git a/awx/ui/client/lib/angular-breadcrumb/Gruntfile.js b/awx/ui/client/lib/angular-breadcrumb/Gruntfile.js new file mode 100644 index 0000000000..744af4d211 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/Gruntfile.js @@ -0,0 +1,258 @@ +'use strict'; + +var LIVERELOAD_PORT = 35729; +var lrSnippet = require('connect-livereload')({ port: LIVERELOAD_PORT }); +var mountFolder = function (connect, dir) { + return connect.static(require('path').resolve(dir)); +}; + +module.exports = function (grunt) { + + // Project configuration. + grunt.initConfig({ + // Metadata. + pkg: grunt.file.readJSON('package.json'), + headerDev: '/*! <%= pkg.name %> - v<%= pkg.version %>-dev-<%= grunt.template.today("yyyy-mm-dd") %>\n', + headerRelease: '/*! <%= pkg.name %> - v<%= pkg.version %>\n', + banner: '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', + // Task configuration. + concat: { + dev: { + options: { + banner: '<%= headerDev %><%= banner %>\n(function (window, angular, undefined) {\n', + footer: '})(window, window.angular);\n', + stripBanners: true + }, + src: ['src/<%= pkg.name %>.js'], + dest: 'dist/<%= pkg.name %>.js' + }, + release: { + options: { + banner: '<%= headerRelease %><%= banner %>\n(function (window, angular, undefined) {\n', + footer: '})(window, window.angular);\n', + stripBanners: true + }, + src: ['src/<%= pkg.name %>.js'], + dest: 'release/<%= pkg.name %>.js' + } + }, + uglify: { + dev: { + options: { + banner: '<%= headerDev %><%= banner %>' + }, + src: '<%= concat.dev.dest %>', + dest: 'dist/<%= pkg.name %>.min.js' + }, + release: { + options: { + banner: '<%= headerRelease %><%= banner %>' + }, + src: '<%= concat.release.dest %>', + dest: 'release/<%= pkg.name %>.min.js' + } + }, + karma: { + unit: { + configFile: 'karma.conf.js' + } + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + gruntfile: { + src: 'Gruntfile.js' + }, + sources: { + options: { + jshintrc: 'src/.jshintrc' + }, + src: ['src/**/*.js'] + }, + test: { + src: ['test/**/*.js'] + } + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + sources: { + files: '<%= jshint.sources.src %>', + tasks: ['jshint:sources', 'karma'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'karma'] + }, + sample: { + options: { + livereload: LIVERELOAD_PORT + }, + tasks: 'copy:breadcrumb', + files: [ + 'sample/*.{css,js,html}', + 'sample/controllers/*.{css,js,html}', + 'sample/views/*.{css,js,html}', + 'src/*.js' + ] + } + }, + copy: { + breadcrumb: { + files: [ + { + flatten: true, + expand: true, + src: [ + 'src/angular-breadcrumb.js' + ], + dest: 'sample/asset/' + } + ] + }, + asset: { + files: [ + { + flatten: true, + expand: true, + src: [ + 'dist/angular-breadcrumb.js', + 'bower_components/angular/angular.js', + 'bower_components/angular-ui-router/release/angular-ui-router.js', + 'bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.js', + 'bower_components/bootstrap/docs/assets/css/bootstrap.css', + 'bower_components/underscore/underscore.js' + ], + dest: 'sample/asset/' + } + ] + }, + img: { + files: [ + { + flatten: true, + expand: true, + src: [ + 'bower_components/bootstrap.css/img/glyphicons-halflings.png' + ], + dest: 'sample/img/' + } + ] + } + }, + connect: { + options: { + port: 9000, + hostname: 'localhost' + }, + livereload: { + options: { + middleware: function (connect) { + return [ + lrSnippet, + mountFolder(connect, 'sample') + ]; + } + } + } + }, + open: { + server: { + url: 'http://localhost:<%= connect.options.port %>/index.html' + } + }, + bump: { + options: { + files: ['package.json', 'bower.json'], + updateConfigs: ['pkg'] + } + }, + clean: { + release: ["sample/*.zip"], + test: ["testDependencies/*"] + }, + compress: { + release: { + options: { + archive: 'sample/<%= pkg.name %>-<%= pkg.version %>.zip' + }, + files: [ + {expand: true, cwd: 'release/', src: ['*.js']} + ] + } + }, + replace: { + release: { + src: ['sample/views/home.html'], + overwrite: true, + replacements: [{ + from: /angular-breadcrumb-[0-9]+\.[0-9]+\.[0-9]+\.zip/g, + to: "angular-breadcrumb-<%= pkg.version %>.zip" + }, + { + from: /\([0-9]+\.[0-9]+\.[0-9]+\)/g, + to: "(<%= pkg.version %>)" + }] + } + }, + shell: { + testMinimal: { + command: 'bower install angular#=1.0.8 angular-mocks#=1.0.8 angular-sanitize#=1.0.8 angular-ui-router#=0.2.0 --config.directory=. --config.cwd=testDependencies' + }, + test1dot2: { + command: 'bower install angular#=1.2.18 angular-mocks#=1.2.18 angular-sanitize#=1.2.18 angular-ui-router#=0.2.15 --config.directory=. --config.cwd=testDependencies' + }, + testLatest: { + command: 'bower install angular angular-mocks angular-sanitize angular-ui-router --config.directory=. --config.cwd=testDependencies' + } + } + + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-bump'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-compress'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-conventional-changelog'); + grunt.loadNpmTasks('grunt-karma'); + grunt.loadNpmTasks('grunt-open'); + grunt.loadNpmTasks('grunt-shell'); + grunt.loadNpmTasks('grunt-text-replace'); + + grunt.registerTask('test', ['jshint', 'testMin', 'test1dot2', 'testLatest']); + grunt.registerTask('testMin', ['clean:test', 'shell:testMinimal', 'karma']); + grunt.registerTask('test1dot2', ['clean:test', 'shell:test1dot2', 'karma']); + grunt.registerTask('testLatest', ['clean:test', 'shell:testLatest', 'karma']); + + grunt.registerTask('default', ['test', 'concat:dev', 'uglify:dev']); + + grunt.registerTask('sample', ['concat:dev', 'copy:asset', 'copy:img', 'connect:livereload', 'open', 'watch']); + + grunt.registerTask('release-prepare', 'Update all files for a release', function(target) { + if(!target) { + target = 'patch'; + } + grunt.task.run( + 'bump-only:' + target, // Version update + 'test', // Tests + 'concat:release', // Concat with release banner + 'uglify:release', // Minify with release banner + 'changelog', // Changelog update + 'clean:release', // Delete old version download file + 'compress:release', // New version download file + 'replace:release' // Update version in download button (link & label) + ); + }); + +}; diff --git a/awx/ui/client/lib/angular-breadcrumb/LICENSE b/awx/ui/client/lib/angular-breadcrumb/LICENSE new file mode 100644 index 0000000000..f0774fcf13 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/LICENSE @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2013 Nicolas Cuillery + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/awx/ui/client/lib/angular-breadcrumb/bower.json b/awx/ui/client/lib/angular-breadcrumb/bower.json new file mode 100644 index 0000000000..3a0a2f944c --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/bower.json @@ -0,0 +1,33 @@ +{ + "name": "angular-breadcrumb", + "description": "AngularJS module that generates a breadcrumb from ui-router's states", + "version": "0.4.1", + "main": "release/angular-breadcrumb.js", + "ignore": [ + "sample", + "src", + "test", + ".bowerrc", + ".coveralls.yml", + ".gitignore", + ".jshintrc", + ".travis.yml", + "gruntfile.js", + "bower.json", + "karma.conf.js", + "libpeerconnection.log", + "package.json", + "README.md" + ], + "dependencies": { + "angular": ">=1.0.8", + "angular-ui-router": ">=0.2.0" + }, + "devDependencies": { + "bootstrap": "~2.3.2", + "angular-ui-bootstrap-bower": "~0.8.0", + "underscore": "~1.5.1", + "angular-mocks": ">=1.0.8", + "angular-sanitize": ">=1.0.8" + } +} diff --git a/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.js b/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.js new file mode 100644 index 0000000000..e20ca158ec --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.js @@ -0,0 +1,369 @@ +/*! angular-breadcrumb - v0.4.0-dev-2015-08-07 +* http://ncuillery.github.io/angular-breadcrumb +* Copyright (c) 2015 Nicolas Cuillery; Licensed MIT */ + +(function (window, angular, undefined) { +'use strict'; + +function isAOlderThanB(scopeA, scopeB) { + if(angular.equals(scopeA.length, scopeB.length)) { + return scopeA > scopeB; + } else { + return scopeA.length > scopeB.length; + } +} + +function parseStateRef(ref) { + var parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) { throw new Error("Invalid state ref '" + ref + "'"); } + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function $Breadcrumb() { + + var $$options = { + prefixStateName: null, + template: 'bootstrap3', + templateUrl: null, + includeAbstract : false + }; + + this.setOptions = function(options) { + angular.extend($$options, options); + }; + + this.$get = ['$state', '$stateParams', '$rootScope', function($state, $stateParams, $rootScope) { + + var $lastViewScope = $rootScope; + + // Early catch of $viewContentLoaded event + $rootScope.$on('$viewContentLoaded', function (event) { + // With nested views, the event occur several times, in "wrong" order + if(!event.targetScope.ncyBreadcrumbIgnore && + isAOlderThanB(event.targetScope.$id, $lastViewScope.$id)) { + $lastViewScope = event.targetScope; + } + }); + + // Get the parent state + var $$parentState = function(state) { + // Check if state has explicit parent OR we try guess parent from its name + var parent = state.parent || (/^(.+)\.[^.]+$/.exec(state.name) || [])[1]; + var isObjectParent = typeof parent === "object"; + // if parent is a object reference, then extract the name + return isObjectParent ? parent.name : parent; + }; + + // Add the state in the chain if not already in and if not abstract + var $$addStateInChain = function(chain, stateRef) { + var conf, + parentParams, + ref = parseStateRef(stateRef), + force = false, + skip = false; + + for(var i=0, l=chain.length; i' + + '
  • ' + + '{{step.ncyBreadcrumbLabel}}' + + '{{step.ncyBreadcrumbLabel}}' + + '/' + + '
  • ' + + '', + bootstrap3: '' + }; + + return { + restrict: 'AE', + replace: true, + scope: {}, + template: $breadcrumb.getTemplate($$templates), + templateUrl: $breadcrumb.getTemplateUrl(), + link: { + post: function postLink(scope) { + var labelWatchers = []; + + var renderBreadcrumb = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + scope.steps = $breadcrumb.getStatesChain(); + angular.forEach(scope.steps, function (step) { + if (step.ncyBreadcrumb && step.ncyBreadcrumb.label) { + var parseLabel = $interpolate(step.ncyBreadcrumb.label); + step.ncyBreadcrumbLabel = parseLabel(viewScope); + // Watcher for further viewScope updates + registerWatchers(labelWatchers, parseLabel, viewScope, step); + } else { + step.ncyBreadcrumbLabel = step.name; + } + }); + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderBreadcrumb(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderBreadcrumb(); + } + } + }; +} +BreadcrumbDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +function BreadcrumbLastDirective($interpolate, $breadcrumb, $rootScope) { + + return { + restrict: 'A', + scope: {}, + template: '{{ncyBreadcrumbLabel}}', + compile: function(cElement, cAttrs) { + + // Override the default template if ncyBreadcrumbLast has a value + var template = cElement.attr(cAttrs.$attr.ncyBreadcrumbLast); + if(template) { + cElement.html(template); + } + + return { + post: function postLink(scope) { + var labelWatchers = []; + + var renderLabel = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + var lastStep = $breadcrumb.getLastStep(); + if(lastStep) { + scope.ncyBreadcrumbLink = lastStep.ncyBreadcrumbLink; + if (lastStep.ncyBreadcrumb && lastStep.ncyBreadcrumb.label) { + var parseLabel = $interpolate(lastStep.ncyBreadcrumb.label); + scope.ncyBreadcrumbLabel = parseLabel(viewScope); + // Watcher for further viewScope updates + // Tricky last arg: the last step is the entire scope of the directive ! + registerWatchers(labelWatchers, parseLabel, viewScope, scope); + } else { + scope.ncyBreadcrumbLabel = lastStep.name; + } + } + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderLabel(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderLabel(); + } + }; + + } + }; +} +BreadcrumbLastDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +function BreadcrumbTextDirective($interpolate, $breadcrumb, $rootScope) { + + return { + restrict: 'A', + scope: {}, + template: '{{ncyBreadcrumbChain}}', + + compile: function(cElement, cAttrs) { + // Override the default template if ncyBreadcrumbText has a value + var template = cElement.attr(cAttrs.$attr.ncyBreadcrumbText); + if(template) { + cElement.html(template); + } + + var separator = cElement.attr(cAttrs.$attr.ncyBreadcrumbTextSeparator) || ' / '; + + return { + post: function postLink(scope) { + var labelWatchers = []; + + var registerWatchersText = function(labelWatcherArray, interpolationFunction, viewScope) { + angular.forEach(getExpression(interpolationFunction), function(expression) { + var watcher = viewScope.$watch(expression, function(newValue, oldValue) { + if (newValue !== oldValue) { + renderLabel(); + } + }); + labelWatcherArray.push(watcher); + }); + }; + + var renderLabel = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + var steps = $breadcrumb.getStatesChain(); + var combinedLabels = []; + angular.forEach(steps, function (step) { + if (step.ncyBreadcrumb && step.ncyBreadcrumb.label) { + var parseLabel = $interpolate(step.ncyBreadcrumb.label); + combinedLabels.push(parseLabel(viewScope)); + // Watcher for further viewScope updates + registerWatchersText(labelWatchers, parseLabel, viewScope); + } else { + combinedLabels.push(step.name); + } + }); + + scope.ncyBreadcrumbChain = combinedLabels.join(separator); + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderLabel(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderLabel(); + } + }; + + } + }; +} +BreadcrumbTextDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +angular.module('ncy-angular-breadcrumb', ['ui.router.state']) + .provider('$breadcrumb', $Breadcrumb) + .directive('ncyBreadcrumb', BreadcrumbDirective) + .directive('ncyBreadcrumbLast', BreadcrumbLastDirective) + .directive('ncyBreadcrumbText', BreadcrumbTextDirective); +})(window, window.angular); diff --git a/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.min.js b/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.min.js new file mode 100644 index 0000000000..1da045d879 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/dist/angular-breadcrumb.min.js @@ -0,0 +1,4 @@ +/*! angular-breadcrumb - v0.4.0-dev-2015-08-07 +* http://ncuillery.github.io/angular-breadcrumb +* Copyright (c) 2015 Nicolas Cuillery; Licensed MIT */ +!function(a,b,c){"use strict";function d(a,c){return b.equals(a.length,c.length)?a>c:a.length>c.length}function e(a){var b=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/);if(!b||4!==b.length)throw new Error("Invalid state ref '"+a+"'");return{state:b[1],paramExpr:b[3]||null}}function f(){var a={prefixStateName:null,template:"bootstrap3",templateUrl:null,includeAbstract:!1};this.setOptions=function(c){b.extend(a,c)},this.$get=["$state","$stateParams","$rootScope",function(b,f,g){var h=g;g.$on("$viewContentLoaded",function(a){!a.targetScope.ncyBreadcrumbIgnore&&d(a.targetScope.$id,h.$id)&&(h=a.targetScope)});var i=function(a){var b=a.parent||(/^(.+)\.[^.]+$/.exec(a.name)||[])[1],c="object"==typeof b;return c?b.name:b},j=function(c,d){for(var g,i,j=e(d),k=!1,l=!1,m=0,n=c.length;n>m;m+=1)if(c[m].name===j.state)return;g=b.get(j.state),g.ncyBreadcrumb&&(g.ncyBreadcrumb.force&&(k=!0),g.ncyBreadcrumb.skip&&(l=!0)),g["abstract"]&&!a.includeAbstract&&!k||l||(j.paramExpr&&(i=h.$eval(j.paramExpr)),g.ncyBreadcrumbLink=b.href(j.state,i||f||{}),c.unshift(g))},k=function(a){var c=e(a),d=b.get(c.state);if(d.ncyBreadcrumb&&d.ncyBreadcrumb.parent){var f="function"==typeof d.ncyBreadcrumb.parent,g=f?d.ncyBreadcrumb.parent(h):d.ncyBreadcrumb.parent;if(g)return g}return i(d)};return{getTemplate:function(b){return a.templateUrl?null:b[a.template]?b[a.template]:a.template},getTemplateUrl:function(){return a.templateUrl},getStatesChain:function(c){for(var d=[],e=b.$current.self.name;e;e=k(e))if(j(d,e),c&&d.length)return d;return a.prefixStateName&&j(d,a.prefixStateName),d},getLastStep:function(){var a=this.getStatesChain(!0);return a.length?a[0]:c},$getLastViewScope:function(){return h}}}]}function g(a,c,d){var e={bootstrap2:'',bootstrap3:''};return{restrict:"AE",replace:!0,scope:{},template:c.getTemplate(e),templateUrl:c.getTemplateUrl(),link:{post:function(e){var f=[],g=function(){l(f),f=[];var d=c.$getLastViewScope();e.steps=c.getStatesChain(),b.forEach(e.steps,function(b){if(b.ncyBreadcrumb&&b.ncyBreadcrumb.label){var c=a(b.ncyBreadcrumb.label);b.ncyBreadcrumbLabel=c(d),k(f,c,d,b)}else b.ncyBreadcrumbLabel=b.name})};d.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||g()}),g()}}}}function h(a,b,c){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbLabel}}",compile:function(d,e){var f=d.attr(e.$attr.ncyBreadcrumbLast);return f&&d.html(f),{post:function(d){var e=[],f=function(){l(e),e=[];var c=b.$getLastViewScope(),f=b.getLastStep();if(f)if(d.ncyBreadcrumbLink=f.ncyBreadcrumbLink,f.ncyBreadcrumb&&f.ncyBreadcrumb.label){var g=a(f.ncyBreadcrumb.label);d.ncyBreadcrumbLabel=g(c),k(e,g,c,d)}else d.ncyBreadcrumbLabel=f.name};c.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||f()}),f()}}}}}function i(a,c,d){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbChain}}",compile:function(e,f){var g=e.attr(f.$attr.ncyBreadcrumbText);g&&e.html(g);var h=e.attr(f.$attr.ncyBreadcrumbTextSeparator)||" / ";return{post:function(e){var f=[],g=function(a,c,d){b.forEach(j(c),function(b){var c=d.$watch(b,function(a,b){a!==b&&i()});a.push(c)})},i=function(){l(f),f=[];var d=c.$getLastViewScope(),i=c.getStatesChain(),j=[];b.forEach(i,function(b){if(b.ncyBreadcrumb&&b.ncyBreadcrumb.label){var c=a(b.ncyBreadcrumb.label);j.push(c(d)),g(f,c,d)}else j.push(b.name)}),e.ncyBreadcrumbChain=j.join(h)};d.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||i()}),i()}}}}}var j=function(a){if(a.expressions)return a.expressions;var c=[];return b.forEach(a.parts,function(a){b.isFunction(a)&&c.push(a.exp)}),c},k=function(a,c,d,e){b.forEach(j(c),function(b){var f=d.$watch(b,function(){e.ncyBreadcrumbLabel=c(d)});a.push(f)})},l=function(a){b.forEach(a,function(a){a()})};g.$inject=["$interpolate","$breadcrumb","$rootScope"],h.$inject=["$interpolate","$breadcrumb","$rootScope"],i.$inject=["$interpolate","$breadcrumb","$rootScope"],b.module("ncy-angular-breadcrumb",["ui.router.state"]).provider("$breadcrumb",f).directive("ncyBreadcrumb",g).directive("ncyBreadcrumbLast",h).directive("ncyBreadcrumbText",i)}(window,window.angular); \ No newline at end of file diff --git a/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.js b/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.js new file mode 100644 index 0000000000..ba6e5dcd39 --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.js @@ -0,0 +1,369 @@ +/*! angular-breadcrumb - v0.4.1 +* http://ncuillery.github.io/angular-breadcrumb +* Copyright (c) 2015 Nicolas Cuillery; Licensed MIT */ + +(function (window, angular, undefined) { +'use strict'; + +function isAOlderThanB(scopeA, scopeB) { + if(angular.equals(scopeA.length, scopeB.length)) { + return scopeA > scopeB; + } else { + return scopeA.length > scopeB.length; + } +} + +function parseStateRef(ref) { + var parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) { throw new Error("Invalid state ref '" + ref + "'"); } + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function $Breadcrumb() { + + var $$options = { + prefixStateName: null, + template: 'bootstrap3', + templateUrl: null, + includeAbstract : false + }; + + this.setOptions = function(options) { + angular.extend($$options, options); + }; + + this.$get = ['$state', '$stateParams', '$rootScope', function($state, $stateParams, $rootScope) { + + var $lastViewScope = $rootScope; + + // Early catch of $viewContentLoaded event + $rootScope.$on('$viewContentLoaded', function (event) { + // With nested views, the event occur several times, in "wrong" order + if(!event.targetScope.ncyBreadcrumbIgnore && + isAOlderThanB(event.targetScope.$id, $lastViewScope.$id)) { + $lastViewScope = event.targetScope; + } + }); + + // Get the parent state + var $$parentState = function(state) { + // Check if state has explicit parent OR we try guess parent from its name + var parent = state.parent || (/^(.+)\.[^.]+$/.exec(state.name) || [])[1]; + var isObjectParent = typeof parent === "object"; + // if parent is a object reference, then extract the name + return isObjectParent ? parent.name : parent; + }; + + // Add the state in the chain if not already in and if not abstract + var $$addStateInChain = function(chain, stateRef) { + var conf, + parentParams, + ref = parseStateRef(stateRef), + force = false, + skip = false; + + for(var i=0, l=chain.length; i' + + '
  • ' + + '{{step.ncyBreadcrumbLabel}}' + + '{{step.ncyBreadcrumbLabel}}' + + '/' + + '
  • ' + + '', + bootstrap3: '' + }; + + return { + restrict: 'AE', + replace: true, + scope: {}, + template: $breadcrumb.getTemplate($$templates), + templateUrl: $breadcrumb.getTemplateUrl(), + link: { + post: function postLink(scope) { + var labelWatchers = []; + + var renderBreadcrumb = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + scope.steps = $breadcrumb.getStatesChain(); + angular.forEach(scope.steps, function (step) { + if (step.ncyBreadcrumb && step.ncyBreadcrumb.label) { + var parseLabel = $interpolate(step.ncyBreadcrumb.label); + step.ncyBreadcrumbLabel = parseLabel(viewScope); + // Watcher for further viewScope updates + registerWatchers(labelWatchers, parseLabel, viewScope, step); + } else { + step.ncyBreadcrumbLabel = step.name; + } + }); + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderBreadcrumb(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderBreadcrumb(); + } + } + }; +} +BreadcrumbDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +function BreadcrumbLastDirective($interpolate, $breadcrumb, $rootScope) { + + return { + restrict: 'A', + scope: {}, + template: '{{ncyBreadcrumbLabel}}', + compile: function(cElement, cAttrs) { + + // Override the default template if ncyBreadcrumbLast has a value + var template = cElement.attr(cAttrs.$attr.ncyBreadcrumbLast); + if(template) { + cElement.html(template); + } + + return { + post: function postLink(scope) { + var labelWatchers = []; + + var renderLabel = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + var lastStep = $breadcrumb.getLastStep(); + if(lastStep) { + scope.ncyBreadcrumbLink = lastStep.ncyBreadcrumbLink; + if (lastStep.ncyBreadcrumb && lastStep.ncyBreadcrumb.label) { + var parseLabel = $interpolate(lastStep.ncyBreadcrumb.label); + scope.ncyBreadcrumbLabel = parseLabel(viewScope); + // Watcher for further viewScope updates + // Tricky last arg: the last step is the entire scope of the directive ! + registerWatchers(labelWatchers, parseLabel, viewScope, scope); + } else { + scope.ncyBreadcrumbLabel = lastStep.name; + } + } + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderLabel(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderLabel(); + } + }; + + } + }; +} +BreadcrumbLastDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +function BreadcrumbTextDirective($interpolate, $breadcrumb, $rootScope) { + + return { + restrict: 'A', + scope: {}, + template: '{{ncyBreadcrumbChain}}', + + compile: function(cElement, cAttrs) { + // Override the default template if ncyBreadcrumbText has a value + var template = cElement.attr(cAttrs.$attr.ncyBreadcrumbText); + if(template) { + cElement.html(template); + } + + var separator = cElement.attr(cAttrs.$attr.ncyBreadcrumbTextSeparator) || ' / '; + + return { + post: function postLink(scope) { + var labelWatchers = []; + + var registerWatchersText = function(labelWatcherArray, interpolationFunction, viewScope) { + angular.forEach(getExpression(interpolationFunction), function(expression) { + var watcher = viewScope.$watch(expression, function(newValue, oldValue) { + if (newValue !== oldValue) { + renderLabel(); + } + }); + labelWatcherArray.push(watcher); + }); + }; + + var renderLabel = function() { + deregisterWatchers(labelWatchers); + labelWatchers = []; + + var viewScope = $breadcrumb.$getLastViewScope(); + var steps = $breadcrumb.getStatesChain(); + var combinedLabels = []; + angular.forEach(steps, function (step) { + if (step.ncyBreadcrumb && step.ncyBreadcrumb.label) { + var parseLabel = $interpolate(step.ncyBreadcrumb.label); + combinedLabels.push(parseLabel(viewScope)); + // Watcher for further viewScope updates + registerWatchersText(labelWatchers, parseLabel, viewScope); + } else { + combinedLabels.push(step.name); + } + }); + + scope.ncyBreadcrumbChain = combinedLabels.join(separator); + }; + + $rootScope.$on('$viewContentLoaded', function (event) { + if(!event.targetScope.ncyBreadcrumbIgnore) { + renderLabel(); + } + }); + + // View(s) may be already loaded while the directive's linking + renderLabel(); + } + }; + + } + }; +} +BreadcrumbTextDirective.$inject = ['$interpolate', '$breadcrumb', '$rootScope']; + +angular.module('ncy-angular-breadcrumb', ['ui.router.state']) + .provider('$breadcrumb', $Breadcrumb) + .directive('ncyBreadcrumb', BreadcrumbDirective) + .directive('ncyBreadcrumbLast', BreadcrumbLastDirective) + .directive('ncyBreadcrumbText', BreadcrumbTextDirective); +})(window, window.angular); diff --git a/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.min.js b/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.min.js new file mode 100644 index 0000000000..ceb49da17e --- /dev/null +++ b/awx/ui/client/lib/angular-breadcrumb/release/angular-breadcrumb.min.js @@ -0,0 +1,4 @@ +/*! angular-breadcrumb - v0.4.1 +* http://ncuillery.github.io/angular-breadcrumb +* Copyright (c) 2015 Nicolas Cuillery; Licensed MIT */ +!function(a,b,c){"use strict";function d(a,c){return b.equals(a.length,c.length)?a>c:a.length>c.length}function e(a){var b=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/);if(!b||4!==b.length)throw new Error("Invalid state ref '"+a+"'");return{state:b[1],paramExpr:b[3]||null}}function f(){var a={prefixStateName:null,template:"bootstrap3",templateUrl:null,includeAbstract:!1};this.setOptions=function(c){b.extend(a,c)},this.$get=["$state","$stateParams","$rootScope",function(b,f,g){var h=g;g.$on("$viewContentLoaded",function(a){!a.targetScope.ncyBreadcrumbIgnore&&d(a.targetScope.$id,h.$id)&&(h=a.targetScope)});var i=function(a){var b=a.parent||(/^(.+)\.[^.]+$/.exec(a.name)||[])[1],c="object"==typeof b;return c?b.name:b},j=function(c,d){for(var g,i,j=e(d),k=!1,l=!1,m=0,n=c.length;n>m;m+=1)if(c[m].name===j.state)return;g=b.get(j.state),g.ncyBreadcrumb&&(g.ncyBreadcrumb.force&&(k=!0),g.ncyBreadcrumb.skip&&(l=!0)),g["abstract"]&&!a.includeAbstract&&!k||l||(j.paramExpr&&(i=h.$eval(j.paramExpr)),g.ncyBreadcrumbLink=b.href(j.state,i||f||{}),c.unshift(g))},k=function(a){var c=e(a),d=b.get(c.state);if(d.ncyBreadcrumb&&d.ncyBreadcrumb.parent){var f="function"==typeof d.ncyBreadcrumb.parent,g=f?d.ncyBreadcrumb.parent(h):d.ncyBreadcrumb.parent;if(g)return g}return i(d)};return{getTemplate:function(b){return a.templateUrl?null:b[a.template]?b[a.template]:a.template},getTemplateUrl:function(){return a.templateUrl},getStatesChain:function(c){for(var d=[],e=b.$current.self.name;e;e=k(e))if(j(d,e),c&&d.length)return d;return a.prefixStateName&&j(d,a.prefixStateName),d},getLastStep:function(){var a=this.getStatesChain(!0);return a.length?a[0]:c},$getLastViewScope:function(){return h}}}]}function g(a,c,d){var e={bootstrap2:'',bootstrap3:''};return{restrict:"AE",replace:!0,scope:{},template:c.getTemplate(e),templateUrl:c.getTemplateUrl(),link:{post:function(e){var f=[],g=function(){l(f),f=[];var d=c.$getLastViewScope();e.steps=c.getStatesChain(),b.forEach(e.steps,function(b){if(b.ncyBreadcrumb&&b.ncyBreadcrumb.label){var c=a(b.ncyBreadcrumb.label);b.ncyBreadcrumbLabel=c(d),k(f,c,d,b)}else b.ncyBreadcrumbLabel=b.name})};d.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||g()}),g()}}}}function h(a,b,c){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbLabel}}",compile:function(d,e){var f=d.attr(e.$attr.ncyBreadcrumbLast);return f&&d.html(f),{post:function(d){var e=[],f=function(){l(e),e=[];var c=b.$getLastViewScope(),f=b.getLastStep();if(f)if(d.ncyBreadcrumbLink=f.ncyBreadcrumbLink,f.ncyBreadcrumb&&f.ncyBreadcrumb.label){var g=a(f.ncyBreadcrumb.label);d.ncyBreadcrumbLabel=g(c),k(e,g,c,d)}else d.ncyBreadcrumbLabel=f.name};c.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||f()}),f()}}}}}function i(a,c,d){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbChain}}",compile:function(e,f){var g=e.attr(f.$attr.ncyBreadcrumbText);g&&e.html(g);var h=e.attr(f.$attr.ncyBreadcrumbTextSeparator)||" / ";return{post:function(e){var f=[],g=function(a,c,d){b.forEach(j(c),function(b){var c=d.$watch(b,function(a,b){a!==b&&i()});a.push(c)})},i=function(){l(f),f=[];var d=c.$getLastViewScope(),i=c.getStatesChain(),j=[];b.forEach(i,function(b){if(b.ncyBreadcrumb&&b.ncyBreadcrumb.label){var c=a(b.ncyBreadcrumb.label);j.push(c(d)),g(f,c,d)}else j.push(b.name)}),e.ncyBreadcrumbChain=j.join(h)};d.$on("$viewContentLoaded",function(a){a.targetScope.ncyBreadcrumbIgnore||i()}),i()}}}}}var j=function(a){if(a.expressions)return a.expressions;var c=[];return b.forEach(a.parts,function(a){b.isFunction(a)&&c.push(a.exp)}),c},k=function(a,c,d,e){b.forEach(j(c),function(b){var f=d.$watch(b,function(){e.ncyBreadcrumbLabel=c(d)});a.push(f)})},l=function(a){b.forEach(a,function(a){a()})};g.$inject=["$interpolate","$breadcrumb","$rootScope"],h.$inject=["$interpolate","$breadcrumb","$rootScope"],i.$inject=["$interpolate","$breadcrumb","$rootScope"],b.module("ncy-angular-breadcrumb",["ui.router.state"]).provider("$breadcrumb",f).directive("ncyBreadcrumb",g).directive("ncyBreadcrumbLast",h).directive("ncyBreadcrumbText",i)}(window,window.angular); \ No newline at end of file diff --git a/awx/ui/client/lib/angular-codemirror/lib/AngularCodeMirror.css b/awx/ui/client/lib/angular-codemirror/lib/AngularCodeMirror.css index f233cc2941..a81ff6dff4 100644 --- a/awx/ui/client/lib/angular-codemirror/lib/AngularCodeMirror.css +++ b/awx/ui/client/lib/angular-codemirror/lib/AngularCodeMirror.css @@ -1,6 +1,6 @@ /********************************************** * AngularCodeMirror.css - * + * * CodeMirror.css overrides * * Copyright (c) 2014 Chris Houseknecht @@ -30,14 +30,14 @@ .CodeMirror { height: auto; } - + .CodeMirror-activeline-background { background-color: #f7f7f7; } - -/* Modal dialog overrides to make jqueryui dialog blend in with Twitter. + +/* Modal dialog overrides to make jqueryui dialog blend in with Twitter. Why? Twitter's modal is not draggable or resizable, which is not very useful for a code editor */ @@ -71,7 +71,7 @@ border-color: #ffffff; color: #A9A9A9; } - + .ui-dialog .ui-resizable-se { right: 5px; bottom: 5px; @@ -108,4 +108,3 @@ .CodeMirror-lint-tooltip { z-index: 2060; } - diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/.bower.json b/awx/ui/client/lib/angular-drag-and-drop-lists/.bower.json new file mode 100644 index 0000000000..b5afbfffb6 --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "angular-drag-and-drop-lists", + "main": "angular-drag-and-drop-lists.js", + "version": "1.4.0", + "homepage": "https://github.com/marceljuenemann/angular-drag-and-drop-lists", + "authors": [ + "Marcel Juenemann " + ], + "description": "Angular directives for sorting nested lists using the HTML5 Drag & Drop API", + "keywords": [ + "angular", + "drag", + "drop", + "dnd", + "nested", + "sortable", + "lists", + "html5" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "demo", + "*.json", + "test", + "tests" + ], + "_release": "1.4.0", + "_resolution": { + "type": "version", + "tag": "v1.4.0", + "commit": "141e13919b30578ed53d079bdd269fb99b20f78f" + }, + "_source": "git://github.com/marceljuenemann/angular-drag-and-drop-lists.git", + "_target": "~1.4.0", + "_originalSource": "angular-drag-and-drop-lists", + "_direct": true +} \ No newline at end of file diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/CHANGELOG.md b/awx/ui/client/lib/angular-drag-and-drop-lists/CHANGELOG.md new file mode 100644 index 0000000000..f5c9fdc64d --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/CHANGELOG.md @@ -0,0 +1,107 @@ +# 1.4.0 (2016-02-06) + +## Features + +- **dnd-handle directive**: This directive can be used in combination with `dnd-nodrag`, so that a `dnd-draggable` can only be dragged by using certain handle elements. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) +- **dnd-drop can handle insertion**: The `dnd-drop` callback can now return true to signalize that it will take care of inserting the dropped element itself. `dnd-list` will then no longer insert any elements into the list, but will still call the `dnd-inserted` callback. + +## Bug Fixes + +- **Fix dnd-disable-if on dnd-draggable**: When you disabled a `dnd-draggable` with `dnd-disable-if`, the user was still able to trigger a drag of that element by selecting some text inside the element. (issue #159) +- **dnd-list now handles the dragenter event**: According to the HTML5 standard dropzones need to handle the `dragenter` event, although there doesn't seem to be any browser that enforces this. (issue #118) + +## Tested browsers + +- Chrome 48 (Mac, Ubuntu & Windows 10) +- Firefox 44 (Ubuntu) +- Safari 9 (Mac) +- Microsoft Edge 20 (Windows 10) +- Internet Explorer 11 (Windows 10) +- Internet Explorer 10 & 9 in compatibility mode (Windows 10) + +# 1.3.0 (2015-08-20) + +## Features + +- **New callbacks**: `dnd-dragend`, `dnd-canceled` and `dnd-inserted`. +- **Custom placeholder elements**: `dnd-list` elements can have custom elements by creating a child element with `dnd-placeholder` class. This is useful for cases where a simple `li` element is not sufficient. +- **dnd-nodrag directive**: This directive can be used inside `dnd-draggable` to prevent dragging certain areas. This is useful for input elements inside the draggable or creating handle elements. + +## Bug Fixes + +- **Fix user selection inside dnd-draggable**: The `selectstart` event is no longer cancelled. +- **Fix click handler compatibility**: Propagation of click events is now only stopped if the `dnd-selected` attribute is present. +- **Fix IE9 glitch**: Double clicks in IE9 previously would trigger the `dnd-moved` callback, and therefore remove items accidentially. (issue #21) + +## Tested browsers + +- Chrome 43 (Win7) +- Chrome 44 (Ubuntu) +- Chrome 44 (Mac) +- Firefox 40 (Win7) +- Firefox 39 (Ubuntu) +- Safari 8.0.8 (Mac) +- Internet Explorer 11 (IE9 & 10 in compatibility mode) + +# 1.2.0 (2014-11-30) + +## Bug Fixes + +- **Fix glitches in Chrome**: When aborting a drag operation or dragging an element on itself, Chrome on Linux sometimes sends `move` as dropEffect instead of `none`. This lead to elements sometimes disappearing. Can be reproduced by dragging an element over itself and aborting with Esc key. (issue #14) +- **Fix dnd-allowed-types in nested lists**: When a drop was not allowed due to the wrong element type, the event was correctly propagated to the parent list. Nevertheless, the drop was still executed, because the drop handler didn't check the type again. (issue #16) + +## Features + +- **New callbacks**: The `dnd-draggable` directive now has a new `dnd-dragstart` callback besides the existing `dnd-moved` and `dnd-copied`. The `dnd-list` directive got the callbacks `dnd-dragover` and `dnd-drag` added, which are also able to abort a drop. (issue #11) +- **dnd-horizontal-list**: Lists can be marked as horizontal with this new attribute. The positioning algorithm then positions the placeholder left or right of other list items, instead of above or below. (issue #19) +- **dnd-external-sources**: This attribute allows drag and drop accross browser windows. See documentation for details. (issue #9) +- **pointer-events: none no longer required**: The dragover handler now traverses the DOM until it finds the list item node, therefore it's child elements no longer require the pointer-events: none style. + +## Tested browsers + +- Chrome 38 (Ubuntu) +- Chrome 38 (Win7) +- Chrome 39 (Mac) +- Firefox 31 (Win7) +- Firefox 33 (Ubuntu) +- Safari 7.1 (Mac) +- Internet Explorer 11 (IE9 & 10 in compatibility mode) + +# 1.1.0 (2014-08-31) + +## Bug Fixes + +- **jQuery compatibility**: jQuery wraps browser events in event.originalEvent + +## Features + +- **dnd-disable-if attribute**: allows to dynamically disable the drag and drop functionality +- **dnd-type and dnd-allowed-types**: allows to restrict an item to specifc lists depending on it's type + +## Tested browsers + +- Chrome 34 (Ubuntu) +- Chrome 37 (Mac) +- Chrome 37 (Win7) +- Firefox 28 (Win7) +- Firefox 31 (Ubuntu) +- Safari 7.0.6 (Mac) +- Internet Explorer 11 (IE9 & 10 in compatibility mode) + +# 1.0.0 (2014-04-11) + +Initial release + +# Release checklist + +- Bump versions + - bower.json + - package.json + - JS files +- Minify and test (npm run-script minify) +- Test different OS & browsers (npm start) +- Update README and CHANGELOG +- Merge to master +- Tag release +- Merge to gh-pages +- Publish to npm diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/LICENSE b/awx/ui/client/lib/angular-drag-and-drop-lists/LICENSE new file mode 100644 index 0000000000..45299cb3c6 --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 Marcel Juenemann +Copyright (c) 2014-2016 Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/README.md b/awx/ui/client/lib/angular-drag-and-drop-lists/README.md new file mode 100644 index 0000000000..797ebffc2d --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/README.md @@ -0,0 +1,135 @@ +angular-drag-and-drop-lists +=========================== +Angular directives that allow you to build sortable lists with the native HTML5 drag & drop API. The directives can also be nested to bring drag & drop to your WYSIWYG editor, your tree, or whatever fancy structure you are building. + +## Demo +* [Nested Lists](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/nested) +* [Simple Lists](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple) +* [Typed Lists](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) +* [Advanced Features](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* [Multiselection Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/multi) + + +## Supported browsers + +**Touch devices are not supported**, because they do not implement the HTML5 drag & drop standard. However, you can use a [shim](https://github.com/timruffles/ios-html5-drag-drop-shim) to make it work on touch devices as well. + +Internet Explorer 8 or lower is *not supported*, but all modern browsers are (see changelog for list of tested browsers). + + +## Download & Installation +Download `angular-drag-and-drop-lists.js` (or the minified version) and include it in your application. If you use bower, you can of course just add it via bower. Add the `dndLists` module as dependency to your angular app. + +## dnd-draggable directive +Use the dnd-draggable directive to make your element draggable + +**Attributes** +* `dnd-draggable` Required attribute. The value has to be an object that represents the data of the element. In case of a drag and drop operation the object will be serialized and unserialized on the receiving end. +* `dnd-effect-allowed` Use this attribute to limit the operations that can be performed. Options are: + * `move` The drag operation will move the element. This is the default + * `copy` The drag operation will copy the element. There will be a copy cursor. + * `copyMove` The user can choose between copy and move by pressing the ctrl or shift key. + * *Not supported in IE:* In Internet Explorer this option will be the same as `copy`. + * *Not fully supported in Chrome on Windows:* In the Windows version of Chrome the cursor will always be the move cursor. However, when the user drops an element and has the ctrl key pressed, we will perform a copy anyways. + * HTML5 also specifies the `link` option, but this library does not actively support it yet, so use it at your own risk. + * [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-type` Use this attribute if you have different kinds of items in your application and you want to limit which items can be dropped into which lists. Combine with dnd-allowed-types on the dnd-list(s). This attribute should evaluate to a string, although this restriction is not enforced (at the moment). [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) +* `dnd-disable-if` You can use this attribute to dynamically disable the draggability of the element. This is useful if you have certain list items that you don't want to be draggable, or if you want to disable drag & drop completely without having two different code branches (e.g. only allow for admins). *Note*: If your element is not draggable, the user is probably able to select text or images inside of it. Since a selection is always draggable, this breaks your UI. You most likely want to disable user selection via CSS (see [user-select](http://stackoverflow.com/a/4407335)). [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) + +**Callbacks** +* `dnd-moved` Callback that is invoked when the element was moved. Usually you will remove your element from the original list in this callback, since the directive is not doing that for you automatically. The original dragend event will be provided in the local `event` variable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-copied` Same as dnd-moved, just that it is called when the element was copied instead of moved. The original dragend event will be provided in the local `event` variable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-canceled` Callback that is invoked if the element was dragged, but the operation was canceled and the element was not dropped. The original dragend event will be provided in the local event variable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-dragstart` Callback that is invoked when the element was dragged. The original dragstart event will be provided in the local `event` variable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-dragend` Callback that is invoked when the drag operation ended. Available local variables are `event` and `dropEffect`. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-selected` Callback that is invoked when the element was clicked but not dragged. The original click event will be provided in the local `event` variable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/nested) + +**CSS classes** +* `dndDragging` This class will be added to the element while the element is being dragged. It will affect both the element you see while dragging and the source element that stays at it's position. Do not try to hide the source element with this class, because that will abort the drag operation. +* `dndDraggingSource` This class will be added to the element after the drag operation was started, meaning it only affects the original element that is still at it's source position, and not the "element" that the user is dragging with his mouse pointer + +## dnd-list directive + +Use the dnd-list attribute to make your list element a dropzone. Usually you will add a single li element as child with the ng-repeat directive. If you don't do that, we will not be able to position the dropped element correctly. If you want your list to be sortable, also add the dnd-draggable directive to your li element(s). Both the dnd-list and it's direct children must have position: relative CSS style, otherwise the positioning algorithm will not be able to determine the correct placeholder position in all browsers. + +**Attributes** +* `dnd-list` Required attribute. The value has to be the array in which the data of the dropped element should be inserted. +* `dnd-allowed-types` Optional array of allowed item types. When used, only items that had a matching dnd-type attribute will be dropable. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) +* `dnd-disable-if` Optional boolean expression. When it evaluates to true, no dropping into the list is possible. Note that this also disables rearranging items inside the list. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) +* `dnd-horizontal-list` Optional boolean expression. When it evaluates to true, the positioning algorithm will use the left and right halfs of the list items instead of the upper and lower halfs. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-external-sources` Optional boolean expression. When it evaluates to true, the list accepts drops from sources outside of the current browser tab. This allows to drag and drop accross different browser tabs. Note that this will allow to drop arbitrary text into the list, thus it is highly recommended to implement the dnd-drop callback to check the incoming element for sanity. Furthermore, the dnd-type of external sources can not be determined, therefore do not rely on restrictions of dnd-allowed-type. Also note that this feature does not work very well in Internet Explorer. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) + +**Callbacks** +* `dnd-dragover` Optional expression that is invoked when an element is dragged over the list. If the expression is set, but does not return true, the element is not allowed to be dropped. The following variables will be available: + * `event` The original dragover event sent by the browser. + * `index` The position in the list at which the element would be dropped. + * `type` The `dnd-type` set on the dnd-draggable, or undefined if unset. + * `external` Whether the element was dragged from an external source. See `dnd-external-sources`. + * [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) +* `dnd-drop` Optional expression that is invoked when an element is dropped on the list. + * The following variables will be available: + * `event` The original drop event sent by the browser. + * `index` The position in the list at which the element would be dropped. + * `item` The transferred object. + * `type` The dnd-type set on the dnd-draggable, or undefined if unset. + * `external` Whether the element was dragged from an external source. See `dnd-external-sources`. + * The return value determines the further handling of the drop: + * `false` The drop will be canceled and the element won't be inserted. + * `true` Signalises that the drop is allowed, but the dnd-drop callback will take care of inserting the element. + * Otherwise: All other return values will be treated as the object to insert into the array. In most cases you simply want to return the `item` parameter, but there are no restrictions on what you can return. +* `dnd-inserted` Optional expression that is invoked after a drop if the element was actually inserted into the list. The same local variables as for `dnd-drop` will be available. Note that for reorderings inside the same list the old element will still be in the list due to the fact that `dnd-moved` was not called yet. [Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/advanced) + +**CSS classes** +* `dndPlaceholder` When an element is dragged over the list, a new placeholder child element will be added. This element is of type `li` and has the class `dndPlaceholder` set. Alternatively, you can define your own placeholder by creating a child element with `dndPlaceholder` class. +* `dndDragover` This class will be added to the list while an element is being dragged over the list. + +## dnd-nodrag directive + +Use the `dnd-nodrag` attribute inside of `dnd-draggable` elements to prevent them from starting drag operations. This is especially useful if you want to use input elements inside of `dnd-draggable` elements or create specific handle elements. + +**Note:** This directive does not work in Internet Explorer 9. + +[Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) + +## dnd-handle directive + +Use the `dnd-handle` directive within a `dnd-nodrag` element in order to allow dragging of that element after all. Therefore, by combining `dnd-nodrag` and `dnd-handle` you can allow `dnd-draggable` elements to only be dragged via specific *handle* elements. + +**Note:** Internet Explorer will show the handle element as drag image instead of the `dnd-draggable` element. You can work around this by styling the handle element differently when it is being dragged. Use the CSS selector `.dndDragging:not(.dndDraggingSource) [dnd-handle]` for that. + +[Demo](http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/types) + +## Required CSS styles +Both the dnd-list and it's children require relative positioning, so that the directive can determine the mouse position relative to the list and thus calculate the correct drop position. + +
    +ul[dnd-list], ul[dnd-list] > li {
    +    position: relative;
    +}
    +
    + + + +## Why another drag & drop library? +There are tons of other drag & drop libraries out there, but none of them met my three requirements: + +* **Angular:** If you use angular.js, you really don't want to throw a bunch of jQuery into your app. Instead you want to use libraries that were build the "angular way" and support **two-way data binding** to update your data model automatically. +* **Nested lists:** If you want to build a **WYSIWYG editor** or have some fancy **tree structure**, the library has to support nested lists. +* **HTML5 drag & drop:** Most drag & drop applications you'll find on the internet use pure JavaScript drag & drop. But with the arrival of HTML5 we can delegate most of the work to the browser. For example: If you want to show the user what he's currently dragging, you'll have to update the position of the element all the time and set it below the mouse pointer. In HTML5 the browser will do that for you! But you can not only save code lines, you can also offer a more **native user experience**: If you click on an element in a pure JavaScript drag & drop implementation, it will usually start the drag operation. But remember what happens when you click an icon on your desktop: The icon will be selected, not dragged! This is the native behaviour you can bring to your web application with HTML5. + +If this doesn't fit your requirements, check out one of the other awesome drag & drop libraries: + +* [angular-ui-tree](https://github.com/JimLiu/angular-ui-tree): Very similar to this library, but does not use the HTML5 API. Therefore you need to write some more markup to see what you are dragging and it will create another DOM node that you have to style. However, if you plan to support touch devices this is probably your best choice. +* [angular-dragdrop](https://github.com/ganarajpr/angular-dragdrop): One of many libraries with the same name. This one uses the HTML5 API, but if you want to build (nested) sortable lists, you're on your own, because it does not calculate the correct element position for you. +* [more...](https://www.google.de/search?q=angular+drag+and+drop) + + +## License + +Copyright (c) 2014 [Marcel Juenemann](mailto:marcel@juenemann.cc) + +Copyright (c) 2014-2016 Google Inc. + +This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google. + +[MIT License](https://raw.githubusercontent.com/marceljuenemann/angular-drag-and-drop-lists/master/LICENSE) diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js b/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js new file mode 100644 index 0000000000..4a1f2eccda --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js @@ -0,0 +1,590 @@ +/** + * angular-drag-and-drop-lists v1.4.0 + * + * Copyright (c) 2014 Marcel Juenemann marcel@juenemann.cc + * Copyright (c) 2014-2016 Google Inc. + * https://github.com/marceljuenemann/angular-drag-and-drop-lists + * + * License: MIT + */ +angular.module('dndLists', []) + + /** + * Use the dnd-draggable attribute to make your element draggable + * + * Attributes: + * - dnd-draggable Required attribute. The value has to be an object that represents the data + * of the element. In case of a drag and drop operation the object will be + * serialized and unserialized on the receiving end. + * - dnd-selected Callback that is invoked when the element was clicked but not dragged. + * The original click event will be provided in the local event variable. + * - dnd-effect-allowed Use this attribute to limit the operations that can be performed. Options: + * - "move": The drag operation will move the element. This is the default. + * - "copy": The drag operation will copy the element. Shows a copy cursor. + * - "copyMove": The user can choose between copy and move by pressing the + * ctrl or shift key. *Not supported in IE:* In Internet Explorer this + * option will be the same as "copy". *Not fully supported in Chrome on + * Windows:* In the Windows version of Chrome the cursor will always be the + * move cursor. However, when the user drops an element and has the ctrl + * key pressed, we will perform a copy anyways. + * - HTML5 also specifies the "link" option, but this library does not + * actively support it yet, so use it at your own risk. + * - dnd-moved Callback that is invoked when the element was moved. Usually you will + * remove your element from the original list in this callback, since the + * directive is not doing that for you automatically. The original dragend + * event will be provided in the local event variable. + * - dnd-canceled Callback that is invoked if the element was dragged, but the operation was + * canceled and the element was not dropped. The original dragend event will + * be provided in the local event variable. + * - dnd-copied Same as dnd-moved, just that it is called when the element was copied + * instead of moved. The original dragend event will be provided in the local + * event variable. + * - dnd-dragstart Callback that is invoked when the element was dragged. The original + * dragstart event will be provided in the local event variable. + * - dnd-dragend Callback that is invoked when the drag operation ended. Available local + * variables are event and dropEffect. + * - dnd-type Use this attribute if you have different kinds of items in your + * application and you want to limit which items can be dropped into which + * lists. Combine with dnd-allowed-types on the dnd-list(s). This attribute + * should evaluate to a string, although this restriction is not enforced. + * - dnd-disable-if You can use this attribute to dynamically disable the draggability of the + * element. This is useful if you have certain list items that you don't want + * to be draggable, or if you want to disable drag & drop completely without + * having two different code branches (e.g. only allow for admins). + * **Note**: If your element is not draggable, the user is probably able to + * select text or images inside of it. Since a selection is always draggable, + * this breaks your UI. You most likely want to disable user selection via + * CSS (see user-select). + * + * CSS classes: + * - dndDragging This class will be added to the element while the element is being + * dragged. It will affect both the element you see while dragging and the + * source element that stays at it's position. Do not try to hide the source + * element with this class, because that will abort the drag operation. + * - dndDraggingSource This class will be added to the element after the drag operation was + * started, meaning it only affects the original element that is still at + * it's source position, and not the "element" that the user is dragging with + * his mouse pointer. + */ + .directive('dndDraggable', ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround', + function($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) { + return function(scope, element, attr) { + // Set the HTML5 draggable attribute on the element + element.attr("draggable", "true"); + + // If the dnd-disable-if attribute is set, we have to watch that + if (attr.dndDisableIf) { + scope.$watch(attr.dndDisableIf, function(disabled) { + element.attr("draggable", !disabled); + }); + } + + /** + * When the drag operation is started we have to prepare the dataTransfer object, + * which is the primary way we communicate with the target element + */ + element.on('dragstart', function(event) { + event = event.originalEvent || event; + + // Check whether the element is draggable, since dragstart might be triggered on a child. + if (element.attr('draggable') == 'false') return true; + + // Serialize the data associated with this element. IE only supports the Text drag type + event.dataTransfer.setData("Text", angular.toJson(scope.$eval(attr.dndDraggable))); + + // Only allow actions specified in dnd-effect-allowed attribute + event.dataTransfer.effectAllowed = attr.dndEffectAllowed || "move"; + + // Add CSS classes. See documentation above + element.addClass("dndDragging"); + $timeout(function() { element.addClass("dndDraggingSource"); }, 0); + + // Workarounds for stupid browsers, see description below + dndDropEffectWorkaround.dropEffect = "none"; + dndDragTypeWorkaround.isDragging = true; + + // Save type of item in global state. Usually, this would go into the dataTransfer + // typename, but we have to use "Text" there to support IE + dndDragTypeWorkaround.dragType = attr.dndType ? scope.$eval(attr.dndType) : undefined; + + // Try setting a proper drag image if triggered on a dnd-handle (won't work in IE). + if (event._dndHandle && event.dataTransfer.setDragImage) { + event.dataTransfer.setDragImage(element[0], 0, 0); + } + + // Invoke callback + $parse(attr.dndDragstart)(scope, {event: event}); + + event.stopPropagation(); + }); + + /** + * The dragend event is triggered when the element was dropped or when the drag + * operation was aborted (e.g. hit escape button). Depending on the executed action + * we will invoke the callbacks specified with the dnd-moved or dnd-copied attribute. + */ + element.on('dragend', function(event) { + event = event.originalEvent || event; + + // Invoke callbacks. Usually we would use event.dataTransfer.dropEffect to determine + // the used effect, but Chrome has not implemented that field correctly. On Windows + // it always sets it to 'none', while Chrome on Linux sometimes sets it to something + // else when it's supposed to send 'none' (drag operation aborted). + var dropEffect = dndDropEffectWorkaround.dropEffect; + scope.$apply(function() { + switch (dropEffect) { + case "move": + $parse(attr.dndMoved)(scope, {event: event}); + break; + case "copy": + $parse(attr.dndCopied)(scope, {event: event}); + break; + case "none": + $parse(attr.dndCanceled)(scope, {event: event}); + break; + } + $parse(attr.dndDragend)(scope, {event: event, dropEffect: dropEffect}); + }); + + // Clean up + element.removeClass("dndDragging"); + $timeout(function() { element.removeClass("dndDraggingSource"); }, 0); + dndDragTypeWorkaround.isDragging = false; + event.stopPropagation(); + }); + + /** + * When the element is clicked we invoke the callback function + * specified with the dnd-selected attribute. + */ + element.on('click', function(event) { + if (!attr.dndSelected) return; + + event = event.originalEvent || event; + scope.$apply(function() { + $parse(attr.dndSelected)(scope, {event: event}); + }); + + // Prevent triggering dndSelected in parent elements. + event.stopPropagation(); + }); + + /** + * Workaround to make element draggable in IE9 + */ + element.on('selectstart', function() { + if (this.dragDrop) this.dragDrop(); + }); + }; + }]) + + /** + * Use the dnd-list attribute to make your list element a dropzone. Usually you will add a single + * li element as child with the ng-repeat directive. If you don't do that, we will not be able to + * position the dropped element correctly. If you want your list to be sortable, also add the + * dnd-draggable directive to your li element(s). Both the dnd-list and it's direct children must + * have position: relative CSS style, otherwise the positioning algorithm will not be able to + * determine the correct placeholder position in all browsers. + * + * Attributes: + * - dnd-list Required attribute. The value has to be the array in which the data of + * the dropped element should be inserted. + * - dnd-allowed-types Optional array of allowed item types. When used, only items that had a + * matching dnd-type attribute will be dropable. + * - dnd-disable-if Optional boolean expresssion. When it evaluates to true, no dropping + * into the list is possible. Note that this also disables rearranging + * items inside the list. + * - dnd-horizontal-list Optional boolean expresssion. When it evaluates to true, the positioning + * algorithm will use the left and right halfs of the list items instead of + * the upper and lower halfs. + * - dnd-dragover Optional expression that is invoked when an element is dragged over the + * list. If the expression is set, but does not return true, the element is + * not allowed to be dropped. The following variables will be available: + * - event: The original dragover event sent by the browser. + * - index: The position in the list at which the element would be dropped. + * - type: The dnd-type set on the dnd-draggable, or undefined if unset. + * - external: Whether the element was dragged from an external source. + * - dnd-drop Optional expression that is invoked when an element is dropped on the + * list. The following variables will be available: + * - event: The original drop event sent by the browser. + * - index: The position in the list at which the element would be dropped. + * - item: The transferred object. + * - type: The dnd-type set on the dnd-draggable, or undefined if unset. + * - external: Whether the element was dragged from an external source. + * The return value determines the further handling of the drop: + * - false: The drop will be canceled and the element won't be inserted. + * - true: Signalises that the drop is allowed, but the dnd-drop + * callback already took care of inserting the element. + * - otherwise: All other return values will be treated as the object to + * insert into the array. In most cases you want to simply return the + * item parameter, but there are no restrictions on what you can return. + * - dnd-inserted Optional expression that is invoked after a drop if the element was + * actually inserted into the list. The same local variables as for + * dnd-drop will be available. Note that for reorderings inside the same + * list the old element will still be in the list due to the fact that + * dnd-moved was not called yet. + * - dnd-external-sources Optional boolean expression. When it evaluates to true, the list accepts + * drops from sources outside of the current browser tab. This allows to + * drag and drop accross different browser tabs. Note that this will allow + * to drop arbitrary text into the list, thus it is highly recommended to + * implement the dnd-drop callback to check the incoming element for + * sanity. Furthermore, the dnd-type of external sources can not be + * determined, therefore do not rely on restrictions of dnd-allowed-type. + * + * CSS classes: + * - dndPlaceholder When an element is dragged over the list, a new placeholder child + * element will be added. This element is of type li and has the class + * dndPlaceholder set. Alternatively, you can define your own placeholder + * by creating a child element with dndPlaceholder class. + * - dndDragover Will be added to the list while an element is dragged over the list. + */ + .directive('dndList', ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround', + function($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) { + return function(scope, element, attr) { + // While an element is dragged over the list, this placeholder element is inserted + // at the location where the element would be inserted after dropping + var placeholder = getPlaceholderElement(); + var placeholderNode = placeholder[0]; + var listNode = element[0]; + placeholder.remove(); + + var horizontal = attr.dndHorizontalList && scope.$eval(attr.dndHorizontalList); + var externalSources = attr.dndExternalSources && scope.$eval(attr.dndExternalSources); + + /** + * The dragenter event is fired when a dragged element or text selection enters a valid drop + * target. According to the spec, we either need to have a dropzone attribute or listen on + * dragenter events and call preventDefault(). It should be noted though that no browser seems + * to enforce this behaviour. + */ + element.on('dragenter', function (event) { + event = event.originalEvent || event; + if (!isDropAllowed(event)) return true; + event.preventDefault(); + }); + + /** + * The dragover event is triggered "every few hundred milliseconds" while an element + * is being dragged over our list, or over an child element. + */ + element.on('dragover', function(event) { + event = event.originalEvent || event; + + if (!isDropAllowed(event)) return true; + + // First of all, make sure that the placeholder is shown + // This is especially important if the list is empty + if (placeholderNode.parentNode != listNode) { + element.append(placeholder); + } + + if (event.target !== listNode) { + // Try to find the node direct directly below the list node. + var listItemNode = event.target; + while (listItemNode.parentNode !== listNode && listItemNode.parentNode) { + listItemNode = listItemNode.parentNode; + } + + if (listItemNode.parentNode === listNode && listItemNode !== placeholderNode) { + // If the mouse pointer is in the upper half of the child element, + // we place it before the child element, otherwise below it. + if (isMouseInFirstHalf(event, listItemNode)) { + listNode.insertBefore(placeholderNode, listItemNode); + } else { + listNode.insertBefore(placeholderNode, listItemNode.nextSibling); + } + } + } else { + // This branch is reached when we are dragging directly over the list element. + // Usually we wouldn't need to do anything here, but the IE does not fire it's + // events for the child element, only for the list directly. Therefore, we repeat + // the positioning algorithm for IE here. + if (isMouseInFirstHalf(event, placeholderNode, true)) { + // Check if we should move the placeholder element one spot towards the top. + // Note that display none elements will have offsetTop and offsetHeight set to + // zero, therefore we need a special check for them. + while (placeholderNode.previousElementSibling + && (isMouseInFirstHalf(event, placeholderNode.previousElementSibling, true) + || placeholderNode.previousElementSibling.offsetHeight === 0)) { + listNode.insertBefore(placeholderNode, placeholderNode.previousElementSibling); + } + } else { + // Check if we should move the placeholder element one spot towards the bottom + while (placeholderNode.nextElementSibling && + !isMouseInFirstHalf(event, placeholderNode.nextElementSibling, true)) { + listNode.insertBefore(placeholderNode, + placeholderNode.nextElementSibling.nextElementSibling); + } + } + } + + // At this point we invoke the callback, which still can disallow the drop. + // We can't do this earlier because we want to pass the index of the placeholder. + if (attr.dndDragover && !invokeCallback(attr.dndDragover, event, getPlaceholderIndex())) { + return stopDragover(); + } + + element.addClass("dndDragover"); + event.preventDefault(); + event.stopPropagation(); + return false; + }); + + /** + * When the element is dropped, we use the position of the placeholder element as the + * position where we insert the transferred data. This assumes that the list has exactly + * one child element per array element. + */ + element.on('drop', function(event) { + event = event.originalEvent || event; + + if (!isDropAllowed(event)) return true; + + // The default behavior in Firefox is to interpret the dropped element as URL and + // forward to it. We want to prevent that even if our drop is aborted. + event.preventDefault(); + + // Unserialize the data that was serialized in dragstart. According to the HTML5 specs, + // the "Text" drag type will be converted to text/plain, but IE does not do that. + var data = event.dataTransfer.getData("Text") || event.dataTransfer.getData("text/plain"); + var transferredObject; + try { + transferredObject = JSON.parse(data); + } catch(e) { + return stopDragover(); + } + + // Invoke the callback, which can transform the transferredObject and even abort the drop. + var index = getPlaceholderIndex(); + if (attr.dndDrop) { + transferredObject = invokeCallback(attr.dndDrop, event, index, transferredObject); + if (!transferredObject) { + return stopDragover(); + } + } + + // Insert the object into the array, unless dnd-drop took care of that (returned true). + if (transferredObject !== true) { + scope.$apply(function() { + scope.$eval(attr.dndList).splice(index, 0, transferredObject); + }); + } + invokeCallback(attr.dndInserted, event, index, transferredObject); + + // In Chrome on Windows the dropEffect will always be none... + // We have to determine the actual effect manually from the allowed effects + if (event.dataTransfer.dropEffect === "none") { + if (event.dataTransfer.effectAllowed === "copy" || + event.dataTransfer.effectAllowed === "move") { + dndDropEffectWorkaround.dropEffect = event.dataTransfer.effectAllowed; + } else { + dndDropEffectWorkaround.dropEffect = event.ctrlKey ? "copy" : "move"; + } + } else { + dndDropEffectWorkaround.dropEffect = event.dataTransfer.dropEffect; + } + + // Clean up + stopDragover(); + event.stopPropagation(); + return false; + }); + + /** + * We have to remove the placeholder when the element is no longer dragged over our list. The + * problem is that the dragleave event is not only fired when the element leaves our list, + * but also when it leaves a child element -- so practically it's fired all the time. As a + * workaround we wait a few milliseconds and then check if the dndDragover class was added + * again. If it is there, dragover must have been called in the meantime, i.e. the element + * is still dragging over the list. If you know a better way of doing this, please tell me! + */ + element.on('dragleave', function(event) { + event = event.originalEvent || event; + + element.removeClass("dndDragover"); + $timeout(function() { + if (!element.hasClass("dndDragover")) { + placeholder.remove(); + } + }, 100); + }); + + /** + * Checks whether the mouse pointer is in the first half of the given target element. + * + * In Chrome we can just use offsetY, but in Firefox we have to use layerY, which only + * works if the child element has position relative. In IE the events are only triggered + * on the listNode instead of the listNodeItem, therefore the mouse positions are + * relative to the parent element of targetNode. + */ + function isMouseInFirstHalf(event, targetNode, relativeToParent) { + var mousePointer = horizontal ? (event.offsetX || event.layerX) + : (event.offsetY || event.layerY); + var targetSize = horizontal ? targetNode.offsetWidth : targetNode.offsetHeight; + var targetPosition = horizontal ? targetNode.offsetLeft : targetNode.offsetTop; + targetPosition = relativeToParent ? targetPosition : 0; + return mousePointer < targetPosition + targetSize / 2; + } + + /** + * Tries to find a child element that has the dndPlaceholder class set. If none was found, a + * new li element is created. + */ + function getPlaceholderElement() { + var placeholder; + angular.forEach(element.children(), function(childNode) { + var child = angular.element(childNode); + if (child.hasClass('dndPlaceholder')) { + placeholder = child; + } + }); + return placeholder || angular.element("
  • "); + } + + /** + * We use the position of the placeholder node to determine at which position of the array the + * object needs to be inserted + */ + function getPlaceholderIndex() { + return Array.prototype.indexOf.call(listNode.children, placeholderNode); + } + + /** + * Checks various conditions that must be fulfilled for a drop to be allowed + */ + function isDropAllowed(event) { + // Disallow drop from external source unless it's allowed explicitly. + if (!dndDragTypeWorkaround.isDragging && !externalSources) return false; + + // Check mimetype. Usually we would use a custom drag type instead of Text, but IE doesn't + // support that. + if (!hasTextMimetype(event.dataTransfer.types)) return false; + + // Now check the dnd-allowed-types against the type of the incoming element. For drops from + // external sources we don't know the type, so it will need to be checked via dnd-drop. + if (attr.dndAllowedTypes && dndDragTypeWorkaround.isDragging) { + var allowed = scope.$eval(attr.dndAllowedTypes); + if (angular.isArray(allowed) && allowed.indexOf(dndDragTypeWorkaround.dragType) === -1) { + return false; + } + } + + // Check whether droping is disabled completely + if (attr.dndDisableIf && scope.$eval(attr.dndDisableIf)) return false; + + return true; + } + + /** + * Small helper function that cleans up if we aborted a drop. + */ + function stopDragover() { + placeholder.remove(); + element.removeClass("dndDragover"); + return true; + } + + /** + * Invokes a callback with some interesting parameters and returns the callbacks return value. + */ + function invokeCallback(expression, event, index, item) { + return $parse(expression)(scope, { + event: event, + index: index, + item: item || undefined, + external: !dndDragTypeWorkaround.isDragging, + type: dndDragTypeWorkaround.isDragging ? dndDragTypeWorkaround.dragType : undefined + }); + } + + /** + * Check if the dataTransfer object contains a drag type that we can handle. In old versions + * of IE the types collection will not even be there, so we just assume a drop is possible. + */ + function hasTextMimetype(types) { + if (!types) return true; + for (var i = 0; i < types.length; i++) { + if (types[i] === "Text" || types[i] === "text/plain") return true; + } + + return false; + } + }; + }]) + + /** + * Use the dnd-nodrag attribute inside of dnd-draggable elements to prevent them from starting + * drag operations. This is especially useful if you want to use input elements inside of + * dnd-draggable elements or create specific handle elements. Note: This directive does not work + * in Internet Explorer 9. + */ + .directive('dndNodrag', function() { + return function(scope, element, attr) { + // Set as draggable so that we can cancel the events explicitly + element.attr("draggable", "true"); + + /** + * Since the element is draggable, the browser's default operation is to drag it on dragstart. + * We will prevent that and also stop the event from bubbling up. + */ + element.on('dragstart', function(event) { + event = event.originalEvent || event; + + if (!event._dndHandle) { + // If a child element already reacted to dragstart and set a dataTransfer object, we will + // allow that. For example, this is the case for user selections inside of input elements. + if (!(event.dataTransfer.types && event.dataTransfer.types.length)) { + event.preventDefault(); + } + event.stopPropagation(); + } + }); + + /** + * Stop propagation of dragend events, otherwise dnd-moved might be triggered and the element + * would be removed. + */ + element.on('dragend', function(event) { + event = event.originalEvent || event; + if (!event._dndHandle) { + event.stopPropagation(); + } + }); + }; + }) + + /** + * Use the dnd-handle directive within a dnd-nodrag element in order to allow dragging with that + * element after all. Therefore, by combining dnd-nodrag and dnd-handle you can allow + * dnd-draggable elements to only be dragged via specific "handle" elements. Note that Internet + * Explorer will show the handle element as drag image instead of the dnd-draggable element. You + * can work around this by styling the handle element differently when it is being dragged. Use + * the CSS selector .dndDragging:not(.dndDraggingSource) [dnd-handle] for that. + */ + .directive('dndHandle', function() { + return function(scope, element, attr) { + element.attr("draggable", "true"); + + element.on('dragstart dragend', function(event) { + event = event.originalEvent || event; + event._dndHandle = true; + }); + }; + }) + + /** + * This workaround handles the fact that Internet Explorer does not support drag types other than + * "Text" and "URL". That means we can not know whether the data comes from one of our elements or + * is just some other data like a text selection. As a workaround we save the isDragging flag in + * here. When a dropover event occurs, we only allow the drop if we are already dragging, because + * that means the element is ours. + */ + .factory('dndDragTypeWorkaround', function(){ return {} }) + + /** + * Chrome on Windows does not set the dropEffect field, which we need in dragend to determine + * whether a drag operation was successful. Therefore we have to maintain it in this global + * variable. The bug report for that has been open for years: + * https://code.google.com/p/chromium/issues/detail?id=39399 + */ + .factory('dndDropEffectWorkaround', function(){ return {} }); diff --git a/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.min.js b/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.min.js new file mode 100644 index 0000000000..3532582184 --- /dev/null +++ b/awx/ui/client/lib/angular-drag-and-drop-lists/angular-drag-and-drop-lists.min.js @@ -0,0 +1,35 @@ +/** + * angular-drag-and-drop-lists v1.4.0 + * + * Copyright (c) 2014 Marcel Juenemann marcel@juenemann.cc + * Copyright (c) 2014-2016 Google Inc. + * https://github.com/marceljuenemann/angular-drag-and-drop-lists + * + * License: MIT + */ +angular.module("dndLists",[]).directive("dndDraggable",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,n,r,t){return function(a,d,o){d.attr("draggable","true"),o.dndDisableIf&&a.$watch(o.dndDisableIf,function(e){d.attr("draggable",!e)}),d.on("dragstart",function(i){return i=i.originalEvent||i,"false"==d.attr("draggable")?!0:(i.dataTransfer.setData("Text",angular.toJson(a.$eval(o.dndDraggable))),i.dataTransfer.effectAllowed=o.dndEffectAllowed||"move",d.addClass("dndDragging"),n(function(){d.addClass("dndDraggingSource")},0),r.dropEffect="none",t.isDragging=!0,t.dragType=o.dndType?a.$eval(o.dndType):void 0,i._dndHandle&&i.dataTransfer.setDragImage&&i.dataTransfer.setDragImage(d[0],0,0),e(o.dndDragstart)(a,{event:i}),void i.stopPropagation())}),d.on("dragend",function(i){i=i.originalEvent||i +var f=r.dropEffect +a.$apply(function(){switch(f){case"move":e(o.dndMoved)(a,{event:i}) +break +case"copy":e(o.dndCopied)(a,{event:i}) +break +case"none":e(o.dndCanceled)(a,{event:i})}e(o.dndDragend)(a,{event:i,dropEffect:f})}),d.removeClass("dndDragging"),n(function(){d.removeClass("dndDraggingSource")},0),t.isDragging=!1,i.stopPropagation()}),d.on("click",function(n){o.dndSelected&&(n=n.originalEvent||n,a.$apply(function(){e(o.dndSelected)(a,{event:n})}),n.stopPropagation())}),d.on("selectstart",function(){this.dragDrop&&this.dragDrop()})}}]).directive("dndList",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,n,r,t){return function(a,d,o){function i(e,n,r){var t=E?e.offsetX||e.layerX:e.offsetY||e.layerY,a=E?n.offsetWidth:n.offsetHeight,d=E?n.offsetLeft:n.offsetTop +return d=r?d:0,d+a/2>t}function f(){var e +return angular.forEach(d.children(),function(n){var r=angular.element(n) +r.hasClass("dndPlaceholder")&&(e=r)}),e||angular.element("
  • ")}function l(){return Array.prototype.indexOf.call(D.children,v)}function g(e){if(!t.isDragging&&!y)return!1 +if(!c(e.dataTransfer.types))return!1 +if(o.dndAllowedTypes&&t.isDragging){var n=a.$eval(o.dndAllowedTypes) +if(angular.isArray(n)&&-1===n.indexOf(t.dragType))return!1}return o.dndDisableIf&&a.$eval(o.dndDisableIf)?!1:!0}function s(){return p.remove(),d.removeClass("dndDragover"),!0}function u(n,r,d,o){return e(n)(a,{event:r,index:d,item:o||void 0,external:!t.isDragging,type:t.isDragging?t.dragType:void 0})}function c(e){if(!e)return!0 +for(var n=0;n" + ], + "description": "Angular directives for sorting nested lists using the HTML5 Drag & Drop API", + "keywords": [ + "angular", + "drag", + "drop", + "dnd", + "nested", + "sortable", + "lists", + "html5" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "demo", + "*.json", + "test", + "tests" + ] +} diff --git a/awx/ui/client/lib/angular-scheduler/.bower.json b/awx/ui/client/lib/angular-scheduler/.bower.json index d376fdee76..333c3dda7a 100644 --- a/awx/ui/client/lib/angular-scheduler/.bower.json +++ b/awx/ui/client/lib/angular-scheduler/.bower.json @@ -1,6 +1,6 @@ { "name": "angular-scheduler", - "version": "0.0.14", + "version": "0.0.19", "authors": [ "Chris Houseknecht " ], @@ -36,13 +36,13 @@ "rrule", "calendar" ], - "_release": "0.0.14", + "_release": "0.0.19", "_resolution": { "type": "version", - "tag": "v0.0.14", - "commit": "618c50fabaf774f91db3ed3fb086ac9f45c22136" + "tag": "v0.0.19", + "commit": "952fb090bae47fe748bbb502d7409915c68bb572" }, - "_source": "git://github.com/chouseknecht/angular-scheduler.git", - "_target": "~0.0.14", + "_source": "https://github.com/chouseknecht/angular-scheduler.git", + "_target": "~0.0.19", "_originalSource": "angular-scheduler" } \ No newline at end of file diff --git a/awx/ui/client/lib/angular-scheduler/LICENSE b/awx/ui/client/lib/angular-scheduler/LICENSE index a2cb8e33fc..8e6c0e1a34 100644 --- a/awx/ui/client/lib/angular-scheduler/LICENSE +++ b/awx/ui/client/lib/angular-scheduler/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Ansible, Inc. +Copyright (c) 2014 Ansible, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/awx/ui/client/lib/angular-scheduler/app/partials/main.html b/awx/ui/client/lib/angular-scheduler/app/partials/main.html index 578400203f..19b24a787a 100644 --- a/awx/ui/client/lib/angular-scheduler/app/partials/main.html +++ b/awx/ui/client/lib/angular-scheduler/app/partials/main.html @@ -1,7 +1,7 @@
    - +
    - +
    @@ -131,7 +89,7 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    -
    Please provide a value between 1 and 999.
    +
    Provide a value between 1 and 999
    @@ -146,12 +104,12 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    -
    The day must be between 1 and 31.
    +
    Must be between 1 and 31
    - +
    @@ -183,12 +141,12 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    -
    The day must be between 1 and 31.
    +
    Must be between 1 and 31
    - +
    @@ -225,7 +183,7 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    -
    Please select one or more days.
    +
    Select one or more days
    @@ -242,9 +200,9 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    - +
    -
    Please provide a value between 1 and 999.
    +
    Provide a value between 1 and 999
    @@ -257,7 +215,7 @@ Caution: Setting both numerical variables to "0" will delete all facts.
    -
    Please provide a valid date.
    +
    Provide a valid date
    diff --git a/awx/ui/client/lib/angular-scheduler/lib/angular-scheduler.js b/awx/ui/client/lib/angular-scheduler/lib/angular-scheduler.js index a45cfcab31..dfe3b7f8f8 100644 --- a/awx/ui/client/lib/angular-scheduler/lib/angular-scheduler.js +++ b/awx/ui/client/lib/angular-scheduler/lib/angular-scheduler.js @@ -1,7 +1,7 @@ /*************************************************************************** * angular-scheruler.js * - * Copyright (c) 2015 Ansible, Inc. + * Copyright (c) 2014 Ansible, Inc. * * Maintainers: * @@ -59,7 +59,7 @@ angular.module('AngularScheduler', ['underscore']) scope.scheduleRepeatChange(); }; - scope.scheduleTimeChange = function() { + scope.scheduleTimeChange = function(callback) { if (scope.schedulerStartDt === "" || scope.schedulerStartDt === null || scope.schedulerStartDt === undefined) { scope.startDateError("Provide a valid start date and time"); scope.schedulerUTCTime = ''; @@ -91,13 +91,33 @@ angular.module('AngularScheduler', ['underscore']) ':' + scope.schedulerStartSecond + '.000Z'); } } + if (callback){ + callback(); + } }; + // change the utc time with the new start date + scope.$watch('schedulerStartDt', function() { + scope.scheduleTimeChange(scope.processSchedulerEndDt); + }); + scope.resetError = function(variable) { scope[variable] = false; }; scope.scheduleRepeatChange = function() { + // reset the week buttons and scope values to be empty + // when the schedule repeat is changed to week + if (scope.schedulerFrequency.name === "Week") { + scope.weekDays = []; + delete scope.weekDaySUClass; + delete scope.weekDayMOClass; + delete scope.weekDayTUClass; + delete scope.weekDayWEClass; + delete scope.weekDayTHClass; + delete scope.weekDayFRClass; + delete scope.weekDaySAClass; + } if (scope.schedulerFrequency && scope.schedulerFrequency.value !== '' && scope.schedulerFrequency.value !== 'none') { scope.schedulerInterval = 1; scope.schedulerShowInterval = true; @@ -108,6 +128,7 @@ angular.module('AngularScheduler', ['underscore']) scope.schedulerEnd = scope.endOptions[0]; } scope.sheduler_frequency_error = false; + scope.$emit("updateSchedulerSelects"); }; scope.showCalendar = function(fld) { @@ -167,12 +188,8 @@ angular.module('AngularScheduler', ['underscore']) } }; - scope.schedulerEndChange = function() { - var dt = new Date(), // date adjusted to local zone automatically - month = $filter('schZeroPad')(dt.getMonth() + 1, 2), - day = $filter('schZeroPad')(dt.getDate(), 2); - scope.schedulerEndDt = month + '/' + day + '/' + dt.getFullYear(); - scope.schedulerOccurrenceCount = 1; + scope.schedulerEndChange = function(key, value) { + scope[key] = $filter('schZeroPad')(parseInt(value), 2); }; // When timezones become available, use to set defaults @@ -223,7 +240,10 @@ angular.module('AngularScheduler', ['underscore']) if (this.scope.schedulerEnd.value === 'on') { options.endDate = scope.schedulerEndDt.replace(/(\d{2})\/(\d{2})\/(\d{4})/, function(match, p1, p2, p3) { return p3 + '-' + p1 + '-' + p2; - }) + 'T' + this.scope.schedulerUTCTime.replace(/\d{2}\/\d{2}\/\d{4} /,'').replace(/ UTC/,'') + 'Z'; + }) + 'T' + + $filter('schZeroPad')(this.scope.schedulerEndHour,2) + ':' + + $filter('schZeroPad')(this.scope.schedulerEndMinute,2) + ':' + + $filter('schZeroPad')(this.scope.schedulerEndSecond,2)+ 'Z'; } if (this.scope.schedulerFrequency.value === 'weekly') { options.weekDays = this.scope.weekDays; @@ -297,10 +317,7 @@ angular.module('AngularScheduler', ['underscore']) } return false; }); - scope.rrule_nlp_description = rrule.toText().replace(/^RRule error.*$/,'Minutely or hourly frequency selected'); - if(rrule === "none"){ - scope.rrule_nlp_description = 'Natural language description not available'; - } + scope.rrule_nlp_description = rrule.toText().replace(/^RRule error.*$/,'Natural language description not available'); scope.rrule = rrule.toString(); } }; @@ -344,11 +361,6 @@ angular.module('AngularScheduler', ['underscore']) $('#schedulerName').addClass('ng-dirty'); validity = false; } - if(this.scope.cleanupJob===true && !this.scope.scheduler_form.schedulerPurgeDays.$valid){ - this.scope.scheduler_form.schedulerPurgeDays.$dirty = true; - $('#schedulerPurgeDays').addClass('ng-dirty'); - validity = false; - } if (this.scope.schedulerEnd.value === 'on') { if (!/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)) { this.scope.scheduler_form.schedulerEndDt.$pristine = false; @@ -406,6 +418,12 @@ angular.module('AngularScheduler', ['underscore']) return validity; }; + var that = this; + + that.scope.$on("loadSchedulerDetailPane", function() { + that.isValid(); + }); + // Returns an rrule object this.getRRule = function() { var options = this.getOptions(); @@ -797,17 +815,13 @@ angular.module('AngularScheduler', ['underscore']) }); } scope.schedulerEnd = scope.endOptions[2]; - if (useTimezone) { - dt = new Date(value); // date adjusted to local zone automatically - month = $filter('schZeroPad')(dt.getMonth() + 1, 2); - day = $filter('schZeroPad')(dt.getDate(), 2); - scope.schedulerEndDt = month + '/' + day + '/' + dt.getFullYear(); - } - else { scope.schedulerEndDt = value.replace(/T.*$/,'').replace(/(\d{4})-(\d{2})-(\d{2})/, function(match, p1, p2, p3) { return p2 + '/' + p3 + '/' + p1; }); - } + timeString = value.replace(/^.*T/,''); + scope.schedulerEndHour = $filter('schZeroPad')(timeString.substr(0,2),2); + scope.schedulerEndMinute = $filter('schZeroPad')(timeString.substr(3,2),2); + scope.schedulerEndSecond = $filter('schZeroPad')(timeString.substr(6,2),2); } if (key === 'BYMONTH') { @@ -887,7 +901,6 @@ angular.module('AngularScheduler', ['underscore']) defaultDay = $filter('schZeroPad')(defaultDate.getDate(), 2), defaultDateStr = defaultMonth + '/' + defaultDay + '/' + defaultDate.getFullYear(); scope.schedulerName = ''; - scope.schedulerPurgeDays = 30; scope.weekDays = []; scope.schedulerStartHour = '00'; scope.schedulerStartMinute = '00'; diff --git a/awx/ui/client/lib/angular-scheduler/package.json b/awx/ui/client/lib/angular-scheduler/package.json index ed29e7c7f2..9e85396750 100644 --- a/awx/ui/client/lib/angular-scheduler/package.json +++ b/awx/ui/client/lib/angular-scheduler/package.json @@ -1,6 +1,6 @@ { "name": "angular-scheduler", - "version": "0.0.14", + "version": "0.0.19", "devDependencies": { "grunt": "~0.4.2", "grunt-contrib-jshint": "~0.6.3", diff --git a/awx/ui/client/lib/angular-ui-router/.bower.json b/awx/ui/client/lib/angular-ui-router/.bower.json new file mode 100644 index 0000000000..d4d0fa469d --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/.bower.json @@ -0,0 +1,34 @@ +{ + "name": "angular-ui-router", + "version": "0.2.15", + "main": "./release/angular-ui-router.js", + "dependencies": { + "angular": ">= 1.0.8" + }, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "component.json", + "package.json", + "lib", + "config", + "sample", + "test", + "tests", + "ngdoc_assets", + "Gruntfile.js", + "files.js" + ], + "homepage": "https://github.com/angular-ui/ui-router", + "_release": "0.2.15", + "_resolution": { + "type": "version", + "tag": "0.2.15", + "commit": "805e69bae319e922e4d3265b7ef565058aaff850" + }, + "_source": "git://github.com/angular-ui/ui-router.git", + "_target": "~0.2.15", + "_originalSource": "angular-ui-router", + "_direct": true +} \ No newline at end of file diff --git a/awx/ui/client/lib/angular-ui-router/CHANGELOG.md b/awx/ui/client/lib/angular-ui-router/CHANGELOG.md new file mode 100644 index 0000000000..23b59d3a77 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/CHANGELOG.md @@ -0,0 +1,228 @@ + +### 0.2.14 (2015-04-23) + + +#### Bug Fixes + +* **$StateRefDirective:** resolve missing support for svg anchor elements #1667 ([0149a7bb](https://github.com/angular-ui/ui-router/commit/0149a7bb38b7af99388a1ad7cc9909a7b7c4439d)) +* **$urlMatcherFactory:** + * regex params should respect case-sensitivity ([1e10519f](https://github.com/angular-ui/ui-router/commit/1e10519f3be6bbf0cefdcce623cd2ade06e649e5), closes [#1671](https://github.com/angular-ui/ui-router/issues/1671)) + * unquote all dashes from array params ([06664d33](https://github.com/angular-ui/ui-router/commit/06664d330f882390655dcfa83e10276110d0d0fa)) + * add Type.$normalize function ([b0c6aa23](https://github.com/angular-ui/ui-router/commit/b0c6aa2350fdd3ce8483144774adc12f5a72b7e9)) + * make optional params regex grouping optional ([06f73794](https://github.com/angular-ui/ui-router/commit/06f737945e83e668d09cfc3bcffd04a500ff1963), closes [#1576](https://github.com/angular-ui/ui-router/issues/1576)) +* **$state:** allow about.*.** glob patterns ([e39b27a2](https://github.com/angular-ui/ui-router/commit/e39b27a2cb7d88525c446a041f9fbf1553202010)) +* **uiSref:** + * use Object's toString instead of Window's toString ([2aa7f4d1](https://github.com/angular-ui/ui-router/commit/2aa7f4d139dbd5b9fcc4afdcf2ab6642c87f5671)) + * add absolute to allowed transition options ([ae1b3c4e](https://github.com/angular-ui/ui-router/commit/ae1b3c4eedc37983400d830895afb50457c63af4)) +* **uiSrefActive:** Apply active classes on lazy loaded states ([f0ddbe7b](https://github.com/angular-ui/ui-router/commit/f0ddbe7b4a91daf279c3b7d0cee732bb1f3be5b4)) +* **uiView:** add `$element` to locals for view controller ([db68914c](https://github.com/angular-ui/ui-router/commit/db68914cd6c821e7dec8155bd33142a3a97f5453)) + + +#### Features + +* **$state:** + * support URLs with #fragments ([3da0a170](https://github.com/angular-ui/ui-router/commit/3da0a17069e27598c0f9d9164e104dd5ce05cdc6)) + * inject resolve params into controllerProvider ([b380c223](https://github.com/angular-ui/ui-router/commit/b380c223fe12e2fde7582c0d6b1ed7b15a23579b), closes [#1131](https://github.com/angular-ui/ui-router/issues/1131)) + * added 'state' to state reload method (feat no.1612) - modiefied options.reload ([b8f04575](https://github.com/angular-ui/ui-router/commit/b8f04575a8557035c1858c4d5c8dbde3e1855aaa)) + * broadcast $stateChangeCancel event when event.preventDefault() is called in $sta ([ecefb758](https://github.com/angular-ui/ui-router/commit/ecefb758cb445e41620b62a272aafa3638613d7a)) +* **$uiViewScroll:** change function to return promise ([c2a9a311](https://github.com/angular-ui/ui-router/commit/c2a9a311388bb212e5a2e820536d1d739f829ccd), closes [#1702](https://github.com/angular-ui/ui-router/issues/1702)) +* **uiSrefActive:** Added support for multiple nested uiSref directives ([b1844948](https://github.com/angular-ui/ui-router/commit/b18449481d152b50705abfce2493a444eb059fa5)) + + + +### 0.2.13 (2014-11-20) + +This release primarily fixes issues reported against 0.2.12 + +#### Bug Fixes + +* **$state:** fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma ([19715d15](https://github.com/angular-ui/ui-router/commit/19715d15e3cbfff724519e9febedd05b49c75baa), closes [#1513](https://github.com/angular-ui/ui-router/issues/1513)) + * Avoid re-synchronizing from url after .transitionTo ([b267ecd3](https://github.com/angular-ui/ui-router/commit/b267ecd348e5c415233573ef95ebdbd051875f52), closes [#1573](https://github.com/angular-ui/ui-router/issues/1573)) +* **$urlMatcherFactory:** + * Built-in date type uses local time zone ([d726bedc](https://github.com/angular-ui/ui-router/commit/d726bedcbb5f70a5660addf43fd52ec730790293)) + * make date type fn check .is before running ([aa94ce3b](https://github.com/angular-ui/ui-router/commit/aa94ce3b86632ad05301530a2213099da73a3dc0), closes [#1564](https://github.com/angular-ui/ui-router/issues/1564)) + * early binding of array handler bypasses type resolution ([ada4bc27](https://github.com/angular-ui/ui-router/commit/ada4bc27df5eff3ba3ab0de94a09bd91b0f7a28c)) + * add 'any' Type for non-encoding non-url params ([3bfd75ab](https://github.com/angular-ui/ui-router/commit/3bfd75ab445ee2f1dd55275465059ed116b10b27), closes [#1562](https://github.com/angular-ui/ui-router/issues/1562)) + * fix encoding slashes in params ([0c983a08](https://github.com/angular-ui/ui-router/commit/0c983a08e2947f999683571477debd73038e95cf), closes [#1119](https://github.com/angular-ui/ui-router/issues/1119)) + * fix mixed path/query params ordering problem ([a479fbd0](https://github.com/angular-ui/ui-router/commit/a479fbd0b8eb393a94320973e5b9a62d83912ee2), closes [#1543](https://github.com/angular-ui/ui-router/issues/1543)) +* **ArrayType:** + * specify empty array mapping corner case ([74aa6091](https://github.com/angular-ui/ui-router/commit/74aa60917e996b0b4e27bbb4eb88c3c03832021d), closes [#1511](https://github.com/angular-ui/ui-router/issues/1511)) + * fix .equals for array types ([5e6783b7](https://github.com/angular-ui/ui-router/commit/5e6783b77af9a90ddff154f990b43dbb17eeda6e), closes [#1538](https://github.com/angular-ui/ui-router/issues/1538)) +* **Param:** fix default value shorthand declaration ([831d812a](https://github.com/angular-ui/ui-router/commit/831d812a524524c71f0ee1c9afaf0487a5a66230), closes [#1554](https://github.com/angular-ui/ui-router/issues/1554)) +* **common:** fixed the _.filter clone to not create sparse arrays ([750f5cf5](https://github.com/angular-ui/ui-router/commit/750f5cf5fd91f9ada96f39e50d39aceb2caf22b6), closes [#1563](https://github.com/angular-ui/ui-router/issues/1563)) +* **ie8:** fix calls to indexOf and filter ([dcb31b84](https://github.com/angular-ui/ui-router/commit/dcb31b843391b3e61dee4de13f368c109541813e), closes [#1556](https://github.com/angular-ui/ui-router/issues/1556)) + + +#### Features + +* add json parameter Type ([027f1fcf](https://github.com/angular-ui/ui-router/commit/027f1fcf9c0916cea651e88981345da6f9ff214a)) + + + +### 0.2.12 (2014-11-13) + +#### Bug Fixes + +* **$resolve:** use resolve fn result, not parent resolved value of same name ([67f5e00c](https://github.com/angular-ui/ui-router/commit/67f5e00cc9aa006ce3fe6cde9dff261c28eab70a), closes [#1317], [#1353]) +* **$state:** + * populate default params in .transitionTo. ([3f60fbe6](https://github.com/angular-ui/ui-router/commit/3f60fbe6d65ebeca8d97952c05aa1d269f1b7ba1), closes [#1396]) + * reload() now reinvokes controllers ([73443420](https://github.com/angular-ui/ui-router/commit/7344342018847902594dc1fc62d30a5c30f01763), closes [#582]) + * do not emit $viewContentLoading if notify: false ([74255feb](https://github.com/angular-ui/ui-router/commit/74255febdf48ae082a02ca1e735165f2c369a463), closes [#1387](https://github.com/angular-ui/ui-router/issues/1387)) + * register states at config-time ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a)) + * handle parent.name when parent is obj ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a)) +* **$urlMatcherFactory:** + * register types at config ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a), closes [#1476]) + * made path params default value "" for backwards compat ([8f998e71](https://github.com/angular-ui/ui-router/commit/8f998e71e43a0b31293331c981f5db0f0097b8ba)) + * Pre-replace certain param values for better mapping ([6374a3e2](https://github.com/angular-ui/ui-router/commit/6374a3e29ab932014a7c77d2e1ab884cc841a2e3)) + * fixed ParamSet.$$keys() ordering ([9136fecb](https://github.com/angular-ui/ui-router/commit/9136fecbc2bfd4fda748a9914f0225a46c933860)) + * empty string policy now respected in Param.value() ([db12c85c](https://github.com/angular-ui/ui-router/commit/db12c85c16f2d105415f9bbbdeb11863f64728e0)) + * "string" type now encodes/decodes slashes ([3045e415](https://github.com/angular-ui/ui-router/commit/3045e41577a8b8b8afc6039f42adddf5f3c061ec), closes [#1119]) + * allow arrays in both path and query params ([fdd2f2c1](https://github.com/angular-ui/ui-router/commit/fdd2f2c191c4a67c874fdb9ec9a34f8dde9ad180), closes [#1073], [#1045], [#1486], [#1394]) + * typed params in search ([8d4cab69](https://github.com/angular-ui/ui-router/commit/8d4cab69dd67058e1a716892cc37b7d80a57037f), closes [#1488](https://github.com/angular-ui/ui-router/issues/1488)) + * no longer generate unroutable urls ([cb9fd9d8](https://github.com/angular-ui/ui-router/commit/cb9fd9d8943cb26c7223f6990db29c82ae8740f8), closes [#1487](https://github.com/angular-ui/ui-router/issues/1487)) + * handle optional parameter followed by required parameter in url format. ([efc72106](https://github.com/angular-ui/ui-router/commit/efc72106ddcc4774b48ea176a505ef9e95193b41)) + * default to parameter string coersion. ([13a468a7](https://github.com/angular-ui/ui-router/commit/13a468a7d54c2fb0751b94c0c1841d580b71e6dc), closes [#1414](https://github.com/angular-ui/ui-router/issues/1414)) + * concat respects strictMode/caseInsensitive ([dd72e103](https://github.com/angular-ui/ui-router/commit/dd72e103edb342d9cf802816fe127e1bbd68fd5f), closes [#1395]) +* **ui-sref:** + * Allow sref state options to take a scope object ([b5f7b596](https://github.com/angular-ui/ui-router/commit/b5f7b59692ce4933e2d63eb5df3f50a4ba68ccc0)) + * replace raw href modification with attrs. ([08c96782](https://github.com/angular-ui/ui-router/commit/08c96782faf881b0c7ab00afc233ee6729548fa0)) + * nagivate to state when url is "" fix($state.href): generate href for state with ([656b5aab](https://github.com/angular-ui/ui-router/commit/656b5aab906e5749db9b5a080c6a83b95f50fd91), closes [#1363](https://github.com/angular-ui/ui-router/issues/1363)) + * Check that state is defined in isMatch() ([92aebc75](https://github.com/angular-ui/ui-router/commit/92aebc7520f88babdc6e266536086e07263514c3), closes [#1314](https://github.com/angular-ui/ui-router/issues/1314), [#1332](https://github.com/angular-ui/ui-router/issues/1332)) +* **uiView:** + * allow inteprolated ui-view names ([81f6a19a](https://github.com/angular-ui/ui-router/commit/81f6a19a432dac9198fd33243855bfd3b4fea8c0), closes [#1324](https://github.com/angular-ui/ui-router/issues/1324)) + * Made anim work with angular 1.3 ([c3bb7ad9](https://github.com/angular-ui/ui-router/commit/c3bb7ad903da1e1f3c91019cfd255be8489ff4ef), closes [#1367](https://github.com/angular-ui/ui-router/issues/1367), [#1345](https://github.com/angular-ui/ui-router/issues/1345)) +* **urlRouter:** html5Mode accepts an object from angular v1.3.0-rc.3 ([7fea1e9d](https://github.com/angular-ui/ui-router/commit/7fea1e9d0d8c6e09cc6c895ecb93d4221e9adf48)) +* **stateFilters:** mark state filters as stateful. ([a00b353e](https://github.com/angular-ui/ui-router/commit/a00b353e3036f64a81245c4e7898646ba218f833), closes [#1479]) +* **ui-router:** re-add IE8 compatibility for map/filter/keys ([8ce69d9f](https://github.com/angular-ui/ui-router/commit/8ce69d9f7c886888ab53eca7e53536f36b428aae), closes [#1518], [#1383]) +* **package:** point 'main' to a valid filename ([ac903350](https://github.com/angular-ui/ui-router/commit/ac9033501debb63364539d91fbf3a0cba4579f8e)) +* **travis:** make CI build faster ([0531de05](https://github.com/angular-ui/ui-router/commit/0531de052e414a8d839fbb4e7635e923e94865b3)) + + +#### Features + +##### Default and Typed params + +This release includes a lot of bug fixes around default/optional and typed parameters. As such, 0.2.12 is the first release where we recommend those features be used. + +* **$state:** + * add state params validation ([b1379e6a](https://github.com/angular-ui/ui-router/commit/b1379e6a4d38f7ed7436e05873932d7c279af578), closes [#1433](https://github.com/angular-ui/ui-router/issues/1433)) + * is/includes/get work on relative stateOrName ([232e94b3](https://github.com/angular-ui/ui-router/commit/232e94b3c2ca2c764bb9510046e4b61690c87852)) + * .reload() returns state transition promise ([639e0565](https://github.com/angular-ui/ui-router/commit/639e0565dece9d5544cc93b3eee6e11c99bd7373)) +* **$templateFactory:** request templateURL as text/html ([ccd60769](https://github.com/angular-ui/ui-router/commit/ccd6076904a4b801d77b47f6e2de4c06ce9962f8), closes [#1287]) +* **$urlMatcherFactory:** Made a Params and ParamSet class ([0cc1e6cc](https://github.com/angular-ui/ui-router/commit/0cc1e6cc461a4640618e2bb594566551c54834e2)) + + + + +### 0.2.11 (2014-08-26) + + +#### Bug Fixes + +* **$resolve:** Resolves only inherit from immediate parent fixes #702 ([df34e20c](https://github.com/angular-ui/ui-router/commit/df34e20c576299e7a3c8bd4ebc68d42341c0ace9)) +* **$state:** + * change $state.href default options.inherit to true ([deea695f](https://github.com/angular-ui/ui-router/commit/deea695f5cacc55de351ab985144fd233c02a769)) + * sanity-check state lookups ([456fd5ae](https://github.com/angular-ui/ui-router/commit/456fd5aec9ea507518927bfabd62b4afad4cf714), closes [#980](https://github.com/angular-ui/ui-router/issues/980)) + * didn't comply to inherit parameter ([09836781](https://github.com/angular-ui/ui-router/commit/09836781f126c1c485b06551eb9cfd4fa0f45c35)) + * allow view content loading broadcast ([7b78edee](https://github.com/angular-ui/ui-router/commit/7b78edeeb52a74abf4d3f00f79534033d5a08d1a)) +* **$urlMatcherFactory:** + * detect injected functions ([91f75ae6](https://github.com/angular-ui/ui-router/commit/91f75ae66c4d129f6f69e53bd547594e9661f5d5)) + * syntax ([1ebed370](https://github.com/angular-ui/ui-router/commit/1ebed37069bae8614d41541d56521f5c45f703f3)) +* **UrlMatcher:** + * query param function defaults ([f9c20530](https://github.com/angular-ui/ui-router/commit/f9c205304f10d8a4ebe7efe9025e642016479a51)) + * don't decode default values ([63607bdb](https://github.com/angular-ui/ui-router/commit/63607bdbbcb432d3fb37856a1cb3da0cd496804e)) +* **travis:** update Node version to fix build ([d6b95ef2](https://github.com/angular-ui/ui-router/commit/d6b95ef23d9dacb4eba08897f5190a0bcddb3a48)) +* **uiSref:** + * Generate an href for states with a blank url. closes #1293 ([691745b1](https://github.com/angular-ui/ui-router/commit/691745b12fa05d3700dd28f0c8d25f8a105074ad)) + * should inherit params by default ([b973dad1](https://github.com/angular-ui/ui-router/commit/b973dad155ad09a7975e1476bd096f7b2c758eeb)) + * cancel transition if preventDefault() has been called ([2e6d9167](https://github.com/angular-ui/ui-router/commit/2e6d9167d3afbfbca6427e53e012f94fb5fb8022)) +* **uiView:** Fixed infinite loop when is called .go() from a controller. ([e13988b8](https://github.com/angular-ui/ui-router/commit/e13988b8cd6231d75c78876ee9d012cc87f4a8d9), closes [#1194](https://github.com/angular-ui/ui-router/issues/1194)) +* **docs:** + * Fixed link to milestones ([6c0ae500](https://github.com/angular-ui/ui-router/commit/6c0ae500cc238ea9fc95adcc15415c55fc9e1f33)) + * fix bug in decorator example ([4bd00af5](https://github.com/angular-ui/ui-router/commit/4bd00af50b8b88a49d1545a76290731cb8e0feb1)) + * Removed an incorrect semi-colon ([af97cef8](https://github.com/angular-ui/ui-router/commit/af97cef8b967f2e32177e539ef41450dca131a7d)) + * Explain return value of rule as function ([5e887890](https://github.com/angular-ui/ui-router/commit/5e8878900a6ffe59a81aed531a3925e34a297377)) + + +#### Features + +* **$state:** + * allow parameters to pass unharmed ([8939d057](https://github.com/angular-ui/ui-router/commit/8939d0572ab1316e458ef016317ecff53131a822)) + * **BREAKING CHANGE**: state parameters are no longer automatically coerced to strings, and unspecified parameter values are now set to undefined rather than null. + * allow prevent syncUrl on failure ([753060b9](https://github.com/angular-ui/ui-router/commit/753060b910d5d2da600a6fa0757976e401c33172)) +* **typescript:** Add typescript definitions for component builds ([521ceb3f](https://github.com/angular-ui/ui-router/commit/521ceb3fd7850646422f411921e21ce5e7d82e0f)) +* **uiSref:** extend syntax for ui-sref ([71cad3d6](https://github.com/angular-ui/ui-router/commit/71cad3d636508b5a9fe004775ad1f1adc0c80c3e)) +* **uiSrefActive:** + * Also activate for child states. ([bf163ad6](https://github.com/angular-ui/ui-router/commit/bf163ad6ce176ce28792696c8302d7cdf5c05a01), closes [#818](https://github.com/angular-ui/ui-router/issues/818)) + * **BREAKING CHANGE** Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance. + + * uiSrefActiveEq: new directive with old ui-sref-active behavior +* **$urlRouter:** + * defer URL change interception ([c72d8ce1](https://github.com/angular-ui/ui-router/commit/c72d8ce11916d0ac22c81b409c9e61d7048554d7)) + * force URLs to have valid params ([d48505cd](https://github.com/angular-ui/ui-router/commit/d48505cd328d83e39d5706e085ba319715f999a6)) + * abstract $location handling ([08b4636b](https://github.com/angular-ui/ui-router/commit/08b4636b294611f08db35f00641eb5211686fb50)) +* **$urlMatcherFactory:** + * fail on bad parameters ([d8f124c1](https://github.com/angular-ui/ui-router/commit/d8f124c10d00c7e5dde88c602d966db261aea221)) + * date type support ([b7f074ff](https://github.com/angular-ui/ui-router/commit/b7f074ff65ca150a3cdbda4d5ad6cb17107300eb)) + * implement type support ([450b1f0e](https://github.com/angular-ui/ui-router/commit/450b1f0e8e03c738174ff967f688b9a6373290f4)) +* **UrlMatcher:** + * handle query string arrays ([9cf764ef](https://github.com/angular-ui/ui-router/commit/9cf764efab45fa9309368688d535ddf6e96d6449), closes [#373](https://github.com/angular-ui/ui-router/issues/373)) + * injectable functions as defaults ([00966ecd](https://github.com/angular-ui/ui-router/commit/00966ecd91fb745846039160cab707bfca8b3bec)) + * default values & type decoding for query params ([a472b301](https://github.com/angular-ui/ui-router/commit/a472b301389fbe84d1c1fa9f24852b492a569d11)) + * allow shorthand definitions ([5b724304](https://github.com/angular-ui/ui-router/commit/5b7243049793505e44b6608ea09878c37c95b1f5)) + * validates whole interface ([32b27db1](https://github.com/angular-ui/ui-router/commit/32b27db173722e9194ef1d5c0ea7d93f25a98d11)) + * implement non-strict matching ([a3e21366](https://github.com/angular-ui/ui-router/commit/a3e21366bee0475c9795a1ec76f70eec41c5b4e3)) + * add per-param config support ([07b3029f](https://github.com/angular-ui/ui-router/commit/07b3029f4d409cf955780113df92e36401b47580)) + * **BREAKING CHANGE**: the `params` option in state configurations must now be an object keyed by parameter name. + +### 0.2.10 (2014-03-12) + + +#### Bug Fixes + +* **$state:** use $browser.baseHref() when generating urls with .href() ([cbcc8488](https://github.com/angular-ui/ui-router/commit/cbcc84887d6b6d35258adabb97c714cd9c1e272d)) +* **bower.json:** JS files should not be ignored ([ccdab193](https://github.com/angular-ui/ui-router/commit/ccdab193315f304eb3be5f5b97c47a926c79263e)) +* **dev:** karma:background task is missing, can't run grunt:dev. ([d9f7b898](https://github.com/angular-ui/ui-router/commit/d9f7b898e8e3abb8c846b0faa16a382913d7b22b)) +* **sample:** Contacts menu button not staying active when navigating to detail states. Need t ([2fcb8443](https://github.com/angular-ui/ui-router/commit/2fcb84437cb43ade12682a92b764f13cac77dfe7)) +* **uiSref:** support mock-clicks/events with no data ([717d3ff7](https://github.com/angular-ui/ui-router/commit/717d3ff7d0ba72d239892dee562b401cdf90e418)) +* **uiView:** + * Do NOT autoscroll when autoscroll attr is missing ([affe5bd7](https://github.com/angular-ui/ui-router/commit/affe5bd785cdc3f02b7a9f64a52e3900386ec3a0), closes [#807](https://github.com/angular-ui/ui-router/issues/807)) + * Refactoring uiView directive to copy ngView logic ([548fab6a](https://github.com/angular-ui/ui-router/commit/548fab6ab9debc9904c5865c8bc68b4fc3271dd0), closes [#857](https://github.com/angular-ui/ui-router/issues/857), [#552](https://github.com/angular-ui/ui-router/issues/552)) + + +#### Features + +* **$state:** includes() allows glob patterns for state matching. ([2d5f6b37](https://github.com/angular-ui/ui-router/commit/2d5f6b37191a3135f4a6d9e8f344c54edcdc065b)) +* **UrlMatcher:** Add support for case insensitive url matching ([642d5247](https://github.com/angular-ui/ui-router/commit/642d524799f604811e680331002feec7199a1fb5)) +* **uiSref:** add support for transition options ([2ed7a728](https://github.com/angular-ui/ui-router/commit/2ed7a728cee6854b38501fbc1df6139d3de5b28a)) +* **uiView:** add controllerAs config with function ([1ee7334a](https://github.com/angular-ui/ui-router/commit/1ee7334a73efeccc9b95340e315cdfd59944762d)) + + +### 0.2.9 (2014-01-17) + + +This release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower. + + +### 0.2.8 (2014-01-16) + + +#### Bug Fixes + +* **$state:** allow null to be passed as 'params' param ([094dc30e](https://github.com/angular-ui/ui-router/commit/094dc30e883e1bd14e50a475553bafeaade3b178)) +* **$state.go:** param inheritance shouldn't inherit from siblings ([aea872e0](https://github.com/angular-ui/ui-router/commit/aea872e0b983cb433436ce5875df10c838fccedb)) +* **bower.json:** fixes bower.json ([eed3cc4d](https://github.com/angular-ui/ui-router/commit/eed3cc4d4dfef1d3ef84b9fd063127538ebf59d3)) +* **uiSrefActive:** annotate controller injection ([85921422](https://github.com/angular-ui/ui-router/commit/85921422ff7fb0effed358136426d616cce3d583), closes [#671](https://github.com/angular-ui/ui-router/issues/671)) +* **uiView:** + * autoscroll tests pass on 1.2.4 & 1.1.5 ([86eacac0](https://github.com/angular-ui/ui-router/commit/86eacac09ca5e9000bd3b9c7ba6e2cc95d883a3a)) + * don't animate initial load ([83b6634d](https://github.com/angular-ui/ui-router/commit/83b6634d27942ca74766b2b1244a7fc52c5643d9)) + * test pass against 1.0.8 and 1.2.4 ([a402415a](https://github.com/angular-ui/ui-router/commit/a402415a2a28b360c43b9fe8f4f54c540f6c33de)) + * it should autoscroll when expr is missing. ([8bb9e27a](https://github.com/angular-ui/ui-router/commit/8bb9e27a2986725f45daf44c4c9f846385095aff)) + + +#### Features + +* **uiSref:** add target attribute behaviour ([c12bf9a5](https://github.com/angular-ui/ui-router/commit/c12bf9a520d30d70294e3d82de7661900f8e394e)) +* **uiView:** + * merge autoscroll expression test. ([b89e0f87](https://github.com/angular-ui/ui-router/commit/b89e0f871d5cc35c10925ede986c10684d5c9252)) + * cache and test autoscroll expression ([ee262282](https://github.com/angular-ui/ui-router/commit/ee2622828c2ce83807f006a459ac4e11406d9258)) diff --git a/awx/ui/client/lib/angular-ui-router/CONTRIBUTING.md b/awx/ui/client/lib/angular-ui-router/CONTRIBUTING.md new file mode 100644 index 0000000000..63829a5491 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/CONTRIBUTING.md @@ -0,0 +1,65 @@ + +# Report an Issue + +Help us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure +it hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues) +to see if someone's reported one similar to yours. + +If not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code +as possible: the more minimalist, the faster we can debug it). + +Next, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem, +and provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to +that plunkr you created! + +**Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure +is a bug, it's best to talk it out on +[StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This +keeps development streamlined, and helps us focus on building great software. + + +Issues only! | +-------------| +Please keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). | + +####Purple Labels +A purple label means that **you** need to take some further action. + - ![Not Actionable - Need Info](http://angular-ui.github.io/ui-router/images/notactionable.png): Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue. + - ![Plunkr Please](http://angular-ui.github.io/ui-router/images/plunkrplease.png): Please [create a plunkr](http://bit.ly/UIR-Plunk) + - ![StackOverflow](http://angular-ui.github.io/ui-router/images/stackoverflow.png): We suspect your issue is really a help request, or could be answered by the community. Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router). If you determine that is an actual issue, please explain why. + +If your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately. + +# Contribute + +**(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine. + +**(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed. + +**(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea. + +**(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules: + +- *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests +- Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one +- Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release. +- Changes should always respect the coding style of the project + + + +# Developing + +UI-Router uses grunt >= 0.4.x. Make sure to upgrade your environment and read the +[Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4). + +Dependencies for building from source and running tests: + +* [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli` +* Then, install the development dependencies by running `$ npm install` from the project directory + +There are a number of targets in the gruntfile that are used to generating different builds: + +* `grunt`: Perform a normal build, runs jshint and karma tests +* `grunt build`: Perform a normal build +* `grunt dist`: Perform a clean build and generate documentation +* `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes. diff --git a/awx/ui/client/lib/select2-bootstrap-theme/LICENSE b/awx/ui/client/lib/angular-ui-router/LICENSE old mode 100755 new mode 100644 similarity index 92% rename from awx/ui/client/lib/select2-bootstrap-theme/LICENSE rename to awx/ui/client/lib/angular-ui-router/LICENSE index 406d19a3c3..6413b092d7 --- a/awx/ui/client/lib/select2-bootstrap-theme/LICENSE +++ b/awx/ui/client/lib/angular-ui-router/LICENSE @@ -1,6 +1,6 @@ -The MIT License (MIT) +The MIT License -Copyright (c) 2012-2015 Florian Kissling and contributors +Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/awx/ui/client/lib/angular-ui-router/README.md b/awx/ui/client/lib/angular-ui-router/README.md new file mode 100644 index 0000000000..1d8bcd6180 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/README.md @@ -0,0 +1,245 @@ +# AngularUI Router  [![Build Status](https://travis-ci.org/angular-ui/ui-router.svg?branch=master)](https://travis-ci.org/angular-ui/ui-router) + +#### The de-facto solution to flexible routing with nested views +--- +**[Download 0.2.15](http://angular-ui.github.io/ui-router/release/angular-ui-router.js)** (or **[Minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js)**) **|** +**[Guide](https://github.com/angular-ui/ui-router/wiki) |** +**[API](http://angular-ui.github.io/ui-router/site) |** +**[Sample](http://angular-ui.github.com/ui-router/sample/) ([Src](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) |** +**[FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) |** +**[Resources](#resources) |** +**[Report an Issue](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#report-an-issue) |** +**[Contribute](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#contribute) |** +**[Help!](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) |** +**[Discuss](https://groups.google.com/forum/#!categories/angular-ui/router)** + +--- + +AngularUI Router is a routing framework for [AngularJS](http://angularjs.org), which allows you to organize the +parts of your interface into a [*state machine*](https://en.wikipedia.org/wiki/Finite-state_machine). Unlike the +[`$route` service](http://docs.angularjs.org/api/ngRoute.$route) in the Angular ngRoute module, which is organized around URL +routes, UI-Router is organized around [*states*](https://github.com/angular-ui/ui-router/wiki), +which may optionally have routes, as well as other behavior, attached. + +States are bound to *named*, *nested* and *parallel views*, allowing you to powerfully manage your application's interface. + +Check out the sample app: http://angular-ui.github.io/ui-router/sample/ + +- +**Note:** *UI-Router is under active development. As such, while this library is well-tested, the API may change. Consider using it in production applications only if you're comfortable following a changelog and updating your usage accordingly.* + + +## Get Started + +**(1)** Get UI-Router in one of the following ways: + - clone & [build](CONTRIBUTING.md#developing) this repository + - [download the release](http://angular-ui.github.io/ui-router/release/angular-ui-router.js) (or [minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js)) + - [link to cdn](http://cdnjs.com/libraries/angular-ui-router) + - via **[jspm](http://jspm.io/)**: by running `$ jspm install angular-ui-router` from your console + - or via **[npm](https://www.npmjs.org/)**: by running `$ npm install angular-ui-router` from your console + - or via **[Bower](http://bower.io/)**: by running `$ bower install angular-ui-router` from your console + - or via **[Component](https://github.com/component/component)**: by running `$ component install angular-ui/ui-router` from your console + +**(2)** Include `angular-ui-router.js` (or `angular-ui-router.min.js`) in your `index.html`, after including Angular itself (For Component users: ignore this step) + +**(3)** Add `'ui.router'` to your main module's list of dependencies (For Component users: replace `'ui.router'` with `require('angular-ui-router')`) + +When you're done, your setup should look similar to the following: + +> +```html + + + + + + + ... + + + ... + + +``` + +### [Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview) + +The majority of UI-Router's power is in its ability to nest states & views. + +**(1)** First, follow the [setup](#get-started) instructions detailed above. + +**(2)** Then, add a [`ui-view` directive](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-view) to the `` of your app. + +> +```html + + +
    + + State 1 + State 2 + +``` + +**(3)** You'll notice we also added some links with [`ui-sref` directives](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref). In addition to managing state transitions, this directive auto-generates the `href` attribute of the `` element it's attached to, if the corresponding state has a URL. Next we'll add some templates. These will plug into the `ui-view` within `index.html`. Notice that they have their own `ui-view` as well! That is the key to nesting states and views. + +> +```html + +

    State 1

    +
    +
    Show List +
    +``` +```html + +

    State 2

    +
    +Show List +
    +``` + +**(4)** Next, we'll add some child templates. *These* will get plugged into the `ui-view` of their parent state templates. + +> +```html + +

    List of State 1 Items

    +
      +
    • {{ item }}
    • +
    +``` + +> +```html + +

    List of State 2 Things

    +
      +
    • {{ thing }}
    • +
    +``` + +**(5)** Finally, we'll wire it all up with `$stateProvider`. Set up your states in the module config, as in the following: + + +> +```javascript +myApp.config(function($stateProvider, $urlRouterProvider) { + // + // For any unmatched url, redirect to /state1 + $urlRouterProvider.otherwise("/state1"); + // + // Now set up the states + $stateProvider + .state('state1', { + url: "/state1", + templateUrl: "partials/state1.html" + }) + .state('state1.list', { + url: "/list", + templateUrl: "partials/state1.list.html", + controller: function($scope) { + $scope.items = ["A", "List", "Of", "Items"]; + } + }) + .state('state2', { + url: "/state2", + templateUrl: "partials/state2.html" + }) + .state('state2.list', { + url: "/list", + templateUrl: "partials/state2.list.html", + controller: function($scope) { + $scope.things = ["A", "Set", "Of", "Things"]; + } + }); +}); +``` + +**(6)** See this quick start example in action. +>**[Go to Quick Start Plunker for Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)** + +**(7)** This only scratches the surface +>**[Dive Deeper!](https://github.com/angular-ui/ui-router/wiki)** + + +### [Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview) + +Another great feature is the ability to have multiple `ui-view`s view per template. + +**Pro Tip:** *While multiple parallel views are a powerful feature, you'll often be able to manage your +interfaces more effectively by nesting your views, and pairing those views with nested states.* + +**(1)** Follow the [setup](#get-started) instructions detailed above. + +**(2)** Add one or more `ui-view` to your app, give them names. +> +```html + + +
    +
    + + Route 1 + Route 2 + +``` + +**(3)** Set up your states in the module config: +> +```javascript +myApp.config(function($stateProvider) { + $stateProvider + .state('index', { + url: "", + views: { + "viewA": { template: "index.viewA" }, + "viewB": { template: "index.viewB" } + } + }) + .state('route1', { + url: "/route1", + views: { + "viewA": { template: "route1.viewA" }, + "viewB": { template: "route1.viewB" } + } + }) + .state('route2', { + url: "/route2", + views: { + "viewA": { template: "route2.viewA" }, + "viewB": { template: "route2.viewB" } + } + }) +}); +``` + +**(4)** See this quick start example in action. +>**[Go to Quick Start Plunker for Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)** + + +## Resources + +* [In-Depth Guide](https://github.com/angular-ui/ui-router/wiki) +* [API Reference](http://angular-ui.github.io/ui-router/site) +* [Sample App](http://angular-ui.github.com/ui-router/sample/) ([Source](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) +* [FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) +* [Slides comparing ngRoute to ui-router](http://slid.es/timkindberg/ui-router#/) +* [UI-Router Extras / Addons](http://christopherthielen.github.io/ui-router-extras/#/home) (@christopherthielen) + +### Videos + +* [Introduction Video](https://egghead.io/lessons/angularjs-introduction-ui-router) (egghead.io) +* [Tim Kindberg on Angular UI-Router](https://www.youtube.com/watch?v=lBqiZSemrqg) +* [Activating States](https://egghead.io/lessons/angularjs-ui-router-activating-states) (egghead.io) +* [Learn Angular.js using UI-Router](http://youtu.be/QETUuZ27N0w) (LearnCode.academy) + + + +## Reporting issues and Contributing + +Please read our [Contributor guidelines](CONTRIBUTING.md) before reporting an issue or creating a pull request. diff --git a/awx/ui/client/lib/angular-ui-router/api/angular-ui-router.d.ts b/awx/ui/client/lib/angular-ui-router/api/angular-ui-router.d.ts new file mode 100644 index 0000000000..55c5d5e07f --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/api/angular-ui-router.d.ts @@ -0,0 +1,126 @@ +// Type definitions for Angular JS 1.1.5+ (ui.router module) +// Project: https://github.com/angular-ui/ui-router +// Definitions by: Michel Salib +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module ng.ui { + + interface IState { + name?: string; + template?: string; + templateUrl?: any; // string || () => string + templateProvider?: any; // () => string || IPromise + controller?: any; + controllerAs?: string; + controllerProvider?: any; + resolve?: {}; + url?: string; + params?: any; + views?: {}; + abstract?: boolean; + onEnter?: (...args: any[]) => void; + onExit?: (...args: any[]) => void; + data?: any; + reloadOnSearch?: boolean; + } + + interface ITypedState extends IState { + data?: T; + } + + interface IStateProvider extends IServiceProvider { + state(name: string, config: IState): IStateProvider; + state(config: IState): IStateProvider; + decorator(name?: string, decorator?: (state: IState, parent: Function) => any): any; + } + + interface IUrlMatcher { + concat(pattern: string): IUrlMatcher; + exec(path: string, searchParams: {}): {}; + parameters(): string[]; + format(values: {}): string; + } + + interface IUrlMatcherFactory { + compile(pattern: string): IUrlMatcher; + isMatcher(o: any): boolean; + } + + interface IUrlRouterProvider extends IServiceProvider { + when(whenPath: RegExp, handler: Function): IUrlRouterProvider; + when(whenPath: RegExp, handler: any[]): IUrlRouterProvider; + when(whenPath: RegExp, toPath: string): IUrlRouterProvider; + when(whenPath: IUrlMatcher, hanlder: Function): IUrlRouterProvider; + when(whenPath: IUrlMatcher, handler: any[]): IUrlRouterProvider; + when(whenPath: IUrlMatcher, toPath: string): IUrlRouterProvider; + when(whenPath: string, handler: Function): IUrlRouterProvider; + when(whenPath: string, handler: any[]): IUrlRouterProvider; + when(whenPath: string, toPath: string): IUrlRouterProvider; + otherwise(handler: Function): IUrlRouterProvider; + otherwise(handler: any[]): IUrlRouterProvider; + otherwise(path: string): IUrlRouterProvider; + rule(handler: Function): IUrlRouterProvider; + rule(handler: any[]): IUrlRouterProvider; + } + + interface IStateOptions { + location?: any; + inherit?: boolean; + relative?: IState; + notify?: boolean; + reload?: boolean; + } + + interface IHrefOptions { + lossy?: boolean; + inherit?: boolean; + relative?: IState; + absolute?: boolean; + } + + interface IStateService { + go(to: string, params?: {}, options?: IStateOptions): IPromise; + transitionTo(state: string, params?: {}, updateLocation?: boolean): void; + transitionTo(state: string, params?: {}, options?: IStateOptions): void; + includes(state: string, params?: {}): boolean; + is(state:string, params?: {}): boolean; + is(state: IState, params?: {}): boolean; + href(state: IState, params?: {}, options?: IHrefOptions): string; + href(state: string, params?: {}, options?: IHrefOptions): string; + get(state: string): IState; + get(): IState[]; + current: IState; + params: any; + reload(): void; + } + + interface IStateParamsService { + [key: string]: any; + } + + interface IStateParams { + [key: string]: any; + } + + interface IUrlRouterService { + /* + * Triggers an update; the same update that happens when the address bar + * url changes, aka $locationChangeSuccess. + * + * This method is useful when you need to use preventDefault() on the + * $locationChangeSuccess event, perform some custom logic (route protection, + * auth, config, redirection, etc) and then finally proceed with the transition + * by calling $urlRouter.sync(). + * + */ + sync(): void; + } + + interface IUiViewScrollProvider { + /* + * Reverts back to using the core $anchorScroll service for scrolling + * based on the url anchor. + */ + useAnchorScroll(): void; + } +} diff --git a/awx/ui/client/lib/angular-ui-router/bower.json b/awx/ui/client/lib/angular-ui-router/bower.json new file mode 100644 index 0000000000..f4f08fa265 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/bower.json @@ -0,0 +1,23 @@ +{ + "name": "angular-ui-router", + "version": "0.2.15", + "main": "./release/angular-ui-router.js", + "dependencies": { + "angular": ">= 1.0.8" + }, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "component.json", + "package.json", + "lib", + "config", + "sample", + "test", + "tests", + "ngdoc_assets", + "Gruntfile.js", + "files.js" + ] +} diff --git a/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.js b/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.js new file mode 100644 index 0000000000..57c62cca88 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.js @@ -0,0 +1,4370 @@ +/** + * State-based routing for AngularJS + * @version v0.2.15 + * @link http://angular-ui.github.com/ + * @license MIT License, http://www.opensource.org/licenses/MIT + */ + +/* commonjs package manager support (eg componentjs) */ +if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){ + module.exports = 'ui.router'; +} + +(function (window, angular, undefined) { +/*jshint globalstrict:true*/ +/*global angular:false*/ +'use strict'; + +var isDefined = angular.isDefined, + isFunction = angular.isFunction, + isString = angular.isString, + isObject = angular.isObject, + isArray = angular.isArray, + forEach = angular.forEach, + extend = angular.extend, + copy = angular.copy; + +function inherit(parent, extra) { + return extend(new (extend(function() {}, { prototype: parent }))(), extra); +} + +function merge(dst) { + forEach(arguments, function(obj) { + if (obj !== dst) { + forEach(obj, function(value, key) { + if (!dst.hasOwnProperty(key)) dst[key] = value; + }); + } + }); + return dst; +} + +/** + * Finds the common ancestor path between two states. + * + * @param {Object} first The first state. + * @param {Object} second The second state. + * @return {Array} Returns an array of state names in descending order, not including the root. + */ +function ancestors(first, second) { + var path = []; + + for (var n in first.path) { + if (first.path[n] !== second.path[n]) break; + path.push(first.path[n]); + } + return path; +} + +/** + * IE8-safe wrapper for `Object.keys()`. + * + * @param {Object} object A JavaScript object. + * @return {Array} Returns the keys of the object as an array. + */ +function objectKeys(object) { + if (Object.keys) { + return Object.keys(object); + } + var result = []; + + forEach(object, function(val, key) { + result.push(key); + }); + return result; +} + +/** + * IE8-safe wrapper for `Array.prototype.indexOf()`. + * + * @param {Array} array A JavaScript array. + * @param {*} value A value to search the array for. + * @return {Number} Returns the array index value of `value`, or `-1` if not present. + */ +function indexOf(array, value) { + if (Array.prototype.indexOf) { + return array.indexOf(value, Number(arguments[2]) || 0); + } + var len = array.length >>> 0, from = Number(arguments[2]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + + if (from < 0) from += len; + + for (; from < len; from++) { + if (from in array && array[from] === value) return from; + } + return -1; +} + +/** + * Merges a set of parameters with all parameters inherited between the common parents of the + * current state and a given destination state. + * + * @param {Object} currentParams The value of the current state parameters ($stateParams). + * @param {Object} newParams The set of parameters which will be composited with inherited params. + * @param {Object} $current Internal definition of object representing the current state. + * @param {Object} $to Internal definition of object representing state to transition to. + */ +function inheritParams(currentParams, newParams, $current, $to) { + var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; + + for (var i in parents) { + if (!parents[i].params) continue; + parentParams = objectKeys(parents[i].params); + if (!parentParams.length) continue; + + for (var j in parentParams) { + if (indexOf(inheritList, parentParams[j]) >= 0) continue; + inheritList.push(parentParams[j]); + inherited[parentParams[j]] = currentParams[parentParams[j]]; + } + } + return extend({}, inherited, newParams); +} + +/** + * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. + * + * @param {Object} a The first object. + * @param {Object} b The second object. + * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, + * it defaults to the list of keys in `a`. + * @return {Boolean} Returns `true` if the keys match, otherwise `false`. + */ +function equalForKeys(a, b, keys) { + if (!keys) { + keys = []; + for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility + } + + for (var i=0; i + * + * + * + * + * + * + * + * + * + * + * + * + */ +angular.module('ui.router', ['ui.router.state']); + +angular.module('ui.router.compat', ['ui.router']); + +/** + * @ngdoc object + * @name ui.router.util.$resolve + * + * @requires $q + * @requires $injector + * + * @description + * Manages resolution of (acyclic) graphs of promises. + */ +$Resolve.$inject = ['$q', '$injector']; +function $Resolve( $q, $injector) { + + var VISIT_IN_PROGRESS = 1, + VISIT_DONE = 2, + NOTHING = {}, + NO_DEPENDENCIES = [], + NO_LOCALS = NOTHING, + NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); + + + /** + * @ngdoc function + * @name ui.router.util.$resolve#study + * @methodOf ui.router.util.$resolve + * + * @description + * Studies a set of invocables that are likely to be used multiple times. + *
    +   * $resolve.study(invocables)(locals, parent, self)
    +   * 
    + * is equivalent to + *
    +   * $resolve.resolve(invocables, locals, parent, self)
    +   * 
    + * but the former is more efficient (in fact `resolve` just calls `study` + * internally). + * + * @param {object} invocables Invocable objects + * @return {function} a function to pass in locals, parent and self + */ + this.study = function (invocables) { + if (!isObject(invocables)) throw new Error("'invocables' must be an object"); + var invocableKeys = objectKeys(invocables || {}); + + // Perform a topological sort of invocables to build an ordered plan + var plan = [], cycle = [], visited = {}; + function visit(value, key) { + if (visited[key] === VISIT_DONE) return; + + cycle.push(key); + if (visited[key] === VISIT_IN_PROGRESS) { + cycle.splice(0, indexOf(cycle, key)); + throw new Error("Cyclic dependency: " + cycle.join(" -> ")); + } + visited[key] = VISIT_IN_PROGRESS; + + if (isString(value)) { + plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); + } else { + var params = $injector.annotate(value); + forEach(params, function (param) { + if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); + }); + plan.push(key, value, params); + } + + cycle.pop(); + visited[key] = VISIT_DONE; + } + forEach(invocables, visit); + invocables = cycle = visited = null; // plan is all that's required + + function isResolve(value) { + return isObject(value) && value.then && value.$$promises; + } + + return function (locals, parent, self) { + if (isResolve(locals) && self === undefined) { + self = parent; parent = locals; locals = null; + } + if (!locals) locals = NO_LOCALS; + else if (!isObject(locals)) { + throw new Error("'locals' must be an object"); + } + if (!parent) parent = NO_PARENT; + else if (!isResolve(parent)) { + throw new Error("'parent' must be a promise returned by $resolve.resolve()"); + } + + // To complete the overall resolution, we have to wait for the parent + // promise and for the promise for each invokable in our plan. + var resolution = $q.defer(), + result = resolution.promise, + promises = result.$$promises = {}, + values = extend({}, locals), + wait = 1 + plan.length/3, + merged = false; + + function done() { + // Merge parent values we haven't got yet and publish our own $$values + if (!--wait) { + if (!merged) merge(values, parent.$$values); + result.$$values = values; + result.$$promises = result.$$promises || true; // keep for isResolve() + delete result.$$inheritedValues; + resolution.resolve(values); + } + } + + function fail(reason) { + result.$$failure = reason; + resolution.reject(reason); + } + + // Short-circuit if parent has already failed + if (isDefined(parent.$$failure)) { + fail(parent.$$failure); + return result; + } + + if (parent.$$inheritedValues) { + merge(values, omit(parent.$$inheritedValues, invocableKeys)); + } + + // Merge parent values if the parent has already resolved, or merge + // parent promises and wait if the parent resolve is still in progress. + extend(promises, parent.$$promises); + if (parent.$$values) { + merged = merge(values, omit(parent.$$values, invocableKeys)); + result.$$inheritedValues = omit(parent.$$values, invocableKeys); + done(); + } else { + if (parent.$$inheritedValues) { + result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); + } + parent.then(done, fail); + } + + // Process each invocable in the plan, but ignore any where a local of the same name exists. + for (var i=0, ii=plan.length; i} The template html as a string, or a promise + * for that string. + */ + this.fromUrl = function (url, params) { + if (isFunction(url)) url = url(params); + if (url == null) return null; + else return $http + .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) + .then(function(response) { return response.data; }); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromProvider + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template by invoking an injectable provider function. + * + * @param {Function} provider Function to invoke via `$injector.invoke` + * @param {Object} params Parameters for the template. + * @param {Object} locals Locals to pass to `invoke`. Defaults to + * `{ params: params }`. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromProvider = function (provider, params, locals) { + return $injector.invoke(provider, null, locals || { params: params }); + }; +} + +angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); + +var $$UMFP; // reference to $UrlMatcherFactoryProvider + +/** + * @ngdoc object + * @name ui.router.util.type:UrlMatcher + * + * @description + * Matches URLs against patterns and extracts named parameters from the path or the search + * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list + * of search parameters. Multiple search parameter names are separated by '&'. Search parameters + * do not influence whether or not a URL is matched, but their values are passed through into + * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. + * + * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace + * syntax, which optionally allows a regular expression for the parameter to be specified: + * + * * `':'` name - colon placeholder + * * `'*'` name - catch-all placeholder + * * `'{' name '}'` - curly placeholder + * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the + * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. + * + * Parameter names may contain only word characters (latin letters, digits, and underscore) and + * must be unique within the pattern (across both path and search parameters). For colon + * placeholders or curly placeholders without an explicit regexp, a path parameter matches any + * number of characters other than '/'. For catch-all placeholders the path parameter matches + * any number of characters. + * + * Examples: + * + * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for + * trailing slashes, and patterns have to match the entire path, not just a prefix. + * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or + * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. + * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. + * * `'/user/{id:[^/]*}'` - Same as the previous example. + * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id + * parameter consists of 1 to 8 hex digits. + * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the + * path into the parameter 'path'. + * * `'/files/*path'` - ditto. + * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined + * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start + * + * @param {string} pattern The pattern to compile into a matcher. + * @param {Object} config A configuration object hash: + * @param {Object=} parentMatcher Used to concatenate the pattern/config onto + * an existing UrlMatcher + * + * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. + * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. + * + * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any + * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns + * non-null) will start with this prefix. + * + * @property {string} source The pattern that was passed into the constructor + * + * @property {string} sourcePath The path portion of the source property + * + * @property {string} sourceSearch The search portion of the source property + * + * @property {string} regex The constructed regex that will be used to match against the url when + * it is time to determine which url will match. + * + * @returns {Object} New `UrlMatcher` object + */ +function UrlMatcher(pattern, config, parentMatcher) { + config = extend({ params: {} }, isObject(config) ? config : {}); + + // Find all placeholders and create a compiled pattern, using either classic or curly syntax: + // '*' name + // ':' name + // '{' name '}' + // '{' name ':' regexp '}' + // The regular expression is somewhat complicated due to the need to allow curly braces + // inside the regular expression. The placeholder regexp breaks down as follows: + // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) + // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case + // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either + // [^{}\\]+ - anything other than curly braces or backslash + // \\. - a backslash escape + // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms + var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + compiled = '^', last = 0, m, + segments = this.segments = [], + parentParams = parentMatcher ? parentMatcher.params : {}, + params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), + paramNames = []; + + function addParameter(id, type, config, location) { + paramNames.push(id); + if (parentParams[id]) return parentParams[id]; + if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); + if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); + params[id] = new $$UMFP.Param(id, type, config, location); + return params[id]; + } + + function quoteRegExp(string, pattern, squash, optional) { + var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); + if (!pattern) return result; + switch(squash) { + case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break; + case true: surroundPattern = ['?(', ')?']; break; + default: surroundPattern = ['(' + squash + "|", ')?']; break; + } + return result + surroundPattern[0] + pattern + surroundPattern[1]; + } + + this.source = pattern; + + // Split into static segments separated by path parameter placeholders. + // The number of segments is always 1 more than the number of parameters. + function matchDetails(m, isSearch) { + var id, regexp, segment, type, cfg, arrayMode; + id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null + cfg = config.params[id]; + segment = pattern.substring(last, m.index); + regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); + type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) }); + return { + id: id, regexp: regexp, segment: segment, type: type, cfg: cfg + }; + } + + var p, param, segment; + while ((m = placeholder.exec(pattern))) { + p = matchDetails(m, false); + if (p.segment.indexOf('?') >= 0) break; // we're into the search part + + param = addParameter(p.id, p.type, p.cfg, "path"); + compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional); + segments.push(p.segment); + last = placeholder.lastIndex; + } + segment = pattern.substring(last); + + // Find any search parameter names and remove them from the last segment + var i = segment.indexOf('?'); + + if (i >= 0) { + var search = this.sourceSearch = segment.substring(i); + segment = segment.substring(0, i); + this.sourcePath = pattern.substring(0, last + i); + + if (search.length > 0) { + last = 0; + while ((m = searchPlaceholder.exec(search))) { + p = matchDetails(m, true); + param = addParameter(p.id, p.type, p.cfg, "search"); + last = placeholder.lastIndex; + // check if ?& + } + } + } else { + this.sourcePath = pattern; + this.sourceSearch = ''; + } + + compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; + segments.push(segment); + + this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); + this.prefix = segments[0]; + this.$$paramNames = paramNames; +} + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#concat + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns a new matcher for a pattern constructed by appending the path part and adding the + * search parameters of the specified pattern to this pattern. The current pattern is not + * modified. This can be understood as creating a pattern for URLs that are relative to (or + * suffixes of) the current pattern. + * + * @example + * The following two matchers are equivalent: + *
    + * new UrlMatcher('/user/{id}?q').concat('/details?date');
    + * new UrlMatcher('/user/{id}/details?q&date');
    + * 
    + * + * @param {string} pattern The pattern to append. + * @param {Object} config An object hash of the configuration for the matcher. + * @returns {UrlMatcher} A matcher for the concatenated pattern. + */ +UrlMatcher.prototype.concat = function (pattern, config) { + // Because order of search parameters is irrelevant, we can add our own search + // parameters to the end of the new pattern. Parse the new pattern by itself + // and then join the bits together, but it's much easier to do this on a string level. + var defaultConfig = { + caseInsensitive: $$UMFP.caseInsensitive(), + strict: $$UMFP.strictMode(), + squash: $$UMFP.defaultSquashPolicy() + }; + return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); +}; + +UrlMatcher.prototype.toString = function () { + return this.source; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#exec + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Tests the specified path against this matcher, and returns an object containing the captured + * parameter values, or null if the path does not match. The returned object contains the values + * of any search parameters that are mentioned in the pattern, but their value may be null if + * they are not present in `searchParams`. This means that search parameters are always treated + * as optional. + * + * @example + *
    + * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
    + *   x: '1', q: 'hello'
    + * });
    + * // returns { id: 'bob', q: 'hello', r: null }
    + * 
    + * + * @param {string} path The URL path to match, e.g. `$location.path()`. + * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. + * @returns {Object} The captured parameter values. + */ +UrlMatcher.prototype.exec = function (path, searchParams) { + var m = this.regexp.exec(path); + if (!m) return null; + searchParams = searchParams || {}; + + var paramNames = this.parameters(), nTotal = paramNames.length, + nPath = this.segments.length - 1, + values = {}, i, j, cfg, paramName; + + if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); + + function decodePathArray(string) { + function reverseString(str) { return str.split("").reverse().join(""); } + function unquoteDashes(str) { return str.replace(/\\-/g, "-"); } + + var split = reverseString(string).split(/-(?!\\)/); + var allReversed = map(split, reverseString); + return map(allReversed, unquoteDashes).reverse(); + } + + for (i = 0; i < nPath; i++) { + paramName = paramNames[i]; + var param = this.params[paramName]; + var paramVal = m[i+1]; + // if the param value matches a pre-replace pair, replace the value before decoding. + for (j = 0; j < param.replace; j++) { + if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; + } + if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); + values[paramName] = param.value(paramVal); + } + for (/**/; i < nTotal; i++) { + paramName = paramNames[i]; + values[paramName] = this.params[paramName].value(searchParams[paramName]); + } + + return values; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#parameters + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns the names of all path and search parameters of this pattern in an unspecified order. + * + * @returns {Array.} An array of parameter names. Must be treated as read-only. If the + * pattern has no parameters, an empty array is returned. + */ +UrlMatcher.prototype.parameters = function (param) { + if (!isDefined(param)) return this.$$paramNames; + return this.params[param] || null; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#validate + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Checks an object hash of parameters to validate their correctness according to the parameter + * types of this `UrlMatcher`. + * + * @param {Object} params The object hash of parameters to validate. + * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. + */ +UrlMatcher.prototype.validates = function (params) { + return this.params.$$validates(params); +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#format + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Creates a URL that matches this pattern by substituting the specified values + * for the path and search parameters. Null values for path parameters are + * treated as empty strings. + * + * @example + *
    + * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
    + * // returns '/user/bob?q=yes'
    + * 
    + * + * @param {Object} values the values to substitute for the parameters in this pattern. + * @returns {string} the formatted URL (path and optionally search part). + */ +UrlMatcher.prototype.format = function (values) { + values = values || {}; + var segments = this.segments, params = this.parameters(), paramset = this.params; + if (!this.validates(values)) return null; + + var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; + + function encodeDashes(str) { // Replace dashes with encoded "\-" + return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); + } + + for (i = 0; i < nTotal; i++) { + var isPathParam = i < nPath; + var name = params[i], param = paramset[name], value = param.value(values[name]); + var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); + var squash = isDefaultValue ? param.squash : false; + var encoded = param.type.encode(value); + + if (isPathParam) { + var nextSegment = segments[i + 1]; + if (squash === false) { + if (encoded != null) { + if (isArray(encoded)) { + result += map(encoded, encodeDashes).join("-"); + } else { + result += encodeURIComponent(encoded); + } + } + result += nextSegment; + } else if (squash === true) { + var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; + result += nextSegment.match(capture)[1]; + } else if (isString(squash)) { + result += squash + nextSegment; + } + } else { + if (encoded == null || (isDefaultValue && squash !== false)) continue; + if (!isArray(encoded)) encoded = [ encoded ]; + encoded = map(encoded, encodeURIComponent).join('&' + name + '='); + result += (search ? '&' : '?') + (name + '=' + encoded); + search = true; + } + } + + return result; +}; + +/** + * @ngdoc object + * @name ui.router.util.type:Type + * + * @description + * Implements an interface to define custom parameter types that can be decoded from and encoded to + * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} + * objects when matching or formatting URLs, or comparing or validating parameter values. + * + * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more + * information on registering custom types. + * + * @param {Object} config A configuration object which contains the custom type definition. The object's + * properties will override the default methods and/or pattern in `Type`'s public interface. + * @example + *
    + * {
    + *   decode: function(val) { return parseInt(val, 10); },
    + *   encode: function(val) { return val && val.toString(); },
    + *   equals: function(a, b) { return this.is(a) && a === b; },
    + *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
    + *   pattern: /\d+/
    + * }
    + * 
    + * + * @property {RegExp} pattern The regular expression pattern used to match values of this type when + * coming from a substring of a URL. + * + * @returns {Object} Returns a new `Type` object. + */ +function Type(config) { + extend(this, config); +} + +/** + * @ngdoc function + * @name ui.router.util.type:Type#is + * @methodOf ui.router.util.type:Type + * + * @description + * Detects whether a value is of a particular type. Accepts a native (decoded) value + * and determines whether it matches the current `Type` object. + * + * @param {*} val The value to check. + * @param {string} key Optional. If the type check is happening in the context of a specific + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the + * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. + * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. + */ +Type.prototype.is = function(val, key) { + return true; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#encode + * @methodOf ui.router.util.type:Type + * + * @description + * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the + * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it + * only needs to be a representation of `val` that has been coerced to a string. + * + * @param {*} val The value to encode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {string} Returns a string representation of `val` that can be encoded in a URL. + */ +Type.prototype.encode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#decode + * @methodOf ui.router.util.type:Type + * + * @description + * Converts a parameter value (from URL string or transition param) to a custom/native value. + * + * @param {string} val The URL parameter value to decode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {*} Returns a custom representation of the URL parameter value. + */ +Type.prototype.decode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#equals + * @methodOf ui.router.util.type:Type + * + * @description + * Determines whether two decoded values are equivalent. + * + * @param {*} a A value to compare against. + * @param {*} b A value to compare against. + * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. + */ +Type.prototype.equals = function(a, b) { + return a == b; +}; + +Type.prototype.$subPattern = function() { + var sub = this.pattern.toString(); + return sub.substr(1, sub.length - 2); +}; + +Type.prototype.pattern = /.*/; + +Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; + +/** Given an encoded string, or a decoded object, returns a decoded object */ +Type.prototype.$normalize = function(val) { + return this.is(val) ? val : this.decode(val); +}; + +/* + * Wraps an existing custom Type as an array of Type, depending on 'mode'. + * e.g.: + * - urlmatcher pattern "/path?{queryParam[]:int}" + * - url: "/path?queryParam=1&queryParam=2 + * - $stateParams.queryParam will be [1, 2] + * if `mode` is "auto", then + * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 + * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] + */ +Type.prototype.$asArray = function(mode, isSearch) { + if (!mode) return this; + if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); + + function ArrayType(type, mode) { + function bindTo(type, callbackName) { + return function() { + return type[callbackName].apply(type, arguments); + }; + } + + // Wrap non-array value as array + function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } + // Unwrap array value for "auto" mode. Return undefined for empty array. + function arrayUnwrap(val) { + switch(val.length) { + case 0: return undefined; + case 1: return mode === "auto" ? val[0] : val; + default: return val; + } + } + function falsey(val) { return !val; } + + // Wraps type (.is/.encode/.decode) functions to operate on each value of an array + function arrayHandler(callback, allTruthyMode) { + return function handleArray(val) { + val = arrayWrap(val); + var result = map(val, callback); + if (allTruthyMode === true) + return filter(result, falsey).length === 0; + return arrayUnwrap(result); + }; + } + + // Wraps type (.equals) functions to operate on each value of an array + function arrayEqualsHandler(callback) { + return function handleArray(val1, val2) { + var left = arrayWrap(val1), right = arrayWrap(val2); + if (left.length !== right.length) return false; + for (var i = 0; i < left.length; i++) { + if (!callback(left[i], right[i])) return false; + } + return true; + }; + } + + this.encode = arrayHandler(bindTo(type, 'encode')); + this.decode = arrayHandler(bindTo(type, 'decode')); + this.is = arrayHandler(bindTo(type, 'is'), true); + this.equals = arrayEqualsHandler(bindTo(type, 'equals')); + this.pattern = type.pattern; + this.$normalize = arrayHandler(bindTo(type, '$normalize')); + this.name = type.name; + this.$arrayMode = mode; + } + + return new ArrayType(this, mode); +}; + + + +/** + * @ngdoc object + * @name ui.router.util.$urlMatcherFactory + * + * @description + * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory + * is also available to providers under the name `$urlMatcherFactoryProvider`. + */ +function $UrlMatcherFactory() { + $$UMFP = this; + + var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; + + function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } + function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } + + var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { + string: { + encode: valToString, + decode: valFromString, + // TODO: in 1.0, make string .is() return false if value is undefined/null by default. + // In 0.2.x, string params are optional by default for backwards compat + is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; }, + pattern: /[^/]*/ + }, + int: { + encode: valToString, + decode: function(val) { return parseInt(val, 10); }, + is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, + pattern: /\d+/ + }, + bool: { + encode: function(val) { return val ? 1 : 0; }, + decode: function(val) { return parseInt(val, 10) !== 0; }, + is: function(val) { return val === true || val === false; }, + pattern: /0|1/ + }, + date: { + encode: function (val) { + if (!this.is(val)) + return undefined; + return [ val.getFullYear(), + ('0' + (val.getMonth() + 1)).slice(-2), + ('0' + val.getDate()).slice(-2) + ].join("-"); + }, + decode: function (val) { + if (this.is(val)) return val; + var match = this.capture.exec(val); + return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; + }, + is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, + equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, + pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, + capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ + }, + json: { + encode: angular.toJson, + decode: angular.fromJson, + is: angular.isObject, + equals: angular.equals, + pattern: /[^/]*/ + }, + any: { // does not encode/decode + encode: angular.identity, + decode: angular.identity, + equals: angular.equals, + pattern: /.*/ + } + }; + + function getDefaultConfig() { + return { + strict: isStrictMode, + caseInsensitive: isCaseInsensitive + }; + } + + function isInjectable(value) { + return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + $UrlMatcherFactory.$$getDefaultValue = function(config) { + if (!isInjectable(config.value)) return config.value; + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.value); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#caseInsensitive + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URL matching should be case sensitive (the default behavior), or not. + * + * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; + * @returns {boolean} the current value of caseInsensitive + */ + this.caseInsensitive = function(value) { + if (isDefined(value)) + isCaseInsensitive = value; + return isCaseInsensitive; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#strictMode + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URLs should match trailing slashes, or not (the default behavior). + * + * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. + * @returns {boolean} the current value of strictMode + */ + this.strictMode = function(value) { + if (isDefined(value)) + isStrictMode = value; + return isStrictMode; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Sets the default behavior when generating or matching URLs with default parameter values. + * + * @param {string} value A string that defines the default parameter URL squashing behavior. + * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL + * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the + * parameter is surrounded by slashes, squash (remove) one slash from the URL + * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) + * the parameter value from the URL and replace it with this string. + */ + this.defaultSquashPolicy = function(value) { + if (!isDefined(value)) return defaultSquashPolicy; + if (value !== true && value !== false && !isString(value)) + throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); + defaultSquashPolicy = value; + return value; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#compile + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. + * + * @param {string} pattern The URL pattern. + * @param {Object} config The config object hash. + * @returns {UrlMatcher} The UrlMatcher. + */ + this.compile = function (pattern, config) { + return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#isMatcher + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Returns true if the specified object is a `UrlMatcher`, or false otherwise. + * + * @param {Object} object The object to perform the type check against. + * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by + * implementing all the same methods. + */ + this.isMatcher = function (o) { + if (!isObject(o)) return false; + var result = true; + + forEach(UrlMatcher.prototype, function(val, name) { + if (isFunction(val)) { + result = result && (isDefined(o[name]) && isFunction(o[name])); + } + }); + return result; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#type + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to + * generate URLs with typed parameters. + * + * @param {string} name The type name. + * @param {Object|Function} definition The type definition. See + * {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * @param {Object|Function} definitionFn (optional) A function that is injected before the app + * runtime starts. The result of this function is merged into the existing `definition`. + * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * + * @returns {Object} Returns `$urlMatcherFactoryProvider`. + * + * @example + * This is a simple example of a custom type that encodes and decodes items from an + * array, using the array index as the URL-encoded value: + * + *
    +   * var list = ['John', 'Paul', 'George', 'Ringo'];
    +   *
    +   * $urlMatcherFactoryProvider.type('listItem', {
    +   *   encode: function(item) {
    +   *     // Represent the list item in the URL using its corresponding index
    +   *     return list.indexOf(item);
    +   *   },
    +   *   decode: function(item) {
    +   *     // Look up the list item by index
    +   *     return list[parseInt(item, 10)];
    +   *   },
    +   *   is: function(item) {
    +   *     // Ensure the item is valid by checking to see that it appears
    +   *     // in the list
    +   *     return list.indexOf(item) > -1;
    +   *   }
    +   * });
    +   *
    +   * $stateProvider.state('list', {
    +   *   url: "/list/{item:listItem}",
    +   *   controller: function($scope, $stateParams) {
    +   *     console.log($stateParams.item);
    +   *   }
    +   * });
    +   *
    +   * // ...
    +   *
    +   * // Changes URL to '/list/3', logs "Ringo" to the console
    +   * $state.go('list', { item: "Ringo" });
    +   * 
    + * + * This is a more complex example of a type that relies on dependency injection to + * interact with services, and uses the parameter name from the URL to infer how to + * handle encoding and decoding parameter values: + * + *
    +   * // Defines a custom type that gets a value from a service,
    +   * // where each service gets different types of values from
    +   * // a backend API:
    +   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
    +   *
    +   *   // Matches up services to URL parameter names
    +   *   var services = {
    +   *     user: Users,
    +   *     post: Posts
    +   *   };
    +   *
    +   *   return {
    +   *     encode: function(object) {
    +   *       // Represent the object in the URL using its unique ID
    +   *       return object.id;
    +   *     },
    +   *     decode: function(value, key) {
    +   *       // Look up the object by ID, using the parameter
    +   *       // name (key) to call the correct service
    +   *       return services[key].findById(value);
    +   *     },
    +   *     is: function(object, key) {
    +   *       // Check that object is a valid dbObject
    +   *       return angular.isObject(object) && object.id && services[key];
    +   *     }
    +   *     equals: function(a, b) {
    +   *       // Check the equality of decoded objects by comparing
    +   *       // their unique IDs
    +   *       return a.id === b.id;
    +   *     }
    +   *   };
    +   * });
    +   *
    +   * // In a config() block, you can then attach URLs with
    +   * // type-annotated parameters:
    +   * $stateProvider.state('users', {
    +   *   url: "/users",
    +   *   // ...
    +   * }).state('users.item', {
    +   *   url: "/{user:dbObject}",
    +   *   controller: function($scope, $stateParams) {
    +   *     // $stateParams.user will now be an object returned from
    +   *     // the Users service
    +   *   },
    +   *   // ...
    +   * });
    +   * 
    + */ + this.type = function (name, definition, definitionFn) { + if (!isDefined(definition)) return $types[name]; + if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); + + $types[name] = new Type(extend({ name: name }, definition)); + if (definitionFn) { + typeQueue.push({ name: name, def: definitionFn }); + if (!enqueue) flushTypeQueue(); + } + return this; + }; + + // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s + function flushTypeQueue() { + while(typeQueue.length) { + var type = typeQueue.shift(); + if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); + angular.extend($types[type.name], injector.invoke(type.def)); + } + } + + // Register default types. Store them in the prototype of $types. + forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); + $types = inherit($types, {}); + + /* No need to document $get, since it returns this */ + this.$get = ['$injector', function ($injector) { + injector = $injector; + enqueue = false; + flushTypeQueue(); + + forEach(defaultTypes, function(type, name) { + if (!$types[name]) $types[name] = new Type(type); + }); + return this; + }]; + + this.Param = function Param(id, type, config, location) { + var self = this; + config = unwrapShorthand(config); + type = getType(config, type, location); + var arrayMode = getArrayMode(); + type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; + if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) + config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" + var isOptional = config.value !== undefined; + var squash = getSquashPolicy(config, isOptional); + var replace = getReplace(config, arrayMode, isOptional, squash); + + function unwrapShorthand(config) { + var keys = isObject(config) ? objectKeys(config) : []; + var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && + indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; + if (isShorthand) config = { value: config }; + config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; + return config; + } + + function getType(config, urlType, location) { + if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); + if (urlType) return urlType; + if (!config.type) return (location === "config" ? $types.any : $types.string); + return config.type instanceof Type ? config.type : new Type(config.type); + } + + // array config: param name (param[]) overrides default settings. explicit config overrides param name. + function getArrayMode() { + var arrayDefaults = { array: (location === "search" ? "auto" : false) }; + var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; + return extend(arrayDefaults, arrayParamNomenclature, config).array; + } + + /** + * returns false, true, or the squash value to indicate the "default parameter url squash policy". + */ + function getSquashPolicy(config, isOptional) { + var squash = config.squash; + if (!isOptional || squash === false) return false; + if (!isDefined(squash) || squash == null) return defaultSquashPolicy; + if (squash === true || isString(squash)) return squash; + throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); + } + + function getReplace(config, arrayMode, isOptional, squash) { + var replace, configuredKeys, defaultPolicy = [ + { from: "", to: (isOptional || arrayMode ? undefined : "") }, + { from: null, to: (isOptional || arrayMode ? undefined : "") } + ]; + replace = isArray(config.replace) ? config.replace : []; + if (isString(squash)) + replace.push({ from: squash, to: undefined }); + configuredKeys = map(replace, function(item) { return item.from; } ); + return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + function $$getDefaultValue() { + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + var defaultValue = injector.invoke(config.$$fn); + if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue)) + throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")"); + return defaultValue; + } + + /** + * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the + * default value, which may be the result of an injectable function. + */ + function $value(value) { + function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } + function $replace(value) { + var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); + return replacement.length ? replacement[0] : value; + } + value = $replace(value); + return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value); + } + + function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } + + extend(this, { + id: id, + type: type, + location: location, + array: arrayMode, + squash: squash, + replace: replace, + isOptional: isOptional, + value: $value, + dynamic: undefined, + config: config, + toString: toString + }); + }; + + function ParamSet(params) { + extend(this, params || {}); + } + + ParamSet.prototype = { + $$new: function() { + return inherit(this, extend(new ParamSet(), { $$parent: this})); + }, + $$keys: function () { + var keys = [], chain = [], parent = this, + ignore = objectKeys(ParamSet.prototype); + while (parent) { chain.push(parent); parent = parent.$$parent; } + chain.reverse(); + forEach(chain, function(paramset) { + forEach(objectKeys(paramset), function(key) { + if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); + }); + }); + return keys; + }, + $$values: function(paramValues) { + var values = {}, self = this; + forEach(self.$$keys(), function(key) { + values[key] = self[key].value(paramValues && paramValues[key]); + }); + return values; + }, + $$equals: function(paramValues1, paramValues2) { + var equal = true, self = this; + forEach(self.$$keys(), function(key) { + var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; + if (!self[key].type.equals(left, right)) equal = false; + }); + return equal; + }, + $$validates: function $$validate(paramValues) { + var keys = this.$$keys(), i, param, rawVal, normalized, encoded; + for (i = 0; i < keys.length; i++) { + param = this[keys[i]]; + rawVal = paramValues[keys[i]]; + if ((rawVal === undefined || rawVal === null) && param.isOptional) + break; // There was no parameter value, but the param is optional + normalized = param.type.$normalize(rawVal); + if (!param.type.is(normalized)) + return false; // The value was not of the correct Type, and could not be decoded to the correct Type + encoded = param.type.encode(normalized); + if (angular.isString(encoded) && !param.type.pattern.exec(encoded)) + return false; // The value was of the correct type, but when encoded, did not match the Type's regexp + } + return true; + }, + $$parent: undefined + }; + + this.ParamSet = ParamSet; +} + +// Register as a provider so it's available to other providers +angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); +angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); + +/** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider + * + * @requires ui.router.util.$urlMatcherFactoryProvider + * @requires $locationProvider + * + * @description + * `$urlRouterProvider` has the responsibility of watching `$location`. + * When `$location` changes it runs through a list of rules one by one until a + * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify + * a url in a state configuration. All urls are compiled into a UrlMatcher object. + * + * There are several methods on `$urlRouterProvider` that make it useful to use directly + * in your module config. + */ +$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; +function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { + var rules = [], otherwise = null, interceptDeferred = false, listener; + + // Returns a string that is a prefix of all strings matching the RegExp + function regExpPrefix(re) { + var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); + return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; + } + + // Interpolates matched values into a String.replace()-style pattern + function interpolate(pattern, match) { + return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { + return match[what === '$' ? 0 : Number(what)]; + }); + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#rule + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines rules that are used by `$urlRouterProvider` to find matches for + * specific URLs. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   // Here's an example of how you might allow case insensitive urls
    +   *   $urlRouterProvider.rule(function ($injector, $location) {
    +   *     var path = $location.path(),
    +   *         normalized = path.toLowerCase();
    +   *
    +   *     if (path !== normalized) {
    +   *       return normalized;
    +   *     }
    +   *   });
    +   * });
    +   * 
    + * + * @param {object} rule Handler function that takes `$injector` and `$location` + * services as arguments. You can use them to return a valid path as a string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.rule = function (rule) { + if (!isFunction(rule)) throw new Error("'rule' must be a function"); + rules.push(rule); + return this; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider#otherwise + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines a path that is used when an invalid route is requested. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   // if the path doesn't match any of the urls you configured
    +   *   // otherwise will take care of routing the user to the
    +   *   // specified url
    +   *   $urlRouterProvider.otherwise('/index');
    +   *
    +   *   // Example of using function rule as param
    +   *   $urlRouterProvider.otherwise(function ($injector, $location) {
    +   *     return '/a/valid/url';
    +   *   });
    +   * });
    +   * 
    + * + * @param {string|object} rule The url path you want to redirect to or a function + * rule that returns the url path. The function version is passed two params: + * `$injector` and `$location` services, and must return a url string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.otherwise = function (rule) { + if (isString(rule)) { + var redirect = rule; + rule = function () { return redirect; }; + } + else if (!isFunction(rule)) throw new Error("'rule' must be a function"); + otherwise = rule; + return this; + }; + + + function handleIfMatch($injector, handler, match) { + if (!match) return false; + var result = $injector.invoke(handler, handler, { $match: match }); + return isDefined(result) ? result : true; + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#when + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Registers a handler for a given url matching. if handle is a string, it is + * treated as a redirect, and is interpolated according to the syntax of match + * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). + * + * If the handler is a function, it is injectable. It gets invoked if `$location` + * matches. You have the option of inject the match object as `$match`. + * + * The handler can return + * + * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` + * will continue trying to find another one that matches. + * - **string** which is treated as a redirect and passed to `$location.url()` + * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
    +   *     if ($state.$current.navigable !== state ||
    +   *         !equalForKeys($match, $stateParams) {
    +   *      $state.transitionTo(state, $match, false);
    +   *     }
    +   *   });
    +   * });
    +   * 
    + * + * @param {string|object} what The incoming path that you want to redirect. + * @param {string|object} handler The path you want to redirect your user to. + */ + this.when = function (what, handler) { + var redirect, handlerIsString = isString(handler); + if (isString(what)) what = $urlMatcherFactory.compile(what); + + if (!handlerIsString && !isFunction(handler) && !isArray(handler)) + throw new Error("invalid 'handler' in when()"); + + var strategies = { + matcher: function (what, handler) { + if (handlerIsString) { + redirect = $urlMatcherFactory.compile(handler); + handler = ['$match', function ($match) { return redirect.format($match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); + }, { + prefix: isString(what.prefix) ? what.prefix : '' + }); + }, + regex: function (what, handler) { + if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); + + if (handlerIsString) { + redirect = handler; + handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path())); + }, { + prefix: regExpPrefix(what) + }); + } + }; + + var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; + + for (var n in check) { + if (check[n]) return this.rule(strategies[n](what, handler)); + } + + throw new Error("invalid 'what' in when()"); + }; + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#deferIntercept + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Disables (or enables) deferring location change interception. + * + * If you wish to customize the behavior of syncing the URL (for example, if you wish to + * defer a transition but maintain the current URL), call this method at configuration time. + * Then, at run time, call `$urlRouter.listen()` after you have configured your own + * `$locationChangeSuccess` event handler. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *
    +   *   // Prevent $urlRouter from automatically intercepting URL changes;
    +   *   // this allows you to configure custom behavior in between
    +   *   // location changes and route synchronization:
    +   *   $urlRouterProvider.deferIntercept();
    +   *
    +   * }).run(function ($rootScope, $urlRouter, UserService) {
    +   *
    +   *   $rootScope.$on('$locationChangeSuccess', function(e) {
    +   *     // UserService is an example service for managing user state
    +   *     if (UserService.isLoggedIn()) return;
    +   *
    +   *     // Prevent $urlRouter's default handler from firing
    +   *     e.preventDefault();
    +   *
    +   *     UserService.handleLogin().then(function() {
    +   *       // Once the user has logged in, sync the current URL
    +   *       // to the router:
    +   *       $urlRouter.sync();
    +   *     });
    +   *   });
    +   *
    +   *   // Configures $urlRouter's listener *after* your custom listener
    +   *   $urlRouter.listen();
    +   * });
    +   * 
    + * + * @param {boolean} defer Indicates whether to defer location change interception. Passing + no parameter is equivalent to `true`. + */ + this.deferIntercept = function (defer) { + if (defer === undefined) defer = true; + interceptDeferred = defer; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouter + * + * @requires $location + * @requires $rootScope + * @requires $injector + * @requires $browser + * + * @description + * + */ + this.$get = $get; + $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; + function $get( $location, $rootScope, $injector, $browser) { + + var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; + + function appendBasePath(url, isHtml5, absolute) { + if (baseHref === '/') return url; + if (isHtml5) return baseHref.slice(0, -1) + url; + if (absolute) return baseHref.slice(1) + url; + return url; + } + + // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree + function update(evt) { + if (evt && evt.defaultPrevented) return; + var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; + lastPushedUrl = undefined; + // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573 + //if (ignoreUpdate) return true; + + function check(rule) { + var handled = rule($injector, $location); + + if (!handled) return false; + if (isString(handled)) $location.replace().url(handled); + return true; + } + var n = rules.length, i; + + for (i = 0; i < n; i++) { + if (check(rules[i])) return; + } + // always check otherwise last to allow dynamic updates to the set of rules + if (otherwise) check(otherwise); + } + + function listen() { + listener = listener || $rootScope.$on('$locationChangeSuccess', update); + return listener; + } + + if (!interceptDeferred) listen(); + + return { + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#sync + * @methodOf ui.router.router.$urlRouter + * + * @description + * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. + * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, + * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed + * with the transition by calling `$urlRouter.sync()`. + * + * @example + *
    +       * angular.module('app', ['ui.router'])
    +       *   .run(function($rootScope, $urlRouter) {
    +       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
    +       *       // Halt state change from even starting
    +       *       evt.preventDefault();
    +       *       // Perform custom logic
    +       *       var meetsRequirement = ...
    +       *       // Continue with the update and state transition if logic allows
    +       *       if (meetsRequirement) $urlRouter.sync();
    +       *     });
    +       * });
    +       * 
    + */ + sync: function() { + update(); + }, + + listen: function() { + return listen(); + }, + + update: function(read) { + if (read) { + location = $location.url(); + return; + } + if ($location.url() === location) return; + + $location.url(location); + $location.replace(); + }, + + push: function(urlMatcher, params, options) { + var url = urlMatcher.format(params || {}); + + // Handle the special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + $location.url(url); + lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; + if (options && options.replace) $location.replace(); + }, + + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#href + * @methodOf ui.router.router.$urlRouter + * + * @description + * A URL generation method that returns the compiled URL for a given + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. + * + * @example + *
    +       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
    +       *   person: "bob"
    +       * });
    +       * // $bob == "/about/bob";
    +       * 
    + * + * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. + * @param {object=} params An object of parameter values to fill the matcher's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` + */ + href: function(urlMatcher, params, options) { + if (!urlMatcher.validates(params)) return null; + + var isHtml5 = $locationProvider.html5Mode(); + if (angular.isObject(isHtml5)) { + isHtml5 = isHtml5.enabled; + } + + var url = urlMatcher.format(params); + options = options || {}; + + if (!isHtml5 && url !== null) { + url = "#" + $locationProvider.hashPrefix() + url; + } + + // Handle special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + url = appendBasePath(url, isHtml5, options.absolute); + + if (!options.absolute || !url) { + return url; + } + + var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); + port = (port === 80 || port === 443 ? '' : ':' + port); + + return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); + } + }; + } +} + +angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); + +/** + * @ngdoc object + * @name ui.router.state.$stateProvider + * + * @requires ui.router.router.$urlRouterProvider + * @requires ui.router.util.$urlMatcherFactoryProvider + * + * @description + * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely + * on state. + * + * A state corresponds to a "place" in the application in terms of the overall UI and + * navigation. A state describes (via the controller / template / view properties) what + * the UI looks like and does at that place. + * + * States often have things in common, and the primary way of factoring out these + * commonalities in this model is via the state hierarchy, i.e. parent/child states aka + * nested states. + * + * The `$stateProvider` provides interfaces to declare these states for your app. + */ +$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider']; +function $StateProvider( $urlRouterProvider, $urlMatcherFactory) { + + var root, states = {}, $state, queue = {}, abstractKey = 'abstract'; + + // Builds state properties from definition passed to registerState() + var stateBuilder = { + + // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined. + // state.children = []; + // if (parent) parent.children.push(state); + parent: function(state) { + if (isDefined(state.parent) && state.parent) return findState(state.parent); + // regex matches any valid composite state name + // would match "contact.list" but not "contacts" + var compositeName = /^(.+)\.[^.]+$/.exec(state.name); + return compositeName ? findState(compositeName[1]) : root; + }, + + // inherit 'data' from parent and override by own values (if any) + data: function(state) { + if (state.parent && state.parent.data) { + state.data = state.self.data = extend({}, state.parent.data, state.data); + } + return state.data; + }, + + // Build a URLMatcher if necessary, either via a relative or absolute URL + url: function(state) { + var url = state.url, config = { params: state.params || {} }; + + if (isString(url)) { + if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config); + return (state.parent.navigable || root).url.concat(url, config); + } + + if (!url || $urlMatcherFactory.isMatcher(url)) return url; + throw new Error("Invalid url '" + url + "' in state '" + state + "'"); + }, + + // Keep track of the closest ancestor state that has a URL (i.e. is navigable) + navigable: function(state) { + return state.url ? state : (state.parent ? state.parent.navigable : null); + }, + + // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params + ownParams: function(state) { + var params = state.url && state.url.params || new $$UMFP.ParamSet(); + forEach(state.params || {}, function(config, id) { + if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config"); + }); + return params; + }, + + // Derive parameters for this state and ensure they're a super-set of parent's parameters + params: function(state) { + return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet(); + }, + + // If there is no explicit multi-view configuration, make one up so we don't have + // to handle both cases in the view directive later. Note that having an explicit + // 'views' property will mean the default unnamed view properties are ignored. This + // is also a good time to resolve view names to absolute names, so everything is a + // straight lookup at link time. + views: function(state) { + var views = {}; + + forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) { + if (name.indexOf('@') < 0) name += '@' + state.parent.name; + views[name] = view; + }); + return views; + }, + + // Keep a full path from the root down to this state as this is needed for state activation. + path: function(state) { + return state.parent ? state.parent.path.concat(state) : []; // exclude root from path + }, + + // Speed up $state.contains() as it's used a lot + includes: function(state) { + var includes = state.parent ? extend({}, state.parent.includes) : {}; + includes[state.name] = true; + return includes; + }, + + $delegates: {} + }; + + function isRelative(stateName) { + return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0; + } + + function findState(stateOrName, base) { + if (!stateOrName) return undefined; + + var isStr = isString(stateOrName), + name = isStr ? stateOrName : stateOrName.name, + path = isRelative(name); + + if (path) { + if (!base) throw new Error("No reference point given for path '" + name + "'"); + base = findState(base); + + var rel = name.split("."), i = 0, pathLength = rel.length, current = base; + + for (; i < pathLength; i++) { + if (rel[i] === "" && i === 0) { + current = base; + continue; + } + if (rel[i] === "^") { + if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'"); + current = current.parent; + continue; + } + break; + } + rel = rel.slice(i).join("."); + name = current.name + (current.name && rel ? "." : "") + rel; + } + var state = states[name]; + + if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) { + return state; + } + return undefined; + } + + function queueState(parentName, state) { + if (!queue[parentName]) { + queue[parentName] = []; + } + queue[parentName].push(state); + } + + function flushQueuedChildren(parentName) { + var queued = queue[parentName] || []; + while(queued.length) { + registerState(queued.shift()); + } + } + + function registerState(state) { + // Wrap a new object around the state so we can store our private details easily. + state = inherit(state, { + self: state, + resolve: state.resolve || {}, + toString: function() { return this.name; } + }); + + var name = state.name; + if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name"); + if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); + + // Get parent name + var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) + : (isString(state.parent)) ? state.parent + : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name + : ''; + + // If parent is not registered yet, add state to queue and register later + if (parentName && !states[parentName]) { + return queueState(parentName, state.self); + } + + for (var key in stateBuilder) { + if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); + } + states[name] = state; + + // Register the state in the global state list and with $urlRouter if necessary. + if (!state[abstractKey] && state.url) { + $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { + if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { + $state.transitionTo(state, $match, { inherit: true, location: false }); + } + }]); + } + + // Register any queued children + flushQueuedChildren(name); + + return state; + } + + // Checks text to see if it looks like a glob. + function isGlob (text) { + return text.indexOf('*') > -1; + } + + // Returns true if glob matches current $state name. + function doesStateMatchGlob (glob) { + var globSegments = glob.split('.'), + segments = $state.$current.name.split('.'); + + //match single stars + for (var i = 0, l = globSegments.length; i < l; i++) { + if (globSegments[i] === '*') { + segments[i] = '*'; + } + } + + //match greedy starts + if (globSegments[0] === '**') { + segments = segments.slice(indexOf(segments, globSegments[1])); + segments.unshift('**'); + } + //match greedy ends + if (globSegments[globSegments.length - 1] === '**') { + segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); + segments.push('**'); + } + + if (globSegments.length != segments.length) { + return false; + } + + return segments.join('') === globSegments.join(''); + } + + + // Implicit root state that is always active + root = registerState({ + name: '', + url: '^', + views: null, + 'abstract': true + }); + root.navigable = null; + + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#decorator + * @methodOf ui.router.state.$stateProvider + * + * @description + * Allows you to extend (carefully) or override (at your own peril) the + * `stateBuilder` object used internally by `$stateProvider`. This can be used + * to add custom functionality to ui-router, for example inferring templateUrl + * based on the state name. + * + * When passing only a name, it returns the current (original or decorated) builder + * function that matches `name`. + * + * The builder functions that can be decorated are listed below. Though not all + * necessarily have a good use case for decoration, that is up to you to decide. + * + * In addition, users can attach custom decorators, which will generate new + * properties within the state's internal definition. There is currently no clear + * use-case for this beyond accessing internal states (i.e. $state.$current), + * however, expect this to become increasingly relevant as we introduce additional + * meta-programming features. + * + * **Warning**: Decorators should not be interdependent because the order of + * execution of the builder functions in non-deterministic. Builder functions + * should only be dependent on the state definition object and super function. + * + * + * Existing builder functions and current return values: + * + * - **parent** `{object}` - returns the parent state object. + * - **data** `{object}` - returns state data, including any inherited data that is not + * overridden by own values (if any). + * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} + * or `null`. + * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is + * navigable). + * - **params** `{object}` - returns an array of state params that are ensured to + * be a super-set of parent's params. + * - **views** `{object}` - returns a views object where each key is an absolute view + * name (i.e. "viewName@stateName") and each value is the config object + * (template, controller) for the view. Even when you don't use the views object + * explicitly on a state config, one is still created for you internally. + * So by decorating this builder function you have access to decorating template + * and controller properties. + * - **ownParams** `{object}` - returns an array of params that belong to the state, + * not including any params defined by ancestor states. + * - **path** `{string}` - returns the full path from the root down to this state. + * Needed for state activation. + * - **includes** `{object}` - returns an object that includes every state that + * would pass a `$state.includes()` test. + * + * @example + *
    +   * // Override the internal 'views' builder with a function that takes the state
    +   * // definition, and a reference to the internal function being overridden:
    +   * $stateProvider.decorator('views', function (state, parent) {
    +   *   var result = {},
    +   *       views = parent(state);
    +   *
    +   *   angular.forEach(views, function (config, name) {
    +   *     var autoName = (state.name + '.' + name).replace('.', '/');
    +   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
    +   *     result[name] = config;
    +   *   });
    +   *   return result;
    +   * });
    +   *
    +   * $stateProvider.state('home', {
    +   *   views: {
    +   *     'contact.list': { controller: 'ListController' },
    +   *     'contact.item': { controller: 'ItemController' }
    +   *   }
    +   * });
    +   *
    +   * // ...
    +   *
    +   * $state.go('home');
    +   * // Auto-populates list and item views with /partials/home/contact/list.html,
    +   * // and /partials/home/contact/item.html, respectively.
    +   * 
    + * + * @param {string} name The name of the builder function to decorate. + * @param {object} func A function that is responsible for decorating the original + * builder function. The function receives two parameters: + * + * - `{object}` - state - The state config object. + * - `{object}` - super - The original builder function. + * + * @return {object} $stateProvider - $stateProvider instance + */ + this.decorator = decorator; + function decorator(name, func) { + /*jshint validthis: true */ + if (isString(name) && !isDefined(func)) { + return stateBuilder[name]; + } + if (!isFunction(func) || !isString(name)) { + return this; + } + if (stateBuilder[name] && !stateBuilder.$delegates[name]) { + stateBuilder.$delegates[name] = stateBuilder[name]; + } + stateBuilder[name] = func; + return this; + } + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#state + * @methodOf ui.router.state.$stateProvider + * + * @description + * Registers a state configuration under a given state name. The stateConfig object + * has the following acceptable properties. + * + * @param {string} name A unique state name, e.g. "home", "about", "contacts". + * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". + * @param {object} stateConfig State configuration object. + * @param {string|function=} stateConfig.template + * + * html template as a string or a function that returns + * an html template as a string which should be used by the uiView directives. This property + * takes precedence over templateUrl. + * + * If `template` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
    template:
    +   *   "

    inline template definition

    " + + * "
    "
    + *
    template: function(params) {
    +   *       return "

    generated template

    "; }
    + * + * + * @param {string|function=} stateConfig.templateUrl + * + * + * path or function that returns a path to an html + * template that should be used by uiView. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
    templateUrl: "home.html"
    + *
    templateUrl: function(params) {
    +   *     return myTemplates[params.pageId]; }
    + * + * @param {function=} stateConfig.templateProvider + * + * Provider function that returns HTML content string. + *
     templateProvider:
    +   *       function(MyTemplateService, params) {
    +   *         return MyTemplateService.getTemplate(params.pageId);
    +   *       }
    + * + * @param {string|function=} stateConfig.controller + * + * + * Controller fn that should be associated with newly + * related scope or the name of a registered controller if passed as a string. + * Optionally, the ControllerAs may be declared here. + *
    controller: "MyRegisteredController"
    + *
    controller:
    +   *     "MyRegisteredController as fooCtrl"}
    + *
    controller: function($scope, MyService) {
    +   *     $scope.data = MyService.getData(); }
    + * + * @param {function=} stateConfig.controllerProvider + * + * + * Injectable provider function that returns the actual controller or string. + *
    controllerProvider:
    +   *   function(MyResolveData) {
    +   *     if (MyResolveData.foo)
    +   *       return "FooCtrl"
    +   *     else if (MyResolveData.bar)
    +   *       return "BarCtrl";
    +   *     else return function($scope) {
    +   *       $scope.baz = "Qux";
    +   *     }
    +   *   }
    + * + * @param {string=} stateConfig.controllerAs + * + * + * A controller alias name. If present the controller will be + * published to scope under the controllerAs name. + *
    controllerAs: "myCtrl"
    + * + * @param {string|object=} stateConfig.parent + * + * Optionally specifies the parent state of this state. + * + *
    parent: 'parentState'
    + *
    parent: parentState // JS variable
    + * + * @param {object=} stateConfig.resolve + * + * + * An optional map<string, function> of dependencies which + * should be injected into the controller. If any of these dependencies are promises, + * the router will wait for them all to be resolved before the controller is instantiated. + * If all the promises are resolved successfully, the $stateChangeSuccess event is fired + * and the values of the resolved promises are injected into any controllers that reference them. + * If any of the promises are rejected the $stateChangeError event is fired. + * + * The map object is: + * + * - key - {string}: name of dependency to be injected into controller + * - factory - {string|function}: If string then it is alias for service. Otherwise if function, + * it is injected and return value it treated as dependency. If result is a promise, it is + * resolved before its value is injected into controller. + * + *
    resolve: {
    +   *     myResolve1:
    +   *       function($http, $stateParams) {
    +   *         return $http.get("/api/foos/"+stateParams.fooID);
    +   *       }
    +   *     }
    + * + * @param {string=} stateConfig.url + * + * + * A url fragment with optional parameters. When a state is navigated or + * transitioned to, the `$stateParams` service will be populated with any + * parameters that were passed. + * + * (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for + * more details on acceptable patterns ) + * + * examples: + *
    url: "/home"
    +   * url: "/users/:userid"
    +   * url: "/books/{bookid:[a-zA-Z_-]}"
    +   * url: "/books/{categoryid:int}"
    +   * url: "/books/{publishername:string}/{categoryid:int}"
    +   * url: "/messages?before&after"
    +   * url: "/messages?{before:date}&{after:date}"
    +   * url: "/messages/:mailboxid?{before:date}&{after:date}"
    +   * 
    + * + * @param {object=} stateConfig.views + * + * an optional map<string, object> which defined multiple views, or targets views + * manually/explicitly. + * + * Examples: + * + * Targets three named `ui-view`s in the parent state's template + *
    views: {
    +   *     header: {
    +   *       controller: "headerCtrl",
    +   *       templateUrl: "header.html"
    +   *     }, body: {
    +   *       controller: "bodyCtrl",
    +   *       templateUrl: "body.html"
    +   *     }, footer: {
    +   *       controller: "footCtrl",
    +   *       templateUrl: "footer.html"
    +   *     }
    +   *   }
    + * + * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. + *
    views: {
    +   *     'header@top': {
    +   *       controller: "msgHeaderCtrl",
    +   *       templateUrl: "msgHeader.html"
    +   *     }, 'body': {
    +   *       controller: "messagesCtrl",
    +   *       templateUrl: "messages.html"
    +   *     }
    +   *   }
    + * + * @param {boolean=} [stateConfig.abstract=false] + * + * An abstract state will never be directly activated, + * but can provide inherited properties to its common children states. + *
    abstract: true
    + * + * @param {function=} stateConfig.onEnter + * + * + * Callback function for when a state is entered. Good way + * to trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
    onEnter: function(MyService, $stateParams) {
    +   *     MyService.foo($stateParams.myParam);
    +   * }
    + * + * @param {function=} stateConfig.onExit + * + * + * Callback function for when a state is exited. Good way to + * trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
    onExit: function(MyService, $stateParams) {
    +   *     MyService.cleanup($stateParams.myParam);
    +   * }
    + * + * @param {boolean=} [stateConfig.reloadOnSearch=true] + * + * + * If `false`, will not retrigger the same state + * just because a search/query parameter has changed (via $location.search() or $location.hash()). + * Useful for when you'd like to modify $location.search() without triggering a reload. + *
    reloadOnSearch: false
    + * + * @param {object=} stateConfig.data + * + * + * Arbitrary data object, useful for custom configuration. The parent state's `data` is + * prototypally inherited. In other words, adding a data property to a state adds it to + * the entire subtree via prototypal inheritance. + * + *
    data: {
    +   *     requiredRole: 'foo'
    +   * } 
    + * + * @param {object=} stateConfig.params + * + * + * A map which optionally configures parameters declared in the `url`, or + * defines additional non-url parameters. For each parameter being + * configured, add a configuration object keyed to the name of the parameter. + * + * Each parameter configuration object may contain the following properties: + * + * - ** value ** - {object|function=}: specifies the default value for this + * parameter. This implicitly sets this parameter as optional. + * + * When UI-Router routes to a state and no value is + * specified for this parameter in the URL or transition, the + * default value will be used instead. If `value` is a function, + * it will be injected and invoked, and the return value used. + * + * *Note*: `undefined` is treated as "no default value" while `null` + * is treated as "the default value is `null`". + * + * *Shorthand*: If you only need to configure the default value of the + * parameter, you may use a shorthand syntax. In the **`params`** + * map, instead mapping the param name to a full parameter configuration + * object, simply set map it to the default parameter value, e.g.: + * + *
    // define a parameter's default value
    +   * params: {
    +   *     param1: { value: "defaultValue" }
    +   * }
    +   * // shorthand default values
    +   * params: {
    +   *     param1: "defaultValue",
    +   *     param2: "param2Default"
    +   * }
    + * + * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be + * treated as an array of values. If you specified a Type, the value will be + * treated as an array of the specified Type. Note: query parameter values + * default to a special `"auto"` mode. + * + * For query parameters in `"auto"` mode, if multiple values for a single parameter + * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values + * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if + * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single + * value (e.g.: `{ foo: '1' }`). + * + *
    params: {
    +   *     param1: { array: true }
    +   * }
    + * + * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when + * the current parameter value is the same as the default value. If `squash` is not set, it uses the + * configured default squash policy. + * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) + * + * There are three squash settings: + * + * - false: The parameter's default value is not squashed. It is encoded and included in the URL + * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed + * by slashes in the state's `url` declaration, then one of those slashes are omitted. + * This can allow for cleaner looking URLs. + * - `""`: The parameter's default value is replaced with an arbitrary placeholder of your choice. + * + *
    params: {
    +   *     param1: {
    +   *       value: "defaultId",
    +   *       squash: true
    +   * } }
    +   * // squash "defaultValue" to "~"
    +   * params: {
    +   *     param1: {
    +   *       value: "defaultValue",
    +   *       squash: "~"
    +   * } }
    +   * 
    + * + * + * @example + *
    +   * // Some state name examples
    +   *
    +   * // stateName can be a single top-level name (must be unique).
    +   * $stateProvider.state("home", {});
    +   *
    +   * // Or it can be a nested state name. This state is a child of the
    +   * // above "home" state.
    +   * $stateProvider.state("home.newest", {});
    +   *
    +   * // Nest states as deeply as needed.
    +   * $stateProvider.state("home.newest.abc.xyz.inception", {});
    +   *
    +   * // state() returns $stateProvider, so you can chain state declarations.
    +   * $stateProvider
    +   *   .state("home", {})
    +   *   .state("about", {})
    +   *   .state("contacts", {});
    +   * 
    + * + */ + this.state = state; + function state(name, definition) { + /*jshint validthis: true */ + if (isObject(name)) definition = name; + else definition.name = name; + registerState(definition); + return this; + } + + /** + * @ngdoc object + * @name ui.router.state.$state + * + * @requires $rootScope + * @requires $q + * @requires ui.router.state.$view + * @requires $injector + * @requires ui.router.util.$resolve + * @requires ui.router.state.$stateParams + * @requires ui.router.router.$urlRouter + * + * @property {object} params A param object, e.g. {sectionId: section.id)}, that + * you'd like to test against the current active state. + * @property {object} current A reference to the state's config object. However + * you passed it in. Useful for accessing custom data. + * @property {object} transition Currently pending transition. A promise that'll + * resolve or reject. + * + * @description + * `$state` service is responsible for representing states as well as transitioning + * between them. It also provides interfaces to ask for current state or even states + * you're coming from. + */ + this.$get = $get; + $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; + function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { + + var TransitionSuperseded = $q.reject(new Error('transition superseded')); + var TransitionPrevented = $q.reject(new Error('transition prevented')); + var TransitionAborted = $q.reject(new Error('transition aborted')); + var TransitionFailed = $q.reject(new Error('transition failed')); + + // Handles the case where a state which is the target of a transition is not found, and the user + // can optionally retry or defer the transition + function handleRedirect(redirect, state, params, options) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateNotFound + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when a requested state **cannot be found** using the provided state name during transition. + * The event is broadcast allowing any handlers a single chance to deal with the error (usually by + * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, + * you can see its three properties in the example. You can use `event.preventDefault()` to abort the + * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. + * + * @param {Object} event Event object. + * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. + * @param {State} fromState Current state object. + * @param {Object} fromParams Current state params. + * + * @example + * + *
    +       * // somewhere, assume lazy.state has not been defined
    +       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
    +       *
    +       * // somewhere else
    +       * $scope.$on('$stateNotFound',
    +       * function(event, unfoundState, fromState, fromParams){
    +       *     console.log(unfoundState.to); // "lazy.state"
    +       *     console.log(unfoundState.toParams); // {a:1, b:2}
    +       *     console.log(unfoundState.options); // {inherit:false} + default options
    +       * })
    +       * 
    + */ + var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); + + if (evt.defaultPrevented) { + $urlRouter.update(); + return TransitionAborted; + } + + if (!evt.retry) { + return null; + } + + // Allow the handler to return a promise to defer state lookup retry + if (options.$retry) { + $urlRouter.update(); + return TransitionFailed; + } + var retryTransition = $state.transition = $q.when(evt.retry); + + retryTransition.then(function() { + if (retryTransition !== $state.transition) return TransitionSuperseded; + redirect.options.$retry = true; + return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); + }, function() { + return TransitionAborted; + }); + $urlRouter.update(); + + return retryTransition; + } + + root.locals = { resolve: null, globals: { $stateParams: {} } }; + + $state = { + params: {}, + current: root.self, + $current: root, + transition: null + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#reload + * @methodOf ui.router.state.$state + * + * @description + * A method that force reloads the current state. All resolves are re-resolved, + * controllers reinstantiated, and events re-fired. + * + * @example + *
    +     * var app angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.reload = function(){
    +     *     $state.reload();
    +     *   }
    +     * });
    +     * 
    + * + * `reload()` is just an alias for: + *
    +     * $state.transitionTo($state.current, $stateParams, { 
    +     *   reload: true, inherit: false, notify: true
    +     * });
    +     * 
    + * + * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved. + * @example + *
    +     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' 
    +     * //and current state is 'contacts.detail.item'
    +     * var app angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.reload = function(){
    +     *     //will reload 'contact.detail' and 'contact.detail.item' states
    +     *     $state.reload('contact.detail');
    +     *   }
    +     * });
    +     * 
    + * + * `reload()` is just an alias for: + *
    +     * $state.transitionTo($state.current, $stateParams, { 
    +     *   reload: true, inherit: false, notify: true
    +     * });
    +     * 
    + + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.reload = function reload(state) { + return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true}); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#go + * @methodOf ui.router.state.$state + * + * @description + * Convenience method for transitioning to a new state. `$state.go` calls + * `$state.transitionTo` internally but automatically sets options to + * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. + * This allows you to easily use an absolute or relative to path and specify + * only the parameters you'd like to update (while letting unspecified parameters + * inherit from the currently active ancestor states). + * + * @example + *
    +     * var app = angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.changeState = function () {
    +     *     $state.go('contact.detail');
    +     *   };
    +     * });
    +     * 
    + * + * + * @param {string} to Absolute state name or relative state path. Some examples: + * + * - `$state.go('contact.detail')` - will go to the `contact.detail` state + * - `$state.go('^')` - will go to a parent state + * - `$state.go('^.sibling')` - will go to a sibling state + * - `$state.go('.child.grandchild')` - will go to grandchild state + * + * @param {object=} params A map of the parameters that will be sent to the state, + * will populate $stateParams. Any parameters that are not specified will be inherited from currently + * defined parameters. This allows, for example, going to a sibling state that shares parameters + * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. + * transitioning to a sibling will get you the parameters for all parents, transitioning to a child + * will get you all current parameters, etc. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. + * + * Possible success values: + * + * - $state.current + * + *
    Possible rejection values: + * + * - 'transition superseded' - when a newer transition has been started after this one + * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener + * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or + * when a `$stateNotFound` `event.retry` promise errors. + * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. + * - *resolve error* - when an error has occurred with a `resolve` + * + */ + $state.go = function go(to, params, options) { + return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#transitionTo + * @methodOf ui.router.state.$state + * + * @description + * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} + * uses `transitionTo` internally. `$state.go` is recommended in most situations. + * + * @example + *
    +     * var app = angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.changeState = function () {
    +     *     $state.transitionTo('contact.detail');
    +     *   };
    +     * });
    +     * 
    + * + * @param {string} to State name. + * @param {object=} toParams A map of the parameters that will be sent to the state, + * will populate $stateParams. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * if String, then will reload the state with the name given in reload, and any children. + * if Object, then a stateObj is expected, will reload the state found in stateObj, and any children. + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.transitionTo = function transitionTo(to, toParams, options) { + toParams = toParams || {}; + options = extend({ + location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false + }, options || {}); + + var from = $state.$current, fromParams = $state.params, fromPath = from.path; + var evt, toState = findState(to, options.relative); + + // Store the hash param for later (since it will be stripped out by various methods) + var hash = toParams['#']; + + if (!isDefined(toState)) { + var redirect = { to: to, toParams: toParams, options: options }; + var redirectResult = handleRedirect(redirect, from.self, fromParams, options); + + if (redirectResult) { + return redirectResult; + } + + // Always retry once if the $stateNotFound was not prevented + // (handles either redirect changed or state lazy-definition) + to = redirect.to; + toParams = redirect.toParams; + options = redirect.options; + toState = findState(to, options.relative); + + if (!isDefined(toState)) { + if (!options.relative) throw new Error("No such state '" + to + "'"); + throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); + } + } + if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); + if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); + if (!toState.params.$$validates(toParams)) return TransitionFailed; + + toParams = toState.params.$$values(toParams); + to = toState; + + var toPath = to.path; + + // Starting from the root of the path, keep all levels that haven't changed + var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; + + if (!options.reload) { + while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } else if (isString(options.reload) || isObject(options.reload)) { + if (isObject(options.reload) && !options.reload.name) { + throw new Error('Invalid reload state object'); + } + + var reloadState = options.reload === true ? fromPath[0] : findState(options.reload); + if (options.reload && !reloadState) { + throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'"); + } + + while (state && state === fromPath[keep] && state !== reloadState) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } + + // If we're going to the same state and all locals are kept, we've got nothing to do. + // But clear 'transition', as we still want to cancel any other pending transitions. + // TODO: We may not want to bump 'transition' if we're called from a location change + // that we've initiated ourselves, because we might accidentally abort a legitimate + // transition initiated from code? + if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) { + if (hash) toParams['#'] = hash; + $state.params = toParams; + copy($state.params, $stateParams); + if (options.location && to.navigable && to.navigable.url) { + $urlRouter.push(to.navigable.url, toParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + $urlRouter.update(true); + } + $state.transition = null; + return $q.when($state.current); + } + + // Filter parameters before we pass them to event handlers etc. + toParams = filterByKeys(to.params.$$keys(), toParams || {}); + + // Broadcast start event and cancel the transition if requested + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeStart + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when the state transition **begins**. You can use `event.preventDefault()` + * to prevent the transition from happening and then the transition promise will be + * rejected with a `'transition prevented'` value. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * + * @example + * + *
    +         * $rootScope.$on('$stateChangeStart',
    +         * function(event, toState, toParams, fromState, fromParams){
    +         *     event.preventDefault();
    +         *     // transitionTo() promise will be rejected with
    +         *     // a 'transition prevented' error
    +         * })
    +         * 
    + */ + if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { + $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams); + $urlRouter.update(); + return TransitionPrevented; + } + } + + // Resolve locals for the remaining states, but don't update any global state just + // yet -- if anything fails to resolve the current state needs to remain untouched. + // We also set up an inheritance chain for the locals here. This allows the view directive + // to quickly look up the correct definition for each view in the current state. Even + // though we create the locals object itself outside resolveState(), it is initially + // empty and gets filled asynchronously. We need to keep track of the promise for the + // (fully resolved) current locals, and pass this down the chain. + var resolved = $q.when(locals); + + for (var l = keep; l < toPath.length; l++, state = toPath[l]) { + locals = toLocals[l] = inherit(locals); + resolved = resolveState(state, toParams, state === to, resolved, locals, options); + } + + // Once everything is resolved, we are ready to perform the actual transition + // and return a promise for the new state. We also keep track of what the + // current promise is, so that we can detect overlapping transitions and + // keep only the outcome of the last transition. + var transition = $state.transition = resolved.then(function () { + var l, entering, exiting; + + if ($state.transition !== transition) return TransitionSuperseded; + + // Exit 'from' states not kept + for (l = fromPath.length - 1; l >= keep; l--) { + exiting = fromPath[l]; + if (exiting.self.onExit) { + $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); + } + exiting.locals = null; + } + + // Enter 'to' states not kept + for (l = keep; l < toPath.length; l++) { + entering = toPath[l]; + entering.locals = toLocals[l]; + if (entering.self.onEnter) { + $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); + } + } + + // Re-add the saved hash before we start returning things + if (hash) toParams['#'] = hash; + + // Run it again, to catch any transitions in callbacks + if ($state.transition !== transition) return TransitionSuperseded; + + // Update globals in $state + $state.$current = to; + $state.current = to.self; + $state.params = toParams; + copy($state.params, $stateParams); + $state.transition = null; + + if (options.location && to.navigable) { + $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + } + + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeSuccess + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired once the state transition is **complete**. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + */ + $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); + } + $urlRouter.update(true); + + return $state.current; + }, function (error) { + if ($state.transition !== transition) return TransitionSuperseded; + + $state.transition = null; + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeError + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when an **error occurs** during transition. It's important to note that if you + * have any errors in your resolve functions (javascript errors, non-existent services, etc) + * they will not throw traditionally. You must listen for this $stateChangeError event to + * catch **ALL** errors. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * @param {Error} error The resolve error object. + */ + evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); + + if (!evt.defaultPrevented) { + $urlRouter.update(); + } + + return $q.reject(error); + }); + + return transition; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#is + * @methodOf ui.router.state.$state + * + * @description + * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, + * but only checks for the full state name. If params is supplied then it will be + * tested for strict equality against the current active params object, so all params + * must match with none missing and no extras. + * + * @example + *
    +     * $state.$current.name = 'contacts.details.item';
    +     *
    +     * // absolute name
    +     * $state.is('contact.details.item'); // returns true
    +     * $state.is(contactDetailItemStateObject); // returns true
    +     *
    +     * // relative name (. and ^), typically from a template
    +     * // E.g. from the 'contacts.details' template
    +     * 
    Item
    + *
    + * + * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like + * to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will + * test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it is the state. + */ + $state.is = function is(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) { return undefined; } + if ($state.$current !== state) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#includes + * @methodOf ui.router.state.$state + * + * @description + * A method to determine if the current active state is equal to or is the child of the + * state stateName. If any params are passed then they will be tested for a match as well. + * Not all the parameters need to be passed, just the ones you'd like to test for equality. + * + * @example + * Partial and relative names + *
    +     * $state.$current.name = 'contacts.details.item';
    +     *
    +     * // Using partial names
    +     * $state.includes("contacts"); // returns true
    +     * $state.includes("contacts.details"); // returns true
    +     * $state.includes("contacts.details.item"); // returns true
    +     * $state.includes("contacts.list"); // returns false
    +     * $state.includes("about"); // returns false
    +     *
    +     * // Using relative names (. and ^), typically from a template
    +     * // E.g. from the 'contacts.details' template
    +     * 
    Item
    + *
    + * + * Basic globbing patterns + *
    +     * $state.$current.name = 'contacts.details.item.url';
    +     *
    +     * $state.includes("*.details.*.*"); // returns true
    +     * $state.includes("*.details.**"); // returns true
    +     * $state.includes("**.item.**"); // returns true
    +     * $state.includes("*.details.item.url"); // returns true
    +     * $state.includes("*.details.*.url"); // returns true
    +     * $state.includes("*.details.*"); // returns false
    +     * $state.includes("item.**"); // returns false
    +     * 
    + * + * @param {string} stateOrName A partial name, relative name, or glob pattern + * to be searched for within the current state name. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, + * that you'd like to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, + * .includes will test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it does include the state + */ + $state.includes = function includes(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + if (isString(stateOrName) && isGlob(stateOrName)) { + if (!doesStateMatchGlob(stateOrName)) { + return false; + } + stateOrName = $state.$current.name; + } + + var state = findState(stateOrName, options.relative); + if (!isDefined(state)) { return undefined; } + if (!isDefined($state.$current.includes[state.name])) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; + }; + + + /** + * @ngdoc function + * @name ui.router.state.$state#href + * @methodOf ui.router.state.$state + * + * @description + * A url generation method that returns the compiled url for the given state populated with the given params. + * + * @example + *
    +     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
    +     * 
    + * + * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. + * @param {object=} params An object of parameter values to fill the state's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the + * first parameter, then the constructed href url will be built from the first navigable ancestor (aka + * ancestor with a valid url). + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} compiled state url + */ + $state.href = function href(stateOrName, params, options) { + options = extend({ + lossy: true, + inherit: true, + absolute: false, + relative: $state.$current + }, options || {}); + + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) return null; + if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); + + var nav = (state && options.lossy) ? state.navigable : state; + + if (!nav || nav.url === undefined || nav.url === null) { + return null; + } + return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), { + absolute: options.absolute + }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#get + * @methodOf ui.router.state.$state + * + * @description + * Returns the state configuration object for any specific state or all states. + * + * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for + * the requested state. If not provided, returns an array of ALL state configs. + * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. + * @returns {Object|Array} State configuration object or array of all objects. + */ + $state.get = function (stateOrName, context) { + if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); + var state = findState(stateOrName, context || $state.$current); + return (state && state.self) ? state.self : null; + }; + + function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { + // Make a restricted $stateParams with only the parameters that apply to this state if + // necessary. In addition to being available to the controller and onEnter/onExit callbacks, + // we also need $stateParams to be available for any $injector calls we make during the + // dependency resolution process. + var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); + var locals = { $stateParams: $stateParams }; + + // Resolve 'global' dependencies for the state, i.e. those not specific to a view. + // We're also including $stateParams in this; that way the parameters are restricted + // to the set that should be visible to the state, and are independent of when we update + // the global $state and $stateParams values. + dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); + var promises = [dst.resolve.then(function (globals) { + dst.globals = globals; + })]; + if (inherited) promises.push(inherited); + + function resolveViews() { + var viewsPromises = []; + + // Resolve template and dependencies for all views. + forEach(state.views, function (view, name) { + var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); + injectables.$template = [ function () { + return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || ''; + }]; + + viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) { + // References to the controller (only instantiated at link time) + if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { + var injectLocals = angular.extend({}, injectables, dst.globals); + result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); + } else { + result.$$controller = view.controller; + } + // Provide access to the state itself for internal use + result.$$state = state; + result.$$controllerAs = view.controllerAs; + dst[name] = result; + })); + }); + + return $q.all(viewsPromises).then(function(){ + return dst.globals; + }); + } + + // Wait for all the promises and then return the activation object + return $q.all(promises).then(resolveViews).then(function (values) { + return dst; + }); + } + + return $state; + } + + function shouldSkipReload(to, toParams, from, fromParams, locals, options) { + // Return true if there are no differences in non-search (path/object) params, false if there are differences + function nonSearchParamsEqual(fromAndToState, fromParams, toParams) { + // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params. + function notSearchParam(key) { + return fromAndToState.params[key].location != "search"; + } + var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam); + var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys)); + var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams); + return nonQueryParamSet.$$equals(fromParams, toParams); + } + + // If reload was not explicitly requested + // and we're transitioning to the same state we're already in + // and the locals didn't change + // or they changed in a way that doesn't merit reloading + // (reloadOnParams:false, or reloadOnSearch.false and only search params changed) + // Then return true. + if (!options.reload && to === from && + (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) { + return true; + } + } +} + +angular.module('ui.router.state') + .value('$stateParams', {}) + .provider('$state', $StateProvider); + + +$ViewProvider.$inject = []; +function $ViewProvider() { + + this.$get = $get; + /** + * @ngdoc object + * @name ui.router.state.$view + * + * @requires ui.router.util.$templateFactory + * @requires $rootScope + * + * @description + * + */ + $get.$inject = ['$rootScope', '$templateFactory']; + function $get( $rootScope, $templateFactory) { + return { + // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) + /** + * @ngdoc function + * @name ui.router.state.$view#load + * @methodOf ui.router.state.$view + * + * @description + * + * @param {string} name name + * @param {object} options option object. + */ + load: function load(name, options) { + var result, defaults = { + template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} + }; + options = extend(defaults, options); + + if (options.view) { + result = $templateFactory.fromConfig(options.view, options.params, options.locals); + } + if (result && options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$viewContentLoading + * @eventOf ui.router.state.$view + * @eventType broadcast on root scope + * @description + * + * Fired once the view **begins loading**, *before* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {Object} viewConfig The view config properties (template, controller, etc). + * + * @example + * + *
    +         * $scope.$on('$viewContentLoading',
    +         * function(event, viewConfig){
    +         *     // Access to all the view config properties.
    +         *     // and one special property 'targetView'
    +         *     // viewConfig.targetView
    +         * });
    +         * 
    + */ + $rootScope.$broadcast('$viewContentLoading', options); + } + return result; + } + }; + } +} + +angular.module('ui.router.state').provider('$view', $ViewProvider); + +/** + * @ngdoc object + * @name ui.router.state.$uiViewScrollProvider + * + * @description + * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. + */ +function $ViewScrollProvider() { + + var useAnchorScroll = false; + + /** + * @ngdoc function + * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll + * @methodOf ui.router.state.$uiViewScrollProvider + * + * @description + * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for + * scrolling based on the url anchor. + */ + this.useAnchorScroll = function () { + useAnchorScroll = true; + }; + + /** + * @ngdoc object + * @name ui.router.state.$uiViewScroll + * + * @requires $anchorScroll + * @requires $timeout + * + * @description + * When called with a jqLite element, it scrolls the element into view (after a + * `$timeout` so the DOM has time to refresh). + * + * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, + * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. + */ + this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { + if (useAnchorScroll) { + return $anchorScroll; + } + + return function ($element) { + return $timeout(function () { + $element[0].scrollIntoView(); + }, 0, false); + }; + }]; +} + +angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-view + * + * @requires ui.router.state.$state + * @requires $compile + * @requires $controller + * @requires $injector + * @requires ui.router.state.$uiViewScroll + * @requires $document + * + * @restrict ECA + * + * @description + * The ui-view directive tells $state where to place your templates. + * + * @param {string=} name A view name. The name should be unique amongst the other views in the + * same state. You can have views of the same name that live in different states. + * + * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window + * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll + * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you + * scroll ui-view elements into view when they are populated during a state activation. + * + * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) + * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* + * + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @example + * A view can be unnamed or named. + *
    + * 
    + * 
    + * + * + *
    + *
    + * + * You can only have one unnamed view within any template (or root html). If you are only using a + * single view and it is unnamed then you can populate it like so: + *
    + * 
    + * $stateProvider.state("home", { + * template: "

    HELLO!

    " + * }) + *
    + * + * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} + * config property, by name, in this case an empty name: + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "": {
    + *       template: "

    HELLO!

    " + * } + * } + * }) + *
    + * + * But typically you'll only use the views property if you name your view or have more than one view + * in the same template. There's not really a compelling reason to name a view if its the only one, + * but you could if you wanted, like so: + *
    + * 
    + *
    + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "main": {
    + *       template: "

    HELLO!

    " + * } + * } + * }) + *
    + * + * Really though, you'll use views to set up multiple views: + *
    + * 
    + *
    + *
    + *
    + * + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "": {
    + *       template: "

    HELLO!

    " + * }, + * "chart": { + * template: "" + * }, + * "data": { + * template: "" + * } + * } + * }) + *
    + * + * Examples for `autoscroll`: + * + *
    + * 
    + * 
    + *
    + * 
    + * 
    + * 
    + * 
    + * 
    + */ +$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; +function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { + + function getService() { + return ($injector.has) ? function(service) { + return $injector.has(service) ? $injector.get(service) : null; + } : function(service) { + try { + return $injector.get(service); + } catch (e) { + return null; + } + }; + } + + var service = getService(), + $animator = service('$animator'), + $animate = service('$animate'); + + // Returns a set of DOM manipulation functions based on which Angular version + // it should use + function getRenderer(attrs, scope) { + var statics = function() { + return { + enter: function (element, target, cb) { target.after(element); cb(); }, + leave: function (element, cb) { element.remove(); cb(); } + }; + }; + + if ($animate) { + return { + enter: function(element, target, cb) { + var promise = $animate.enter(element, null, target, cb); + if (promise && promise.then) promise.then(cb); + }, + leave: function(element, cb) { + var promise = $animate.leave(element, cb); + if (promise && promise.then) promise.then(cb); + } + }; + } + + if ($animator) { + var animate = $animator && $animator(scope, attrs); + + return { + enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, + leave: function(element, cb) { animate.leave(element); cb(); } + }; + } + + return statics(); + } + + var directive = { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + compile: function (tElement, tAttrs, $transclude) { + return function (scope, $element, attrs) { + var previousEl, currentEl, currentScope, latestLocals, + onloadExp = attrs.onload || '', + autoScrollExp = attrs.autoscroll, + renderer = getRenderer(attrs, scope); + + scope.$on('$stateChangeSuccess', function() { + updateView(false); + }); + scope.$on('$viewContentLoading', function() { + updateView(false); + }); + + updateView(true); + + function cleanupLastView() { + if (previousEl) { + previousEl.remove(); + previousEl = null; + } + + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + + if (currentEl) { + renderer.leave(currentEl, function() { + previousEl = null; + }); + + previousEl = currentEl; + currentEl = null; + } + } + + function updateView(firstTime) { + var newScope, + name = getUiViewName(scope, attrs, $element, $interpolate), + previousLocals = name && $state.$current && $state.$current.locals[name]; + + if (!firstTime && previousLocals === latestLocals) return; // nothing to do + newScope = scope.$new(); + latestLocals = $state.$current.locals[name]; + + var clone = $transclude(newScope, function(clone) { + renderer.enter(clone, $element, function onUiViewEnter() { + if(currentScope) { + currentScope.$emit('$viewContentAnimationEnded'); + } + + if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { + $uiViewScroll(clone); + } + }); + cleanupLastView(); + }); + + currentEl = clone; + currentScope = newScope; + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoaded + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description * + * Fired once the view is **loaded**, *after* the DOM is rendered. + * + * @param {Object} event Event object. + */ + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + } + }; + } + }; + + return directive; +} + +$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; +function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { + return { + restrict: 'ECA', + priority: -400, + compile: function (tElement) { + var initial = tElement.html(); + return function (scope, $element, attrs) { + var current = $state.$current, + name = getUiViewName(scope, attrs, $element, $interpolate), + locals = current && current.locals[name]; + + if (! locals) { + return; + } + + $element.data('$uiView', { name: name, state: locals.$$state }); + $element.html(locals.$template ? locals.$template : initial); + + var link = $compile($element.contents()); + + if (locals.$$controller) { + locals.$scope = scope; + locals.$element = $element; + var controller = $controller(locals.$$controller, locals); + if (locals.$$controllerAs) { + scope[locals.$$controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + }; + } + }; +} + +/** + * Shared ui-view code for both directives: + * Given scope, element, and its attributes, return the view's name + */ +function getUiViewName(scope, attrs, element, $interpolate) { + var name = $interpolate(attrs.uiView || attrs.name || '')(scope); + var inherited = element.inheritedData('$uiView'); + return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); +} + +angular.module('ui.router.state').directive('uiView', $ViewDirective); +angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); + +function parseStateRef(ref, current) { + var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; + if (preparsed) ref = current + '(' + preparsed[1] + ')'; + parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function stateContext(el) { + var stateData = el.parent().inheritedData('$uiView'); + + if (stateData && stateData.state && stateData.state.name) { + return stateData.state; + } +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref + * + * @requires ui.router.state.$state + * @requires $timeout + * + * @restrict A + * + * @description + * A directive that binds a link (`` tag) to a state. If the state has an associated + * URL, the directive will automatically generate & update the `href` attribute via + * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking + * the link will trigger a state transition with optional parameters. + * + * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be + * handled natively by the browser. + * + * You can also use relative state paths within ui-sref, just like the relative + * paths passed to `$state.go()`. You just need to be aware that the path is relative + * to the state that the link lives in, in other words the state that loaded the + * template containing the link. + * + * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} + * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, + * and `reload`. + * + * @example + * Here's an example of how you'd use ui-sref and how it would compile. If you have the + * following template: + *
    + * Home | About | Next page
    + * 
    + * 
    + * 
    + * + * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): + *
    + * Home | About | Next page
    + * 
    + * 
      + *
    • + * Joe + *
    • + *
    • + * Alice + *
    • + *
    • + * Bob + *
    • + *
    + * + * Home + *
    + * + * @param {string} ui-sref 'stateName' can be any valid absolute or relative state + * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} + */ +$StateRefDirective.$inject = ['$state', '$timeout']; +function $StateRefDirective($state, $timeout) { + var allowedOptions = ['location', 'inherit', 'reload', 'absolute']; + + return { + restrict: 'A', + require: ['?^uiSrefActive', '?^uiSrefActiveEq'], + link: function(scope, element, attrs, uiSrefActive) { + var ref = parseStateRef(attrs.uiSref, $state.current.name); + var params = null, url = null, base = stateContext(element) || $state.$current; + // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. + var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? + 'xlink:href' : 'href'; + var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A"; + var isForm = element[0].nodeName === "FORM"; + var attr = isForm ? "action" : hrefKind, nav = true; + + var options = { relative: base, inherit: true }; + var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; + + angular.forEach(allowedOptions, function(option) { + if (option in optionsOverride) { + options[option] = optionsOverride[option]; + } + }); + + var update = function(newVal) { + if (newVal) params = angular.copy(newVal); + if (!nav) return; + + newHref = $state.href(ref.state, params, options); + + var activeDirective = uiSrefActive[1] || uiSrefActive[0]; + if (activeDirective) { + activeDirective.$$addStateInfo(ref.state, params); + } + if (newHref === null) { + nav = false; + return false; + } + attrs.$set(attr, newHref); + }; + + if (ref.paramExpr) { + scope.$watch(ref.paramExpr, function(newVal, oldVal) { + if (newVal !== params) update(newVal); + }, true); + params = angular.copy(scope.$eval(ref.paramExpr)); + } + update(); + + if (isForm) return; + + element.bind("click", function(e) { + var button = e.which || e.button; + if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { + // HACK: This is to allow ng-clicks to be processed before the transition is initiated: + var transition = $timeout(function() { + $state.go(ref.state, params, options); + }); + e.preventDefault(); + + // if the state has no URL, ignore one preventDefault from the directive. + var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; + e.preventDefault = function() { + if (ignorePreventDefaultCount-- <= 0) + $timeout.cancel(transition); + }; + } + }); + } + }; +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * A directive working alongside ui-sref to add classes to an element when the + * related ui-sref directive's state is active, and removing them when it is inactive. + * The primary use-case is to simplify the special appearance of navigation menus + * relying on `ui-sref`, by having the "active" state's menu button appear different, + * distinguishing it from the inactive menu items. + * + * ui-sref-active can live on the same element as ui-sref or on a parent element. The first + * ui-sref-active found at the same level or above the ui-sref will be used. + * + * Will activate when the ui-sref's target state or any child state is active. If you + * need to activate only when the ui-sref target state is active and *not* any of + * it's children, then you will use + * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} + * + * @example + * Given the following template: + *
    + * 
    + * 
    + * + * + * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", + * the resulting HTML will appear as (note the 'active' class): + *
    + * 
    + * 
    + * + * The class name is interpolated **once** during the directives link time (any further changes to the + * interpolated value are ignored). + * + * Multiple classes may be specified in a space-separated format: + *
    + * 
      + *
    • + * link + *
    • + *
    + *
    + */ + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active-eq + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate + * when the exact target state used in the `ui-sref` is active; no child states. + * + */ +$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; +function $StateRefActiveDirective($state, $stateParams, $interpolate) { + return { + restrict: "A", + controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { + var states = [], activeClass; + + // There probably isn't much point in $observing this + // uiSrefActive and uiSrefActiveEq share the same directive object with some + // slight difference in logic routing + activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); + + // Allow uiSref to communicate with uiSrefActive[Equals] + this.$$addStateInfo = function (newState, newParams) { + var state = $state.get(newState, stateContext($element)); + + states.push({ + state: state || { name: newState }, + params: newParams + }); + + update(); + }; + + $scope.$on('$stateChangeSuccess', update); + + // Update route state + function update() { + if (anyMatch()) { + $element.addClass(activeClass); + } else { + $element.removeClass(activeClass); + } + } + + function anyMatch() { + for (var i = 0; i < states.length; i++) { + if (isMatch(states[i].state, states[i].params)) { + return true; + } + } + return false; + } + + function isMatch(state, params) { + if (typeof $attrs.uiSrefActiveEq !== 'undefined') { + return $state.is(state.name, params); + } else { + return $state.includes(state.name, params); + } + } + }] + }; +} + +angular.module('ui.router.state') + .directive('uiSref', $StateRefDirective) + .directive('uiSrefActive', $StateRefActiveDirective) + .directive('uiSrefActiveEq', $StateRefActiveDirective); + +/** + * @ngdoc filter + * @name ui.router.state.filter:isState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. + */ +$IsStateFilter.$inject = ['$state']; +function $IsStateFilter($state) { + var isFilter = function (state) { + return $state.is(state); + }; + isFilter.$stateful = true; + return isFilter; +} + +/** + * @ngdoc filter + * @name ui.router.state.filter:includedByState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. + */ +$IncludedByStateFilter.$inject = ['$state']; +function $IncludedByStateFilter($state) { + var includesFilter = function (state) { + return $state.includes(state); + }; + includesFilter.$stateful = true; + return includesFilter; +} + +angular.module('ui.router.state') + .filter('isState', $IsStateFilter) + .filter('includedByState', $IncludedByStateFilter); +})(window, window.angular); \ No newline at end of file diff --git a/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.min.js b/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.min.js new file mode 100644 index 0000000000..18d8307f50 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/release/angular-ui-router.min.js @@ -0,0 +1,7 @@ +/** + * State-based routing for AngularJS + * @version v0.2.15 + * @link http://angular-ui.github.com/ + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;de;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;ae;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;fe;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g>> 0, from = Number(arguments[2]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + + if (from < 0) from += len; + + for (; from < len; from++) { + if (from in array && array[from] === value) return from; + } + return -1; +} + +/** + * Merges a set of parameters with all parameters inherited between the common parents of the + * current state and a given destination state. + * + * @param {Object} currentParams The value of the current state parameters ($stateParams). + * @param {Object} newParams The set of parameters which will be composited with inherited params. + * @param {Object} $current Internal definition of object representing the current state. + * @param {Object} $to Internal definition of object representing state to transition to. + */ +function inheritParams(currentParams, newParams, $current, $to) { + var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; + + for (var i in parents) { + if (!parents[i].params) continue; + parentParams = objectKeys(parents[i].params); + if (!parentParams.length) continue; + + for (var j in parentParams) { + if (indexOf(inheritList, parentParams[j]) >= 0) continue; + inheritList.push(parentParams[j]); + inherited[parentParams[j]] = currentParams[parentParams[j]]; + } + } + return extend({}, inherited, newParams); +} + +/** + * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. + * + * @param {Object} a The first object. + * @param {Object} b The second object. + * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, + * it defaults to the list of keys in `a`. + * @return {Boolean} Returns `true` if the keys match, otherwise `false`. + */ +function equalForKeys(a, b, keys) { + if (!keys) { + keys = []; + for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility + } + + for (var i=0; i + * + * + * + * + * + * + * + * + * + * + * + * + */ +angular.module('ui.router', ['ui.router.state']); + +angular.module('ui.router.compat', ['ui.router']); diff --git a/awx/ui/client/lib/angular-ui-router/src/resolve.js b/awx/ui/client/lib/angular-ui-router/src/resolve.js new file mode 100644 index 0000000000..f1c1790099 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/resolve.js @@ -0,0 +1,252 @@ +/** + * @ngdoc object + * @name ui.router.util.$resolve + * + * @requires $q + * @requires $injector + * + * @description + * Manages resolution of (acyclic) graphs of promises. + */ +$Resolve.$inject = ['$q', '$injector']; +function $Resolve( $q, $injector) { + + var VISIT_IN_PROGRESS = 1, + VISIT_DONE = 2, + NOTHING = {}, + NO_DEPENDENCIES = [], + NO_LOCALS = NOTHING, + NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); + + + /** + * @ngdoc function + * @name ui.router.util.$resolve#study + * @methodOf ui.router.util.$resolve + * + * @description + * Studies a set of invocables that are likely to be used multiple times. + *
    +   * $resolve.study(invocables)(locals, parent, self)
    +   * 
    + * is equivalent to + *
    +   * $resolve.resolve(invocables, locals, parent, self)
    +   * 
    + * but the former is more efficient (in fact `resolve` just calls `study` + * internally). + * + * @param {object} invocables Invocable objects + * @return {function} a function to pass in locals, parent and self + */ + this.study = function (invocables) { + if (!isObject(invocables)) throw new Error("'invocables' must be an object"); + var invocableKeys = objectKeys(invocables || {}); + + // Perform a topological sort of invocables to build an ordered plan + var plan = [], cycle = [], visited = {}; + function visit(value, key) { + if (visited[key] === VISIT_DONE) return; + + cycle.push(key); + if (visited[key] === VISIT_IN_PROGRESS) { + cycle.splice(0, indexOf(cycle, key)); + throw new Error("Cyclic dependency: " + cycle.join(" -> ")); + } + visited[key] = VISIT_IN_PROGRESS; + + if (isString(value)) { + plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); + } else { + var params = $injector.annotate(value); + forEach(params, function (param) { + if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); + }); + plan.push(key, value, params); + } + + cycle.pop(); + visited[key] = VISIT_DONE; + } + forEach(invocables, visit); + invocables = cycle = visited = null; // plan is all that's required + + function isResolve(value) { + return isObject(value) && value.then && value.$$promises; + } + + return function (locals, parent, self) { + if (isResolve(locals) && self === undefined) { + self = parent; parent = locals; locals = null; + } + if (!locals) locals = NO_LOCALS; + else if (!isObject(locals)) { + throw new Error("'locals' must be an object"); + } + if (!parent) parent = NO_PARENT; + else if (!isResolve(parent)) { + throw new Error("'parent' must be a promise returned by $resolve.resolve()"); + } + + // To complete the overall resolution, we have to wait for the parent + // promise and for the promise for each invokable in our plan. + var resolution = $q.defer(), + result = resolution.promise, + promises = result.$$promises = {}, + values = extend({}, locals), + wait = 1 + plan.length/3, + merged = false; + + function done() { + // Merge parent values we haven't got yet and publish our own $$values + if (!--wait) { + if (!merged) merge(values, parent.$$values); + result.$$values = values; + result.$$promises = result.$$promises || true; // keep for isResolve() + delete result.$$inheritedValues; + resolution.resolve(values); + } + } + + function fail(reason) { + result.$$failure = reason; + resolution.reject(reason); + } + + // Short-circuit if parent has already failed + if (isDefined(parent.$$failure)) { + fail(parent.$$failure); + return result; + } + + if (parent.$$inheritedValues) { + merge(values, omit(parent.$$inheritedValues, invocableKeys)); + } + + // Merge parent values if the parent has already resolved, or merge + // parent promises and wait if the parent resolve is still in progress. + extend(promises, parent.$$promises); + if (parent.$$values) { + merged = merge(values, omit(parent.$$values, invocableKeys)); + result.$$inheritedValues = omit(parent.$$values, invocableKeys); + done(); + } else { + if (parent.$$inheritedValues) { + result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); + } + parent.then(done, fail); + } + + // Process each invocable in the plan, but ignore any where a local of the same name exists. + for (var i=0, ii=plan.length; i= 0) throw new Error("State must have a valid name"); + if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); + + // Get parent name + var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) + : (isString(state.parent)) ? state.parent + : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name + : ''; + + // If parent is not registered yet, add state to queue and register later + if (parentName && !states[parentName]) { + return queueState(parentName, state.self); + } + + for (var key in stateBuilder) { + if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); + } + states[name] = state; + + // Register the state in the global state list and with $urlRouter if necessary. + if (!state[abstractKey] && state.url) { + $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { + if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { + $state.transitionTo(state, $match, { inherit: true, location: false }); + } + }]); + } + + // Register any queued children + flushQueuedChildren(name); + + return state; + } + + // Checks text to see if it looks like a glob. + function isGlob (text) { + return text.indexOf('*') > -1; + } + + // Returns true if glob matches current $state name. + function doesStateMatchGlob (glob) { + var globSegments = glob.split('.'), + segments = $state.$current.name.split('.'); + + //match single stars + for (var i = 0, l = globSegments.length; i < l; i++) { + if (globSegments[i] === '*') { + segments[i] = '*'; + } + } + + //match greedy starts + if (globSegments[0] === '**') { + segments = segments.slice(indexOf(segments, globSegments[1])); + segments.unshift('**'); + } + //match greedy ends + if (globSegments[globSegments.length - 1] === '**') { + segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); + segments.push('**'); + } + + if (globSegments.length != segments.length) { + return false; + } + + return segments.join('') === globSegments.join(''); + } + + + // Implicit root state that is always active + root = registerState({ + name: '', + url: '^', + views: null, + 'abstract': true + }); + root.navigable = null; + + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#decorator + * @methodOf ui.router.state.$stateProvider + * + * @description + * Allows you to extend (carefully) or override (at your own peril) the + * `stateBuilder` object used internally by `$stateProvider`. This can be used + * to add custom functionality to ui-router, for example inferring templateUrl + * based on the state name. + * + * When passing only a name, it returns the current (original or decorated) builder + * function that matches `name`. + * + * The builder functions that can be decorated are listed below. Though not all + * necessarily have a good use case for decoration, that is up to you to decide. + * + * In addition, users can attach custom decorators, which will generate new + * properties within the state's internal definition. There is currently no clear + * use-case for this beyond accessing internal states (i.e. $state.$current), + * however, expect this to become increasingly relevant as we introduce additional + * meta-programming features. + * + * **Warning**: Decorators should not be interdependent because the order of + * execution of the builder functions in non-deterministic. Builder functions + * should only be dependent on the state definition object and super function. + * + * + * Existing builder functions and current return values: + * + * - **parent** `{object}` - returns the parent state object. + * - **data** `{object}` - returns state data, including any inherited data that is not + * overridden by own values (if any). + * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} + * or `null`. + * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is + * navigable). + * - **params** `{object}` - returns an array of state params that are ensured to + * be a super-set of parent's params. + * - **views** `{object}` - returns a views object where each key is an absolute view + * name (i.e. "viewName@stateName") and each value is the config object + * (template, controller) for the view. Even when you don't use the views object + * explicitly on a state config, one is still created for you internally. + * So by decorating this builder function you have access to decorating template + * and controller properties. + * - **ownParams** `{object}` - returns an array of params that belong to the state, + * not including any params defined by ancestor states. + * - **path** `{string}` - returns the full path from the root down to this state. + * Needed for state activation. + * - **includes** `{object}` - returns an object that includes every state that + * would pass a `$state.includes()` test. + * + * @example + *
    +   * // Override the internal 'views' builder with a function that takes the state
    +   * // definition, and a reference to the internal function being overridden:
    +   * $stateProvider.decorator('views', function (state, parent) {
    +   *   var result = {},
    +   *       views = parent(state);
    +   *
    +   *   angular.forEach(views, function (config, name) {
    +   *     var autoName = (state.name + '.' + name).replace('.', '/');
    +   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
    +   *     result[name] = config;
    +   *   });
    +   *   return result;
    +   * });
    +   *
    +   * $stateProvider.state('home', {
    +   *   views: {
    +   *     'contact.list': { controller: 'ListController' },
    +   *     'contact.item': { controller: 'ItemController' }
    +   *   }
    +   * });
    +   *
    +   * // ...
    +   *
    +   * $state.go('home');
    +   * // Auto-populates list and item views with /partials/home/contact/list.html,
    +   * // and /partials/home/contact/item.html, respectively.
    +   * 
    + * + * @param {string} name The name of the builder function to decorate. + * @param {object} func A function that is responsible for decorating the original + * builder function. The function receives two parameters: + * + * - `{object}` - state - The state config object. + * - `{object}` - super - The original builder function. + * + * @return {object} $stateProvider - $stateProvider instance + */ + this.decorator = decorator; + function decorator(name, func) { + /*jshint validthis: true */ + if (isString(name) && !isDefined(func)) { + return stateBuilder[name]; + } + if (!isFunction(func) || !isString(name)) { + return this; + } + if (stateBuilder[name] && !stateBuilder.$delegates[name]) { + stateBuilder.$delegates[name] = stateBuilder[name]; + } + stateBuilder[name] = func; + return this; + } + + /** + * @ngdoc function + * @name ui.router.state.$stateProvider#state + * @methodOf ui.router.state.$stateProvider + * + * @description + * Registers a state configuration under a given state name. The stateConfig object + * has the following acceptable properties. + * + * @param {string} name A unique state name, e.g. "home", "about", "contacts". + * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". + * @param {object} stateConfig State configuration object. + * @param {string|function=} stateConfig.template + * + * html template as a string or a function that returns + * an html template as a string which should be used by the uiView directives. This property + * takes precedence over templateUrl. + * + * If `template` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
    template:
    +   *   "

    inline template definition

    " + + * "
    "
    + *
    template: function(params) {
    +   *       return "

    generated template

    "; }
    + * + * + * @param {string|function=} stateConfig.templateUrl + * + * + * path or function that returns a path to an html + * template that should be used by uiView. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - {array.<object>} - state parameters extracted from the current $location.path() by + * applying the current state + * + *
    templateUrl: "home.html"
    + *
    templateUrl: function(params) {
    +   *     return myTemplates[params.pageId]; }
    + * + * @param {function=} stateConfig.templateProvider + * + * Provider function that returns HTML content string. + *
     templateProvider:
    +   *       function(MyTemplateService, params) {
    +   *         return MyTemplateService.getTemplate(params.pageId);
    +   *       }
    + * + * @param {string|function=} stateConfig.controller + * + * + * Controller fn that should be associated with newly + * related scope or the name of a registered controller if passed as a string. + * Optionally, the ControllerAs may be declared here. + *
    controller: "MyRegisteredController"
    + *
    controller:
    +   *     "MyRegisteredController as fooCtrl"}
    + *
    controller: function($scope, MyService) {
    +   *     $scope.data = MyService.getData(); }
    + * + * @param {function=} stateConfig.controllerProvider + * + * + * Injectable provider function that returns the actual controller or string. + *
    controllerProvider:
    +   *   function(MyResolveData) {
    +   *     if (MyResolveData.foo)
    +   *       return "FooCtrl"
    +   *     else if (MyResolveData.bar)
    +   *       return "BarCtrl";
    +   *     else return function($scope) {
    +   *       $scope.baz = "Qux";
    +   *     }
    +   *   }
    + * + * @param {string=} stateConfig.controllerAs + * + * + * A controller alias name. If present the controller will be + * published to scope under the controllerAs name. + *
    controllerAs: "myCtrl"
    + * + * @param {string|object=} stateConfig.parent + * + * Optionally specifies the parent state of this state. + * + *
    parent: 'parentState'
    + *
    parent: parentState // JS variable
    + * + * @param {object=} stateConfig.resolve + * + * + * An optional map<string, function> of dependencies which + * should be injected into the controller. If any of these dependencies are promises, + * the router will wait for them all to be resolved before the controller is instantiated. + * If all the promises are resolved successfully, the $stateChangeSuccess event is fired + * and the values of the resolved promises are injected into any controllers that reference them. + * If any of the promises are rejected the $stateChangeError event is fired. + * + * The map object is: + * + * - key - {string}: name of dependency to be injected into controller + * - factory - {string|function}: If string then it is alias for service. Otherwise if function, + * it is injected and return value it treated as dependency. If result is a promise, it is + * resolved before its value is injected into controller. + * + *
    resolve: {
    +   *     myResolve1:
    +   *       function($http, $stateParams) {
    +   *         return $http.get("/api/foos/"+stateParams.fooID);
    +   *       }
    +   *     }
    + * + * @param {string=} stateConfig.url + * + * + * A url fragment with optional parameters. When a state is navigated or + * transitioned to, the `$stateParams` service will be populated with any + * parameters that were passed. + * + * (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for + * more details on acceptable patterns ) + * + * examples: + *
    url: "/home"
    +   * url: "/users/:userid"
    +   * url: "/books/{bookid:[a-zA-Z_-]}"
    +   * url: "/books/{categoryid:int}"
    +   * url: "/books/{publishername:string}/{categoryid:int}"
    +   * url: "/messages?before&after"
    +   * url: "/messages?{before:date}&{after:date}"
    +   * url: "/messages/:mailboxid?{before:date}&{after:date}"
    +   * 
    + * + * @param {object=} stateConfig.views + * + * an optional map<string, object> which defined multiple views, or targets views + * manually/explicitly. + * + * Examples: + * + * Targets three named `ui-view`s in the parent state's template + *
    views: {
    +   *     header: {
    +   *       controller: "headerCtrl",
    +   *       templateUrl: "header.html"
    +   *     }, body: {
    +   *       controller: "bodyCtrl",
    +   *       templateUrl: "body.html"
    +   *     }, footer: {
    +   *       controller: "footCtrl",
    +   *       templateUrl: "footer.html"
    +   *     }
    +   *   }
    + * + * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. + *
    views: {
    +   *     'header@top': {
    +   *       controller: "msgHeaderCtrl",
    +   *       templateUrl: "msgHeader.html"
    +   *     }, 'body': {
    +   *       controller: "messagesCtrl",
    +   *       templateUrl: "messages.html"
    +   *     }
    +   *   }
    + * + * @param {boolean=} [stateConfig.abstract=false] + * + * An abstract state will never be directly activated, + * but can provide inherited properties to its common children states. + *
    abstract: true
    + * + * @param {function=} stateConfig.onEnter + * + * + * Callback function for when a state is entered. Good way + * to trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
    onEnter: function(MyService, $stateParams) {
    +   *     MyService.foo($stateParams.myParam);
    +   * }
    + * + * @param {function=} stateConfig.onExit + * + * + * Callback function for when a state is exited. Good way to + * trigger an action or dispatch an event, such as opening a dialog. + * If minifying your scripts, make sure to explictly annotate this function, + * because it won't be automatically annotated by your build tools. + * + *
    onExit: function(MyService, $stateParams) {
    +   *     MyService.cleanup($stateParams.myParam);
    +   * }
    + * + * @param {boolean=} [stateConfig.reloadOnSearch=true] + * + * + * If `false`, will not retrigger the same state + * just because a search/query parameter has changed (via $location.search() or $location.hash()). + * Useful for when you'd like to modify $location.search() without triggering a reload. + *
    reloadOnSearch: false
    + * + * @param {object=} stateConfig.data + * + * + * Arbitrary data object, useful for custom configuration. The parent state's `data` is + * prototypally inherited. In other words, adding a data property to a state adds it to + * the entire subtree via prototypal inheritance. + * + *
    data: {
    +   *     requiredRole: 'foo'
    +   * } 
    + * + * @param {object=} stateConfig.params + * + * + * A map which optionally configures parameters declared in the `url`, or + * defines additional non-url parameters. For each parameter being + * configured, add a configuration object keyed to the name of the parameter. + * + * Each parameter configuration object may contain the following properties: + * + * - ** value ** - {object|function=}: specifies the default value for this + * parameter. This implicitly sets this parameter as optional. + * + * When UI-Router routes to a state and no value is + * specified for this parameter in the URL or transition, the + * default value will be used instead. If `value` is a function, + * it will be injected and invoked, and the return value used. + * + * *Note*: `undefined` is treated as "no default value" while `null` + * is treated as "the default value is `null`". + * + * *Shorthand*: If you only need to configure the default value of the + * parameter, you may use a shorthand syntax. In the **`params`** + * map, instead mapping the param name to a full parameter configuration + * object, simply set map it to the default parameter value, e.g.: + * + *
    // define a parameter's default value
    +   * params: {
    +   *     param1: { value: "defaultValue" }
    +   * }
    +   * // shorthand default values
    +   * params: {
    +   *     param1: "defaultValue",
    +   *     param2: "param2Default"
    +   * }
    + * + * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be + * treated as an array of values. If you specified a Type, the value will be + * treated as an array of the specified Type. Note: query parameter values + * default to a special `"auto"` mode. + * + * For query parameters in `"auto"` mode, if multiple values for a single parameter + * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values + * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if + * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single + * value (e.g.: `{ foo: '1' }`). + * + *
    params: {
    +   *     param1: { array: true }
    +   * }
    + * + * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when + * the current parameter value is the same as the default value. If `squash` is not set, it uses the + * configured default squash policy. + * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) + * + * There are three squash settings: + * + * - false: The parameter's default value is not squashed. It is encoded and included in the URL + * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed + * by slashes in the state's `url` declaration, then one of those slashes are omitted. + * This can allow for cleaner looking URLs. + * - `""`: The parameter's default value is replaced with an arbitrary placeholder of your choice. + * + *
    params: {
    +   *     param1: {
    +   *       value: "defaultId",
    +   *       squash: true
    +   * } }
    +   * // squash "defaultValue" to "~"
    +   * params: {
    +   *     param1: {
    +   *       value: "defaultValue",
    +   *       squash: "~"
    +   * } }
    +   * 
    + * + * + * @example + *
    +   * // Some state name examples
    +   *
    +   * // stateName can be a single top-level name (must be unique).
    +   * $stateProvider.state("home", {});
    +   *
    +   * // Or it can be a nested state name. This state is a child of the
    +   * // above "home" state.
    +   * $stateProvider.state("home.newest", {});
    +   *
    +   * // Nest states as deeply as needed.
    +   * $stateProvider.state("home.newest.abc.xyz.inception", {});
    +   *
    +   * // state() returns $stateProvider, so you can chain state declarations.
    +   * $stateProvider
    +   *   .state("home", {})
    +   *   .state("about", {})
    +   *   .state("contacts", {});
    +   * 
    + * + */ + this.state = state; + function state(name, definition) { + /*jshint validthis: true */ + if (isObject(name)) definition = name; + else definition.name = name; + registerState(definition); + return this; + } + + /** + * @ngdoc object + * @name ui.router.state.$state + * + * @requires $rootScope + * @requires $q + * @requires ui.router.state.$view + * @requires $injector + * @requires ui.router.util.$resolve + * @requires ui.router.state.$stateParams + * @requires ui.router.router.$urlRouter + * + * @property {object} params A param object, e.g. {sectionId: section.id)}, that + * you'd like to test against the current active state. + * @property {object} current A reference to the state's config object. However + * you passed it in. Useful for accessing custom data. + * @property {object} transition Currently pending transition. A promise that'll + * resolve or reject. + * + * @description + * `$state` service is responsible for representing states as well as transitioning + * between them. It also provides interfaces to ask for current state or even states + * you're coming from. + */ + this.$get = $get; + $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; + function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { + + var TransitionSuperseded = $q.reject(new Error('transition superseded')); + var TransitionPrevented = $q.reject(new Error('transition prevented')); + var TransitionAborted = $q.reject(new Error('transition aborted')); + var TransitionFailed = $q.reject(new Error('transition failed')); + + // Handles the case where a state which is the target of a transition is not found, and the user + // can optionally retry or defer the transition + function handleRedirect(redirect, state, params, options) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateNotFound + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when a requested state **cannot be found** using the provided state name during transition. + * The event is broadcast allowing any handlers a single chance to deal with the error (usually by + * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, + * you can see its three properties in the example. You can use `event.preventDefault()` to abort the + * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. + * + * @param {Object} event Event object. + * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. + * @param {State} fromState Current state object. + * @param {Object} fromParams Current state params. + * + * @example + * + *
    +       * // somewhere, assume lazy.state has not been defined
    +       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
    +       *
    +       * // somewhere else
    +       * $scope.$on('$stateNotFound',
    +       * function(event, unfoundState, fromState, fromParams){
    +       *     console.log(unfoundState.to); // "lazy.state"
    +       *     console.log(unfoundState.toParams); // {a:1, b:2}
    +       *     console.log(unfoundState.options); // {inherit:false} + default options
    +       * })
    +       * 
    + */ + var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); + + if (evt.defaultPrevented) { + $urlRouter.update(); + return TransitionAborted; + } + + if (!evt.retry) { + return null; + } + + // Allow the handler to return a promise to defer state lookup retry + if (options.$retry) { + $urlRouter.update(); + return TransitionFailed; + } + var retryTransition = $state.transition = $q.when(evt.retry); + + retryTransition.then(function() { + if (retryTransition !== $state.transition) return TransitionSuperseded; + redirect.options.$retry = true; + return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); + }, function() { + return TransitionAborted; + }); + $urlRouter.update(); + + return retryTransition; + } + + root.locals = { resolve: null, globals: { $stateParams: {} } }; + + $state = { + params: {}, + current: root.self, + $current: root, + transition: null + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#reload + * @methodOf ui.router.state.$state + * + * @description + * A method that force reloads the current state. All resolves are re-resolved, + * controllers reinstantiated, and events re-fired. + * + * @example + *
    +     * var app angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.reload = function(){
    +     *     $state.reload();
    +     *   }
    +     * });
    +     * 
    + * + * `reload()` is just an alias for: + *
    +     * $state.transitionTo($state.current, $stateParams, { 
    +     *   reload: true, inherit: false, notify: true
    +     * });
    +     * 
    + * + * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved. + * @example + *
    +     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' 
    +     * //and current state is 'contacts.detail.item'
    +     * var app angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.reload = function(){
    +     *     //will reload 'contact.detail' and 'contact.detail.item' states
    +     *     $state.reload('contact.detail');
    +     *   }
    +     * });
    +     * 
    + * + * `reload()` is just an alias for: + *
    +     * $state.transitionTo($state.current, $stateParams, { 
    +     *   reload: true, inherit: false, notify: true
    +     * });
    +     * 
    + + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.reload = function reload(state) { + return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true}); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#go + * @methodOf ui.router.state.$state + * + * @description + * Convenience method for transitioning to a new state. `$state.go` calls + * `$state.transitionTo` internally but automatically sets options to + * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. + * This allows you to easily use an absolute or relative to path and specify + * only the parameters you'd like to update (while letting unspecified parameters + * inherit from the currently active ancestor states). + * + * @example + *
    +     * var app = angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.changeState = function () {
    +     *     $state.go('contact.detail');
    +     *   };
    +     * });
    +     * 
    + * + * + * @param {string} to Absolute state name or relative state path. Some examples: + * + * - `$state.go('contact.detail')` - will go to the `contact.detail` state + * - `$state.go('^')` - will go to a parent state + * - `$state.go('^.sibling')` - will go to a sibling state + * - `$state.go('.child.grandchild')` - will go to grandchild state + * + * @param {object=} params A map of the parameters that will be sent to the state, + * will populate $stateParams. Any parameters that are not specified will be inherited from currently + * defined parameters. This allows, for example, going to a sibling state that shares parameters + * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. + * transitioning to a sibling will get you the parameters for all parents, transitioning to a child + * will get you all current parameters, etc. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * + * @returns {promise} A promise representing the state of the new transition. + * + * Possible success values: + * + * - $state.current + * + *
    Possible rejection values: + * + * - 'transition superseded' - when a newer transition has been started after this one + * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener + * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or + * when a `$stateNotFound` `event.retry` promise errors. + * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. + * - *resolve error* - when an error has occurred with a `resolve` + * + */ + $state.go = function go(to, params, options) { + return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#transitionTo + * @methodOf ui.router.state.$state + * + * @description + * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} + * uses `transitionTo` internally. `$state.go` is recommended in most situations. + * + * @example + *
    +     * var app = angular.module('app', ['ui.router']);
    +     *
    +     * app.controller('ctrl', function ($scope, $state) {
    +     *   $scope.changeState = function () {
    +     *     $state.transitionTo('contact.detail');
    +     *   };
    +     * });
    +     * 
    + * + * @param {string} to State name. + * @param {object=} toParams A map of the parameters that will be sent to the state, + * will populate $stateParams. + * @param {object=} options Options object. The options are: + * + * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` + * will not. If string, must be `"replace"`, which will update url and also replace last history record. + * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. + * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params + * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd + * use this when you want to force a reload when *everything* is the same, including search params. + * if String, then will reload the state with the name given in reload, and any children. + * if Object, then a stateObj is expected, will reload the state found in stateObj, and any children. + * + * @returns {promise} A promise representing the state of the new transition. See + * {@link ui.router.state.$state#methods_go $state.go}. + */ + $state.transitionTo = function transitionTo(to, toParams, options) { + toParams = toParams || {}; + options = extend({ + location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false + }, options || {}); + + var from = $state.$current, fromParams = $state.params, fromPath = from.path; + var evt, toState = findState(to, options.relative); + + // Store the hash param for later (since it will be stripped out by various methods) + var hash = toParams['#']; + + if (!isDefined(toState)) { + var redirect = { to: to, toParams: toParams, options: options }; + var redirectResult = handleRedirect(redirect, from.self, fromParams, options); + + if (redirectResult) { + return redirectResult; + } + + // Always retry once if the $stateNotFound was not prevented + // (handles either redirect changed or state lazy-definition) + to = redirect.to; + toParams = redirect.toParams; + options = redirect.options; + toState = findState(to, options.relative); + + if (!isDefined(toState)) { + if (!options.relative) throw new Error("No such state '" + to + "'"); + throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); + } + } + if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); + if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); + if (!toState.params.$$validates(toParams)) return TransitionFailed; + + toParams = toState.params.$$values(toParams); + to = toState; + + var toPath = to.path; + + // Starting from the root of the path, keep all levels that haven't changed + var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; + + if (!options.reload) { + while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } else if (isString(options.reload) || isObject(options.reload)) { + if (isObject(options.reload) && !options.reload.name) { + throw new Error('Invalid reload state object'); + } + + var reloadState = options.reload === true ? fromPath[0] : findState(options.reload); + if (options.reload && !reloadState) { + throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'"); + } + + while (state && state === fromPath[keep] && state !== reloadState) { + locals = toLocals[keep] = state.locals; + keep++; + state = toPath[keep]; + } + } + + // If we're going to the same state and all locals are kept, we've got nothing to do. + // But clear 'transition', as we still want to cancel any other pending transitions. + // TODO: We may not want to bump 'transition' if we're called from a location change + // that we've initiated ourselves, because we might accidentally abort a legitimate + // transition initiated from code? + if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) { + if (hash) toParams['#'] = hash; + $state.params = toParams; + copy($state.params, $stateParams); + if (options.location && to.navigable && to.navigable.url) { + $urlRouter.push(to.navigable.url, toParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + $urlRouter.update(true); + } + $state.transition = null; + return $q.when($state.current); + } + + // Filter parameters before we pass them to event handlers etc. + toParams = filterByKeys(to.params.$$keys(), toParams || {}); + + // Broadcast start event and cancel the transition if requested + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeStart + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when the state transition **begins**. You can use `event.preventDefault()` + * to prevent the transition from happening and then the transition promise will be + * rejected with a `'transition prevented'` value. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * + * @example + * + *
    +         * $rootScope.$on('$stateChangeStart',
    +         * function(event, toState, toParams, fromState, fromParams){
    +         *     event.preventDefault();
    +         *     // transitionTo() promise will be rejected with
    +         *     // a 'transition prevented' error
    +         * })
    +         * 
    + */ + if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { + $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams); + $urlRouter.update(); + return TransitionPrevented; + } + } + + // Resolve locals for the remaining states, but don't update any global state just + // yet -- if anything fails to resolve the current state needs to remain untouched. + // We also set up an inheritance chain for the locals here. This allows the view directive + // to quickly look up the correct definition for each view in the current state. Even + // though we create the locals object itself outside resolveState(), it is initially + // empty and gets filled asynchronously. We need to keep track of the promise for the + // (fully resolved) current locals, and pass this down the chain. + var resolved = $q.when(locals); + + for (var l = keep; l < toPath.length; l++, state = toPath[l]) { + locals = toLocals[l] = inherit(locals); + resolved = resolveState(state, toParams, state === to, resolved, locals, options); + } + + // Once everything is resolved, we are ready to perform the actual transition + // and return a promise for the new state. We also keep track of what the + // current promise is, so that we can detect overlapping transitions and + // keep only the outcome of the last transition. + var transition = $state.transition = resolved.then(function () { + var l, entering, exiting; + + if ($state.transition !== transition) return TransitionSuperseded; + + // Exit 'from' states not kept + for (l = fromPath.length - 1; l >= keep; l--) { + exiting = fromPath[l]; + if (exiting.self.onExit) { + $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); + } + exiting.locals = null; + } + + // Enter 'to' states not kept + for (l = keep; l < toPath.length; l++) { + entering = toPath[l]; + entering.locals = toLocals[l]; + if (entering.self.onEnter) { + $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); + } + } + + // Re-add the saved hash before we start returning things + if (hash) toParams['#'] = hash; + + // Run it again, to catch any transitions in callbacks + if ($state.transition !== transition) return TransitionSuperseded; + + // Update globals in $state + $state.$current = to; + $state.current = to.self; + $state.params = toParams; + copy($state.params, $stateParams); + $state.transition = null; + + if (options.location && to.navigable) { + $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { + $$avoidResync: true, replace: options.location === 'replace' + }); + } + + if (options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeSuccess + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired once the state transition is **complete**. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + */ + $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); + } + $urlRouter.update(true); + + return $state.current; + }, function (error) { + if ($state.transition !== transition) return TransitionSuperseded; + + $state.transition = null; + /** + * @ngdoc event + * @name ui.router.state.$state#$stateChangeError + * @eventOf ui.router.state.$state + * @eventType broadcast on root scope + * @description + * Fired when an **error occurs** during transition. It's important to note that if you + * have any errors in your resolve functions (javascript errors, non-existent services, etc) + * they will not throw traditionally. You must listen for this $stateChangeError event to + * catch **ALL** errors. + * + * @param {Object} event Event object. + * @param {State} toState The state being transitioned to. + * @param {Object} toParams The params supplied to the `toState`. + * @param {State} fromState The current state, pre-transition. + * @param {Object} fromParams The params supplied to the `fromState`. + * @param {Error} error The resolve error object. + */ + evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); + + if (!evt.defaultPrevented) { + $urlRouter.update(); + } + + return $q.reject(error); + }); + + return transition; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#is + * @methodOf ui.router.state.$state + * + * @description + * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, + * but only checks for the full state name. If params is supplied then it will be + * tested for strict equality against the current active params object, so all params + * must match with none missing and no extras. + * + * @example + *
    +     * $state.$current.name = 'contacts.details.item';
    +     *
    +     * // absolute name
    +     * $state.is('contact.details.item'); // returns true
    +     * $state.is(contactDetailItemStateObject); // returns true
    +     *
    +     * // relative name (. and ^), typically from a template
    +     * // E.g. from the 'contacts.details' template
    +     * 
    Item
    + *
    + * + * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like + * to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will + * test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it is the state. + */ + $state.is = function is(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) { return undefined; } + if ($state.$current !== state) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#includes + * @methodOf ui.router.state.$state + * + * @description + * A method to determine if the current active state is equal to or is the child of the + * state stateName. If any params are passed then they will be tested for a match as well. + * Not all the parameters need to be passed, just the ones you'd like to test for equality. + * + * @example + * Partial and relative names + *
    +     * $state.$current.name = 'contacts.details.item';
    +     *
    +     * // Using partial names
    +     * $state.includes("contacts"); // returns true
    +     * $state.includes("contacts.details"); // returns true
    +     * $state.includes("contacts.details.item"); // returns true
    +     * $state.includes("contacts.list"); // returns false
    +     * $state.includes("about"); // returns false
    +     *
    +     * // Using relative names (. and ^), typically from a template
    +     * // E.g. from the 'contacts.details' template
    +     * 
    Item
    + *
    + * + * Basic globbing patterns + *
    +     * $state.$current.name = 'contacts.details.item.url';
    +     *
    +     * $state.includes("*.details.*.*"); // returns true
    +     * $state.includes("*.details.**"); // returns true
    +     * $state.includes("**.item.**"); // returns true
    +     * $state.includes("*.details.item.url"); // returns true
    +     * $state.includes("*.details.*.url"); // returns true
    +     * $state.includes("*.details.*"); // returns false
    +     * $state.includes("item.**"); // returns false
    +     * 
    + * + * @param {string} stateOrName A partial name, relative name, or glob pattern + * to be searched for within the current state name. + * @param {object=} params A param object, e.g. `{sectionId: section.id}`, + * that you'd like to test against the current active state. + * @param {object=} options An options object. The options are: + * + * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, + * .includes will test relative to `options.relative` state (or name). + * + * @returns {boolean} Returns true if it does include the state + */ + $state.includes = function includes(stateOrName, params, options) { + options = extend({ relative: $state.$current }, options || {}); + if (isString(stateOrName) && isGlob(stateOrName)) { + if (!doesStateMatchGlob(stateOrName)) { + return false; + } + stateOrName = $state.$current.name; + } + + var state = findState(stateOrName, options.relative); + if (!isDefined(state)) { return undefined; } + if (!isDefined($state.$current.includes[state.name])) { return false; } + return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; + }; + + + /** + * @ngdoc function + * @name ui.router.state.$state#href + * @methodOf ui.router.state.$state + * + * @description + * A url generation method that returns the compiled url for the given state populated with the given params. + * + * @example + *
    +     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
    +     * 
    + * + * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. + * @param {object=} params An object of parameter values to fill the state's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the + * first parameter, then the constructed href url will be built from the first navigable ancestor (aka + * ancestor with a valid url). + * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. + * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), + * defines which state to be relative from. + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} compiled state url + */ + $state.href = function href(stateOrName, params, options) { + options = extend({ + lossy: true, + inherit: true, + absolute: false, + relative: $state.$current + }, options || {}); + + var state = findState(stateOrName, options.relative); + + if (!isDefined(state)) return null; + if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); + + var nav = (state && options.lossy) ? state.navigable : state; + + if (!nav || nav.url === undefined || nav.url === null) { + return null; + } + return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), { + absolute: options.absolute + }); + }; + + /** + * @ngdoc function + * @name ui.router.state.$state#get + * @methodOf ui.router.state.$state + * + * @description + * Returns the state configuration object for any specific state or all states. + * + * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for + * the requested state. If not provided, returns an array of ALL state configs. + * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. + * @returns {Object|Array} State configuration object or array of all objects. + */ + $state.get = function (stateOrName, context) { + if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); + var state = findState(stateOrName, context || $state.$current); + return (state && state.self) ? state.self : null; + }; + + function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { + // Make a restricted $stateParams with only the parameters that apply to this state if + // necessary. In addition to being available to the controller and onEnter/onExit callbacks, + // we also need $stateParams to be available for any $injector calls we make during the + // dependency resolution process. + var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); + var locals = { $stateParams: $stateParams }; + + // Resolve 'global' dependencies for the state, i.e. those not specific to a view. + // We're also including $stateParams in this; that way the parameters are restricted + // to the set that should be visible to the state, and are independent of when we update + // the global $state and $stateParams values. + dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); + var promises = [dst.resolve.then(function (globals) { + dst.globals = globals; + })]; + if (inherited) promises.push(inherited); + + function resolveViews() { + var viewsPromises = []; + + // Resolve template and dependencies for all views. + forEach(state.views, function (view, name) { + var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); + injectables.$template = [ function () { + return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || ''; + }]; + + viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) { + // References to the controller (only instantiated at link time) + if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { + var injectLocals = angular.extend({}, injectables, dst.globals); + result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); + } else { + result.$$controller = view.controller; + } + // Provide access to the state itself for internal use + result.$$state = state; + result.$$controllerAs = view.controllerAs; + dst[name] = result; + })); + }); + + return $q.all(viewsPromises).then(function(){ + return dst.globals; + }); + } + + // Wait for all the promises and then return the activation object + return $q.all(promises).then(resolveViews).then(function (values) { + return dst; + }); + } + + return $state; + } + + function shouldSkipReload(to, toParams, from, fromParams, locals, options) { + // Return true if there are no differences in non-search (path/object) params, false if there are differences + function nonSearchParamsEqual(fromAndToState, fromParams, toParams) { + // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params. + function notSearchParam(key) { + return fromAndToState.params[key].location != "search"; + } + var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam); + var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys)); + var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams); + return nonQueryParamSet.$$equals(fromParams, toParams); + } + + // If reload was not explicitly requested + // and we're transitioning to the same state we're already in + // and the locals didn't change + // or they changed in a way that doesn't merit reloading + // (reloadOnParams:false, or reloadOnSearch.false and only search params changed) + // Then return true. + if (!options.reload && to === from && + (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) { + return true; + } + } +} + +angular.module('ui.router.state') + .value('$stateParams', {}) + .provider('$state', $StateProvider); diff --git a/awx/ui/client/lib/angular-ui-router/src/stateDirectives.js b/awx/ui/client/lib/angular-ui-router/src/stateDirectives.js new file mode 100644 index 0000000000..09991030c2 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/stateDirectives.js @@ -0,0 +1,285 @@ +function parseStateRef(ref, current) { + var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; + if (preparsed) ref = current + '(' + preparsed[1] + ')'; + parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); + if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); + return { state: parsed[1], paramExpr: parsed[3] || null }; +} + +function stateContext(el) { + var stateData = el.parent().inheritedData('$uiView'); + + if (stateData && stateData.state && stateData.state.name) { + return stateData.state; + } +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref + * + * @requires ui.router.state.$state + * @requires $timeout + * + * @restrict A + * + * @description + * A directive that binds a link (`` tag) to a state. If the state has an associated + * URL, the directive will automatically generate & update the `href` attribute via + * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking + * the link will trigger a state transition with optional parameters. + * + * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be + * handled natively by the browser. + * + * You can also use relative state paths within ui-sref, just like the relative + * paths passed to `$state.go()`. You just need to be aware that the path is relative + * to the state that the link lives in, in other words the state that loaded the + * template containing the link. + * + * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} + * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, + * and `reload`. + * + * @example + * Here's an example of how you'd use ui-sref and how it would compile. If you have the + * following template: + *
    + * Home | About | Next page
    + * 
    + * 
    + * 
    + * + * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): + *
    + * Home | About | Next page
    + * 
    + * 
      + *
    • + * Joe + *
    • + *
    • + * Alice + *
    • + *
    • + * Bob + *
    • + *
    + * + * Home + *
    + * + * @param {string} ui-sref 'stateName' can be any valid absolute or relative state + * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} + */ +$StateRefDirective.$inject = ['$state', '$timeout']; +function $StateRefDirective($state, $timeout) { + var allowedOptions = ['location', 'inherit', 'reload', 'absolute']; + + return { + restrict: 'A', + require: ['?^uiSrefActive', '?^uiSrefActiveEq'], + link: function(scope, element, attrs, uiSrefActive) { + var ref = parseStateRef(attrs.uiSref, $state.current.name); + var params = null, url = null, base = stateContext(element) || $state.$current; + // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. + var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? + 'xlink:href' : 'href'; + var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A"; + var isForm = element[0].nodeName === "FORM"; + var attr = isForm ? "action" : hrefKind, nav = true; + + var options = { relative: base, inherit: true }; + var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; + + angular.forEach(allowedOptions, function(option) { + if (option in optionsOverride) { + options[option] = optionsOverride[option]; + } + }); + + var update = function(newVal) { + if (newVal) params = angular.copy(newVal); + if (!nav) return; + + newHref = $state.href(ref.state, params, options); + + var activeDirective = uiSrefActive[1] || uiSrefActive[0]; + if (activeDirective) { + activeDirective.$$addStateInfo(ref.state, params); + } + if (newHref === null) { + nav = false; + return false; + } + attrs.$set(attr, newHref); + }; + + if (ref.paramExpr) { + scope.$watch(ref.paramExpr, function(newVal, oldVal) { + if (newVal !== params) update(newVal); + }, true); + params = angular.copy(scope.$eval(ref.paramExpr)); + } + update(); + + if (isForm) return; + + element.bind("click", function(e) { + var button = e.which || e.button; + if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { + // HACK: This is to allow ng-clicks to be processed before the transition is initiated: + var transition = $timeout(function() { + $state.go(ref.state, params, options); + }); + e.preventDefault(); + + // if the state has no URL, ignore one preventDefault from the directive. + var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; + e.preventDefault = function() { + if (ignorePreventDefaultCount-- <= 0) + $timeout.cancel(transition); + }; + } + }); + } + }; +} + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * A directive working alongside ui-sref to add classes to an element when the + * related ui-sref directive's state is active, and removing them when it is inactive. + * The primary use-case is to simplify the special appearance of navigation menus + * relying on `ui-sref`, by having the "active" state's menu button appear different, + * distinguishing it from the inactive menu items. + * + * ui-sref-active can live on the same element as ui-sref or on a parent element. The first + * ui-sref-active found at the same level or above the ui-sref will be used. + * + * Will activate when the ui-sref's target state or any child state is active. If you + * need to activate only when the ui-sref target state is active and *not* any of + * it's children, then you will use + * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} + * + * @example + * Given the following template: + *
    + * 
    + * 
    + * + * + * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", + * the resulting HTML will appear as (note the 'active' class): + *
    + * 
    + * 
    + * + * The class name is interpolated **once** during the directives link time (any further changes to the + * interpolated value are ignored). + * + * Multiple classes may be specified in a space-separated format: + *
    + * 
      + *
    • + * link + *
    • + *
    + *
    + */ + +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-sref-active-eq + * + * @requires ui.router.state.$state + * @requires ui.router.state.$stateParams + * @requires $interpolate + * + * @restrict A + * + * @description + * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate + * when the exact target state used in the `ui-sref` is active; no child states. + * + */ +$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; +function $StateRefActiveDirective($state, $stateParams, $interpolate) { + return { + restrict: "A", + controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { + var states = [], activeClass; + + // There probably isn't much point in $observing this + // uiSrefActive and uiSrefActiveEq share the same directive object with some + // slight difference in logic routing + activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); + + // Allow uiSref to communicate with uiSrefActive[Equals] + this.$$addStateInfo = function (newState, newParams) { + var state = $state.get(newState, stateContext($element)); + + states.push({ + state: state || { name: newState }, + params: newParams + }); + + update(); + }; + + $scope.$on('$stateChangeSuccess', update); + + // Update route state + function update() { + if (anyMatch()) { + $element.addClass(activeClass); + } else { + $element.removeClass(activeClass); + } + } + + function anyMatch() { + for (var i = 0; i < states.length; i++) { + if (isMatch(states[i].state, states[i].params)) { + return true; + } + } + return false; + } + + function isMatch(state, params) { + if (typeof $attrs.uiSrefActiveEq !== 'undefined') { + return $state.is(state.name, params); + } else { + return $state.includes(state.name, params); + } + } + }] + }; +} + +angular.module('ui.router.state') + .directive('uiSref', $StateRefDirective) + .directive('uiSrefActive', $StateRefActiveDirective) + .directive('uiSrefActiveEq', $StateRefActiveDirective); diff --git a/awx/ui/client/lib/angular-ui-router/src/stateFilters.js b/awx/ui/client/lib/angular-ui-router/src/stateFilters.js new file mode 100644 index 0000000000..e0a117580a --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/stateFilters.js @@ -0,0 +1,39 @@ +/** + * @ngdoc filter + * @name ui.router.state.filter:isState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. + */ +$IsStateFilter.$inject = ['$state']; +function $IsStateFilter($state) { + var isFilter = function (state) { + return $state.is(state); + }; + isFilter.$stateful = true; + return isFilter; +} + +/** + * @ngdoc filter + * @name ui.router.state.filter:includedByState + * + * @requires ui.router.state.$state + * + * @description + * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. + */ +$IncludedByStateFilter.$inject = ['$state']; +function $IncludedByStateFilter($state) { + var includesFilter = function (state) { + return $state.includes(state); + }; + includesFilter.$stateful = true; + return includesFilter; +} + +angular.module('ui.router.state') + .filter('isState', $IsStateFilter) + .filter('includedByState', $IncludedByStateFilter); diff --git a/awx/ui/client/lib/angular-ui-router/src/templateFactory.js b/awx/ui/client/lib/angular-ui-router/src/templateFactory.js new file mode 100644 index 0000000000..ca491a987c --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/templateFactory.js @@ -0,0 +1,110 @@ +/** + * @ngdoc object + * @name ui.router.util.$templateFactory + * + * @requires $http + * @requires $templateCache + * @requires $injector + * + * @description + * Service. Manages loading of templates. + */ +$TemplateFactory.$inject = ['$http', '$templateCache', '$injector']; +function $TemplateFactory( $http, $templateCache, $injector) { + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromConfig + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template from a configuration object. + * + * @param {object} config Configuration object for which to load a template. + * The following properties are search in the specified order, and the first one + * that is defined is used to create the template: + * + * @param {string|object} config.template html string template or function to + * load via {@link ui.router.util.$templateFactory#fromString fromString}. + * @param {string|object} config.templateUrl url to load or a function returning + * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}. + * @param {Function} config.templateProvider function to invoke via + * {@link ui.router.util.$templateFactory#fromProvider fromProvider}. + * @param {object} params Parameters to pass to the template function. + * @param {object} locals Locals to pass to `invoke` if the template is loaded + * via a `templateProvider`. Defaults to `{ params: params }`. + * + * @return {string|object} The template html as a string, or a promise for + * that string,or `null` if no template is configured. + */ + this.fromConfig = function (config, params, locals) { + return ( + isDefined(config.template) ? this.fromString(config.template, params) : + isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) : + isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) : + null + ); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromString + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template from a string or a function returning a string. + * + * @param {string|object} template html template as a string or function that + * returns an html template as a string. + * @param {object} params Parameters to pass to the template function. + * + * @return {string|object} The template html as a string, or a promise for that + * string. + */ + this.fromString = function (template, params) { + return isFunction(template) ? template(params) : template; + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromUrl + * @methodOf ui.router.util.$templateFactory + * + * @description + * Loads a template from the a URL via `$http` and `$templateCache`. + * + * @param {string|Function} url url of the template to load, or a function + * that returns a url. + * @param {Object} params Parameters to pass to the url function. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromUrl = function (url, params) { + if (isFunction(url)) url = url(params); + if (url == null) return null; + else return $http + .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) + .then(function(response) { return response.data; }); + }; + + /** + * @ngdoc function + * @name ui.router.util.$templateFactory#fromProvider + * @methodOf ui.router.util.$templateFactory + * + * @description + * Creates a template by invoking an injectable provider function. + * + * @param {Function} provider Function to invoke via `$injector.invoke` + * @param {Object} params Parameters for the template. + * @param {Object} locals Locals to pass to `invoke`. Defaults to + * `{ params: params }`. + * @return {string|Promise.} The template html as a string, or a promise + * for that string. + */ + this.fromProvider = function (provider, params, locals) { + return $injector.invoke(provider, null, locals || { params: params }); + }; +} + +angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); diff --git a/awx/ui/client/lib/angular-ui-router/src/urlMatcherFactory.js b/awx/ui/client/lib/angular-ui-router/src/urlMatcherFactory.js new file mode 100644 index 0000000000..bf116f0270 --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/urlMatcherFactory.js @@ -0,0 +1,1050 @@ +var $$UMFP; // reference to $UrlMatcherFactoryProvider + +/** + * @ngdoc object + * @name ui.router.util.type:UrlMatcher + * + * @description + * Matches URLs against patterns and extracts named parameters from the path or the search + * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list + * of search parameters. Multiple search parameter names are separated by '&'. Search parameters + * do not influence whether or not a URL is matched, but their values are passed through into + * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. + * + * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace + * syntax, which optionally allows a regular expression for the parameter to be specified: + * + * * `':'` name - colon placeholder + * * `'*'` name - catch-all placeholder + * * `'{' name '}'` - curly placeholder + * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the + * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. + * + * Parameter names may contain only word characters (latin letters, digits, and underscore) and + * must be unique within the pattern (across both path and search parameters). For colon + * placeholders or curly placeholders without an explicit regexp, a path parameter matches any + * number of characters other than '/'. For catch-all placeholders the path parameter matches + * any number of characters. + * + * Examples: + * + * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for + * trailing slashes, and patterns have to match the entire path, not just a prefix. + * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or + * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. + * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. + * * `'/user/{id:[^/]*}'` - Same as the previous example. + * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id + * parameter consists of 1 to 8 hex digits. + * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the + * path into the parameter 'path'. + * * `'/files/*path'` - ditto. + * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined + * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start + * + * @param {string} pattern The pattern to compile into a matcher. + * @param {Object} config A configuration object hash: + * @param {Object=} parentMatcher Used to concatenate the pattern/config onto + * an existing UrlMatcher + * + * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. + * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. + * + * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any + * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns + * non-null) will start with this prefix. + * + * @property {string} source The pattern that was passed into the constructor + * + * @property {string} sourcePath The path portion of the source property + * + * @property {string} sourceSearch The search portion of the source property + * + * @property {string} regex The constructed regex that will be used to match against the url when + * it is time to determine which url will match. + * + * @returns {Object} New `UrlMatcher` object + */ +function UrlMatcher(pattern, config, parentMatcher) { + config = extend({ params: {} }, isObject(config) ? config : {}); + + // Find all placeholders and create a compiled pattern, using either classic or curly syntax: + // '*' name + // ':' name + // '{' name '}' + // '{' name ':' regexp '}' + // The regular expression is somewhat complicated due to the need to allow curly braces + // inside the regular expression. The placeholder regexp breaks down as follows: + // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) + // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case + // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either + // [^{}\\]+ - anything other than curly braces or backslash + // \\. - a backslash escape + // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms + var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, + compiled = '^', last = 0, m, + segments = this.segments = [], + parentParams = parentMatcher ? parentMatcher.params : {}, + params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), + paramNames = []; + + function addParameter(id, type, config, location) { + paramNames.push(id); + if (parentParams[id]) return parentParams[id]; + if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); + if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); + params[id] = new $$UMFP.Param(id, type, config, location); + return params[id]; + } + + function quoteRegExp(string, pattern, squash, optional) { + var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); + if (!pattern) return result; + switch(squash) { + case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break; + case true: surroundPattern = ['?(', ')?']; break; + default: surroundPattern = ['(' + squash + "|", ')?']; break; + } + return result + surroundPattern[0] + pattern + surroundPattern[1]; + } + + this.source = pattern; + + // Split into static segments separated by path parameter placeholders. + // The number of segments is always 1 more than the number of parameters. + function matchDetails(m, isSearch) { + var id, regexp, segment, type, cfg, arrayMode; + id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null + cfg = config.params[id]; + segment = pattern.substring(last, m.index); + regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); + type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) }); + return { + id: id, regexp: regexp, segment: segment, type: type, cfg: cfg + }; + } + + var p, param, segment; + while ((m = placeholder.exec(pattern))) { + p = matchDetails(m, false); + if (p.segment.indexOf('?') >= 0) break; // we're into the search part + + param = addParameter(p.id, p.type, p.cfg, "path"); + compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional); + segments.push(p.segment); + last = placeholder.lastIndex; + } + segment = pattern.substring(last); + + // Find any search parameter names and remove them from the last segment + var i = segment.indexOf('?'); + + if (i >= 0) { + var search = this.sourceSearch = segment.substring(i); + segment = segment.substring(0, i); + this.sourcePath = pattern.substring(0, last + i); + + if (search.length > 0) { + last = 0; + while ((m = searchPlaceholder.exec(search))) { + p = matchDetails(m, true); + param = addParameter(p.id, p.type, p.cfg, "search"); + last = placeholder.lastIndex; + // check if ?& + } + } + } else { + this.sourcePath = pattern; + this.sourceSearch = ''; + } + + compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; + segments.push(segment); + + this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); + this.prefix = segments[0]; + this.$$paramNames = paramNames; +} + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#concat + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns a new matcher for a pattern constructed by appending the path part and adding the + * search parameters of the specified pattern to this pattern. The current pattern is not + * modified. This can be understood as creating a pattern for URLs that are relative to (or + * suffixes of) the current pattern. + * + * @example + * The following two matchers are equivalent: + *
    + * new UrlMatcher('/user/{id}?q').concat('/details?date');
    + * new UrlMatcher('/user/{id}/details?q&date');
    + * 
    + * + * @param {string} pattern The pattern to append. + * @param {Object} config An object hash of the configuration for the matcher. + * @returns {UrlMatcher} A matcher for the concatenated pattern. + */ +UrlMatcher.prototype.concat = function (pattern, config) { + // Because order of search parameters is irrelevant, we can add our own search + // parameters to the end of the new pattern. Parse the new pattern by itself + // and then join the bits together, but it's much easier to do this on a string level. + var defaultConfig = { + caseInsensitive: $$UMFP.caseInsensitive(), + strict: $$UMFP.strictMode(), + squash: $$UMFP.defaultSquashPolicy() + }; + return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); +}; + +UrlMatcher.prototype.toString = function () { + return this.source; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#exec + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Tests the specified path against this matcher, and returns an object containing the captured + * parameter values, or null if the path does not match. The returned object contains the values + * of any search parameters that are mentioned in the pattern, but their value may be null if + * they are not present in `searchParams`. This means that search parameters are always treated + * as optional. + * + * @example + *
    + * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
    + *   x: '1', q: 'hello'
    + * });
    + * // returns { id: 'bob', q: 'hello', r: null }
    + * 
    + * + * @param {string} path The URL path to match, e.g. `$location.path()`. + * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. + * @returns {Object} The captured parameter values. + */ +UrlMatcher.prototype.exec = function (path, searchParams) { + var m = this.regexp.exec(path); + if (!m) return null; + searchParams = searchParams || {}; + + var paramNames = this.parameters(), nTotal = paramNames.length, + nPath = this.segments.length - 1, + values = {}, i, j, cfg, paramName; + + if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); + + function decodePathArray(string) { + function reverseString(str) { return str.split("").reverse().join(""); } + function unquoteDashes(str) { return str.replace(/\\-/g, "-"); } + + var split = reverseString(string).split(/-(?!\\)/); + var allReversed = map(split, reverseString); + return map(allReversed, unquoteDashes).reverse(); + } + + for (i = 0; i < nPath; i++) { + paramName = paramNames[i]; + var param = this.params[paramName]; + var paramVal = m[i+1]; + // if the param value matches a pre-replace pair, replace the value before decoding. + for (j = 0; j < param.replace; j++) { + if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; + } + if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); + values[paramName] = param.value(paramVal); + } + for (/**/; i < nTotal; i++) { + paramName = paramNames[i]; + values[paramName] = this.params[paramName].value(searchParams[paramName]); + } + + return values; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#parameters + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Returns the names of all path and search parameters of this pattern in an unspecified order. + * + * @returns {Array.} An array of parameter names. Must be treated as read-only. If the + * pattern has no parameters, an empty array is returned. + */ +UrlMatcher.prototype.parameters = function (param) { + if (!isDefined(param)) return this.$$paramNames; + return this.params[param] || null; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#validate + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Checks an object hash of parameters to validate their correctness according to the parameter + * types of this `UrlMatcher`. + * + * @param {Object} params The object hash of parameters to validate. + * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. + */ +UrlMatcher.prototype.validates = function (params) { + return this.params.$$validates(params); +}; + +/** + * @ngdoc function + * @name ui.router.util.type:UrlMatcher#format + * @methodOf ui.router.util.type:UrlMatcher + * + * @description + * Creates a URL that matches this pattern by substituting the specified values + * for the path and search parameters. Null values for path parameters are + * treated as empty strings. + * + * @example + *
    + * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
    + * // returns '/user/bob?q=yes'
    + * 
    + * + * @param {Object} values the values to substitute for the parameters in this pattern. + * @returns {string} the formatted URL (path and optionally search part). + */ +UrlMatcher.prototype.format = function (values) { + values = values || {}; + var segments = this.segments, params = this.parameters(), paramset = this.params; + if (!this.validates(values)) return null; + + var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; + + function encodeDashes(str) { // Replace dashes with encoded "\-" + return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); + } + + for (i = 0; i < nTotal; i++) { + var isPathParam = i < nPath; + var name = params[i], param = paramset[name], value = param.value(values[name]); + var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); + var squash = isDefaultValue ? param.squash : false; + var encoded = param.type.encode(value); + + if (isPathParam) { + var nextSegment = segments[i + 1]; + if (squash === false) { + if (encoded != null) { + if (isArray(encoded)) { + result += map(encoded, encodeDashes).join("-"); + } else { + result += encodeURIComponent(encoded); + } + } + result += nextSegment; + } else if (squash === true) { + var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; + result += nextSegment.match(capture)[1]; + } else if (isString(squash)) { + result += squash + nextSegment; + } + } else { + if (encoded == null || (isDefaultValue && squash !== false)) continue; + if (!isArray(encoded)) encoded = [ encoded ]; + encoded = map(encoded, encodeURIComponent).join('&' + name + '='); + result += (search ? '&' : '?') + (name + '=' + encoded); + search = true; + } + } + + return result; +}; + +/** + * @ngdoc object + * @name ui.router.util.type:Type + * + * @description + * Implements an interface to define custom parameter types that can be decoded from and encoded to + * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} + * objects when matching or formatting URLs, or comparing or validating parameter values. + * + * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more + * information on registering custom types. + * + * @param {Object} config A configuration object which contains the custom type definition. The object's + * properties will override the default methods and/or pattern in `Type`'s public interface. + * @example + *
    + * {
    + *   decode: function(val) { return parseInt(val, 10); },
    + *   encode: function(val) { return val && val.toString(); },
    + *   equals: function(a, b) { return this.is(a) && a === b; },
    + *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
    + *   pattern: /\d+/
    + * }
    + * 
    + * + * @property {RegExp} pattern The regular expression pattern used to match values of this type when + * coming from a substring of a URL. + * + * @returns {Object} Returns a new `Type` object. + */ +function Type(config) { + extend(this, config); +} + +/** + * @ngdoc function + * @name ui.router.util.type:Type#is + * @methodOf ui.router.util.type:Type + * + * @description + * Detects whether a value is of a particular type. Accepts a native (decoded) value + * and determines whether it matches the current `Type` object. + * + * @param {*} val The value to check. + * @param {string} key Optional. If the type check is happening in the context of a specific + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the + * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. + * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. + */ +Type.prototype.is = function(val, key) { + return true; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#encode + * @methodOf ui.router.util.type:Type + * + * @description + * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the + * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it + * only needs to be a representation of `val` that has been coerced to a string. + * + * @param {*} val The value to encode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {string} Returns a string representation of `val` that can be encoded in a URL. + */ +Type.prototype.encode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#decode + * @methodOf ui.router.util.type:Type + * + * @description + * Converts a parameter value (from URL string or transition param) to a custom/native value. + * + * @param {string} val The URL parameter value to decode. + * @param {string} key The name of the parameter in which `val` is stored. Can be used for + * meta-programming of `Type` objects. + * @returns {*} Returns a custom representation of the URL parameter value. + */ +Type.prototype.decode = function(val, key) { + return val; +}; + +/** + * @ngdoc function + * @name ui.router.util.type:Type#equals + * @methodOf ui.router.util.type:Type + * + * @description + * Determines whether two decoded values are equivalent. + * + * @param {*} a A value to compare against. + * @param {*} b A value to compare against. + * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. + */ +Type.prototype.equals = function(a, b) { + return a == b; +}; + +Type.prototype.$subPattern = function() { + var sub = this.pattern.toString(); + return sub.substr(1, sub.length - 2); +}; + +Type.prototype.pattern = /.*/; + +Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; + +/** Given an encoded string, or a decoded object, returns a decoded object */ +Type.prototype.$normalize = function(val) { + return this.is(val) ? val : this.decode(val); +}; + +/* + * Wraps an existing custom Type as an array of Type, depending on 'mode'. + * e.g.: + * - urlmatcher pattern "/path?{queryParam[]:int}" + * - url: "/path?queryParam=1&queryParam=2 + * - $stateParams.queryParam will be [1, 2] + * if `mode` is "auto", then + * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 + * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] + */ +Type.prototype.$asArray = function(mode, isSearch) { + if (!mode) return this; + if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); + + function ArrayType(type, mode) { + function bindTo(type, callbackName) { + return function() { + return type[callbackName].apply(type, arguments); + }; + } + + // Wrap non-array value as array + function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } + // Unwrap array value for "auto" mode. Return undefined for empty array. + function arrayUnwrap(val) { + switch(val.length) { + case 0: return undefined; + case 1: return mode === "auto" ? val[0] : val; + default: return val; + } + } + function falsey(val) { return !val; } + + // Wraps type (.is/.encode/.decode) functions to operate on each value of an array + function arrayHandler(callback, allTruthyMode) { + return function handleArray(val) { + val = arrayWrap(val); + var result = map(val, callback); + if (allTruthyMode === true) + return filter(result, falsey).length === 0; + return arrayUnwrap(result); + }; + } + + // Wraps type (.equals) functions to operate on each value of an array + function arrayEqualsHandler(callback) { + return function handleArray(val1, val2) { + var left = arrayWrap(val1), right = arrayWrap(val2); + if (left.length !== right.length) return false; + for (var i = 0; i < left.length; i++) { + if (!callback(left[i], right[i])) return false; + } + return true; + }; + } + + this.encode = arrayHandler(bindTo(type, 'encode')); + this.decode = arrayHandler(bindTo(type, 'decode')); + this.is = arrayHandler(bindTo(type, 'is'), true); + this.equals = arrayEqualsHandler(bindTo(type, 'equals')); + this.pattern = type.pattern; + this.$normalize = arrayHandler(bindTo(type, '$normalize')); + this.name = type.name; + this.$arrayMode = mode; + } + + return new ArrayType(this, mode); +}; + + + +/** + * @ngdoc object + * @name ui.router.util.$urlMatcherFactory + * + * @description + * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory + * is also available to providers under the name `$urlMatcherFactoryProvider`. + */ +function $UrlMatcherFactory() { + $$UMFP = this; + + var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; + + function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } + function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } + + var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { + string: { + encode: valToString, + decode: valFromString, + // TODO: in 1.0, make string .is() return false if value is undefined/null by default. + // In 0.2.x, string params are optional by default for backwards compat + is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; }, + pattern: /[^/]*/ + }, + int: { + encode: valToString, + decode: function(val) { return parseInt(val, 10); }, + is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, + pattern: /\d+/ + }, + bool: { + encode: function(val) { return val ? 1 : 0; }, + decode: function(val) { return parseInt(val, 10) !== 0; }, + is: function(val) { return val === true || val === false; }, + pattern: /0|1/ + }, + date: { + encode: function (val) { + if (!this.is(val)) + return undefined; + return [ val.getFullYear(), + ('0' + (val.getMonth() + 1)).slice(-2), + ('0' + val.getDate()).slice(-2) + ].join("-"); + }, + decode: function (val) { + if (this.is(val)) return val; + var match = this.capture.exec(val); + return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; + }, + is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, + equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, + pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, + capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ + }, + json: { + encode: angular.toJson, + decode: angular.fromJson, + is: angular.isObject, + equals: angular.equals, + pattern: /[^/]*/ + }, + any: { // does not encode/decode + encode: angular.identity, + decode: angular.identity, + equals: angular.equals, + pattern: /.*/ + } + }; + + function getDefaultConfig() { + return { + strict: isStrictMode, + caseInsensitive: isCaseInsensitive + }; + } + + function isInjectable(value) { + return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + $UrlMatcherFactory.$$getDefaultValue = function(config) { + if (!isInjectable(config.value)) return config.value; + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + return injector.invoke(config.value); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#caseInsensitive + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URL matching should be case sensitive (the default behavior), or not. + * + * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; + * @returns {boolean} the current value of caseInsensitive + */ + this.caseInsensitive = function(value) { + if (isDefined(value)) + isCaseInsensitive = value; + return isCaseInsensitive; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#strictMode + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Defines whether URLs should match trailing slashes, or not (the default behavior). + * + * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. + * @returns {boolean} the current value of strictMode + */ + this.strictMode = function(value) { + if (isDefined(value)) + isStrictMode = value; + return isStrictMode; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Sets the default behavior when generating or matching URLs with default parameter values. + * + * @param {string} value A string that defines the default parameter URL squashing behavior. + * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL + * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the + * parameter is surrounded by slashes, squash (remove) one slash from the URL + * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) + * the parameter value from the URL and replace it with this string. + */ + this.defaultSquashPolicy = function(value) { + if (!isDefined(value)) return defaultSquashPolicy; + if (value !== true && value !== false && !isString(value)) + throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); + defaultSquashPolicy = value; + return value; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#compile + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. + * + * @param {string} pattern The URL pattern. + * @param {Object} config The config object hash. + * @returns {UrlMatcher} The UrlMatcher. + */ + this.compile = function (pattern, config) { + return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#isMatcher + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Returns true if the specified object is a `UrlMatcher`, or false otherwise. + * + * @param {Object} object The object to perform the type check against. + * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by + * implementing all the same methods. + */ + this.isMatcher = function (o) { + if (!isObject(o)) return false; + var result = true; + + forEach(UrlMatcher.prototype, function(val, name) { + if (isFunction(val)) { + result = result && (isDefined(o[name]) && isFunction(o[name])); + } + }); + return result; + }; + + /** + * @ngdoc function + * @name ui.router.util.$urlMatcherFactory#type + * @methodOf ui.router.util.$urlMatcherFactory + * + * @description + * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to + * generate URLs with typed parameters. + * + * @param {string} name The type name. + * @param {Object|Function} definition The type definition. See + * {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * @param {Object|Function} definitionFn (optional) A function that is injected before the app + * runtime starts. The result of this function is merged into the existing `definition`. + * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. + * + * @returns {Object} Returns `$urlMatcherFactoryProvider`. + * + * @example + * This is a simple example of a custom type that encodes and decodes items from an + * array, using the array index as the URL-encoded value: + * + *
    +   * var list = ['John', 'Paul', 'George', 'Ringo'];
    +   *
    +   * $urlMatcherFactoryProvider.type('listItem', {
    +   *   encode: function(item) {
    +   *     // Represent the list item in the URL using its corresponding index
    +   *     return list.indexOf(item);
    +   *   },
    +   *   decode: function(item) {
    +   *     // Look up the list item by index
    +   *     return list[parseInt(item, 10)];
    +   *   },
    +   *   is: function(item) {
    +   *     // Ensure the item is valid by checking to see that it appears
    +   *     // in the list
    +   *     return list.indexOf(item) > -1;
    +   *   }
    +   * });
    +   *
    +   * $stateProvider.state('list', {
    +   *   url: "/list/{item:listItem}",
    +   *   controller: function($scope, $stateParams) {
    +   *     console.log($stateParams.item);
    +   *   }
    +   * });
    +   *
    +   * // ...
    +   *
    +   * // Changes URL to '/list/3', logs "Ringo" to the console
    +   * $state.go('list', { item: "Ringo" });
    +   * 
    + * + * This is a more complex example of a type that relies on dependency injection to + * interact with services, and uses the parameter name from the URL to infer how to + * handle encoding and decoding parameter values: + * + *
    +   * // Defines a custom type that gets a value from a service,
    +   * // where each service gets different types of values from
    +   * // a backend API:
    +   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
    +   *
    +   *   // Matches up services to URL parameter names
    +   *   var services = {
    +   *     user: Users,
    +   *     post: Posts
    +   *   };
    +   *
    +   *   return {
    +   *     encode: function(object) {
    +   *       // Represent the object in the URL using its unique ID
    +   *       return object.id;
    +   *     },
    +   *     decode: function(value, key) {
    +   *       // Look up the object by ID, using the parameter
    +   *       // name (key) to call the correct service
    +   *       return services[key].findById(value);
    +   *     },
    +   *     is: function(object, key) {
    +   *       // Check that object is a valid dbObject
    +   *       return angular.isObject(object) && object.id && services[key];
    +   *     }
    +   *     equals: function(a, b) {
    +   *       // Check the equality of decoded objects by comparing
    +   *       // their unique IDs
    +   *       return a.id === b.id;
    +   *     }
    +   *   };
    +   * });
    +   *
    +   * // In a config() block, you can then attach URLs with
    +   * // type-annotated parameters:
    +   * $stateProvider.state('users', {
    +   *   url: "/users",
    +   *   // ...
    +   * }).state('users.item', {
    +   *   url: "/{user:dbObject}",
    +   *   controller: function($scope, $stateParams) {
    +   *     // $stateParams.user will now be an object returned from
    +   *     // the Users service
    +   *   },
    +   *   // ...
    +   * });
    +   * 
    + */ + this.type = function (name, definition, definitionFn) { + if (!isDefined(definition)) return $types[name]; + if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); + + $types[name] = new Type(extend({ name: name }, definition)); + if (definitionFn) { + typeQueue.push({ name: name, def: definitionFn }); + if (!enqueue) flushTypeQueue(); + } + return this; + }; + + // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s + function flushTypeQueue() { + while(typeQueue.length) { + var type = typeQueue.shift(); + if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); + angular.extend($types[type.name], injector.invoke(type.def)); + } + } + + // Register default types. Store them in the prototype of $types. + forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); + $types = inherit($types, {}); + + /* No need to document $get, since it returns this */ + this.$get = ['$injector', function ($injector) { + injector = $injector; + enqueue = false; + flushTypeQueue(); + + forEach(defaultTypes, function(type, name) { + if (!$types[name]) $types[name] = new Type(type); + }); + return this; + }]; + + this.Param = function Param(id, type, config, location) { + var self = this; + config = unwrapShorthand(config); + type = getType(config, type, location); + var arrayMode = getArrayMode(); + type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; + if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) + config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" + var isOptional = config.value !== undefined; + var squash = getSquashPolicy(config, isOptional); + var replace = getReplace(config, arrayMode, isOptional, squash); + + function unwrapShorthand(config) { + var keys = isObject(config) ? objectKeys(config) : []; + var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && + indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; + if (isShorthand) config = { value: config }; + config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; + return config; + } + + function getType(config, urlType, location) { + if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); + if (urlType) return urlType; + if (!config.type) return (location === "config" ? $types.any : $types.string); + return config.type instanceof Type ? config.type : new Type(config.type); + } + + // array config: param name (param[]) overrides default settings. explicit config overrides param name. + function getArrayMode() { + var arrayDefaults = { array: (location === "search" ? "auto" : false) }; + var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; + return extend(arrayDefaults, arrayParamNomenclature, config).array; + } + + /** + * returns false, true, or the squash value to indicate the "default parameter url squash policy". + */ + function getSquashPolicy(config, isOptional) { + var squash = config.squash; + if (!isOptional || squash === false) return false; + if (!isDefined(squash) || squash == null) return defaultSquashPolicy; + if (squash === true || isString(squash)) return squash; + throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); + } + + function getReplace(config, arrayMode, isOptional, squash) { + var replace, configuredKeys, defaultPolicy = [ + { from: "", to: (isOptional || arrayMode ? undefined : "") }, + { from: null, to: (isOptional || arrayMode ? undefined : "") } + ]; + replace = isArray(config.replace) ? config.replace : []; + if (isString(squash)) + replace.push({ from: squash, to: undefined }); + configuredKeys = map(replace, function(item) { return item.from; } ); + return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); + } + + /** + * [Internal] Get the default value of a parameter, which may be an injectable function. + */ + function $$getDefaultValue() { + if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); + var defaultValue = injector.invoke(config.$$fn); + if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue)) + throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")"); + return defaultValue; + } + + /** + * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the + * default value, which may be the result of an injectable function. + */ + function $value(value) { + function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } + function $replace(value) { + var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); + return replacement.length ? replacement[0] : value; + } + value = $replace(value); + return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value); + } + + function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } + + extend(this, { + id: id, + type: type, + location: location, + array: arrayMode, + squash: squash, + replace: replace, + isOptional: isOptional, + value: $value, + dynamic: undefined, + config: config, + toString: toString + }); + }; + + function ParamSet(params) { + extend(this, params || {}); + } + + ParamSet.prototype = { + $$new: function() { + return inherit(this, extend(new ParamSet(), { $$parent: this})); + }, + $$keys: function () { + var keys = [], chain = [], parent = this, + ignore = objectKeys(ParamSet.prototype); + while (parent) { chain.push(parent); parent = parent.$$parent; } + chain.reverse(); + forEach(chain, function(paramset) { + forEach(objectKeys(paramset), function(key) { + if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); + }); + }); + return keys; + }, + $$values: function(paramValues) { + var values = {}, self = this; + forEach(self.$$keys(), function(key) { + values[key] = self[key].value(paramValues && paramValues[key]); + }); + return values; + }, + $$equals: function(paramValues1, paramValues2) { + var equal = true, self = this; + forEach(self.$$keys(), function(key) { + var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; + if (!self[key].type.equals(left, right)) equal = false; + }); + return equal; + }, + $$validates: function $$validate(paramValues) { + var keys = this.$$keys(), i, param, rawVal, normalized, encoded; + for (i = 0; i < keys.length; i++) { + param = this[keys[i]]; + rawVal = paramValues[keys[i]]; + if ((rawVal === undefined || rawVal === null) && param.isOptional) + break; // There was no parameter value, but the param is optional + normalized = param.type.$normalize(rawVal); + if (!param.type.is(normalized)) + return false; // The value was not of the correct Type, and could not be decoded to the correct Type + encoded = param.type.encode(normalized); + if (angular.isString(encoded) && !param.type.pattern.exec(encoded)) + return false; // The value was of the correct type, but when encoded, did not match the Type's regexp + } + return true; + }, + $$parent: undefined + }; + + this.ParamSet = ParamSet; +} + +// Register as a provider so it's available to other providers +angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); +angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); diff --git a/awx/ui/client/lib/angular-ui-router/src/urlRouter.js b/awx/ui/client/lib/angular-ui-router/src/urlRouter.js new file mode 100644 index 0000000000..33c17090fe --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/urlRouter.js @@ -0,0 +1,427 @@ +/** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider + * + * @requires ui.router.util.$urlMatcherFactoryProvider + * @requires $locationProvider + * + * @description + * `$urlRouterProvider` has the responsibility of watching `$location`. + * When `$location` changes it runs through a list of rules one by one until a + * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify + * a url in a state configuration. All urls are compiled into a UrlMatcher object. + * + * There are several methods on `$urlRouterProvider` that make it useful to use directly + * in your module config. + */ +$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; +function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { + var rules = [], otherwise = null, interceptDeferred = false, listener; + + // Returns a string that is a prefix of all strings matching the RegExp + function regExpPrefix(re) { + var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); + return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; + } + + // Interpolates matched values into a String.replace()-style pattern + function interpolate(pattern, match) { + return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { + return match[what === '$' ? 0 : Number(what)]; + }); + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#rule + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines rules that are used by `$urlRouterProvider` to find matches for + * specific URLs. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   // Here's an example of how you might allow case insensitive urls
    +   *   $urlRouterProvider.rule(function ($injector, $location) {
    +   *     var path = $location.path(),
    +   *         normalized = path.toLowerCase();
    +   *
    +   *     if (path !== normalized) {
    +   *       return normalized;
    +   *     }
    +   *   });
    +   * });
    +   * 
    + * + * @param {object} rule Handler function that takes `$injector` and `$location` + * services as arguments. You can use them to return a valid path as a string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.rule = function (rule) { + if (!isFunction(rule)) throw new Error("'rule' must be a function"); + rules.push(rule); + return this; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider#otherwise + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines a path that is used when an invalid route is requested. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   // if the path doesn't match any of the urls you configured
    +   *   // otherwise will take care of routing the user to the
    +   *   // specified url
    +   *   $urlRouterProvider.otherwise('/index');
    +   *
    +   *   // Example of using function rule as param
    +   *   $urlRouterProvider.otherwise(function ($injector, $location) {
    +   *     return '/a/valid/url';
    +   *   });
    +   * });
    +   * 
    + * + * @param {string|object} rule The url path you want to redirect to or a function + * rule that returns the url path. The function version is passed two params: + * `$injector` and `$location` services, and must return a url string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.otherwise = function (rule) { + if (isString(rule)) { + var redirect = rule; + rule = function () { return redirect; }; + } + else if (!isFunction(rule)) throw new Error("'rule' must be a function"); + otherwise = rule; + return this; + }; + + + function handleIfMatch($injector, handler, match) { + if (!match) return false; + var result = $injector.invoke(handler, handler, { $match: match }); + return isDefined(result) ? result : true; + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#when + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Registers a handler for a given url matching. if handle is a string, it is + * treated as a redirect, and is interpolated according to the syntax of match + * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). + * + * If the handler is a function, it is injectable. It gets invoked if `$location` + * matches. You have the option of inject the match object as `$match`. + * + * The handler can return + * + * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` + * will continue trying to find another one that matches. + * - **string** which is treated as a redirect and passed to `$location.url()` + * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
    +   *     if ($state.$current.navigable !== state ||
    +   *         !equalForKeys($match, $stateParams) {
    +   *      $state.transitionTo(state, $match, false);
    +   *     }
    +   *   });
    +   * });
    +   * 
    + * + * @param {string|object} what The incoming path that you want to redirect. + * @param {string|object} handler The path you want to redirect your user to. + */ + this.when = function (what, handler) { + var redirect, handlerIsString = isString(handler); + if (isString(what)) what = $urlMatcherFactory.compile(what); + + if (!handlerIsString && !isFunction(handler) && !isArray(handler)) + throw new Error("invalid 'handler' in when()"); + + var strategies = { + matcher: function (what, handler) { + if (handlerIsString) { + redirect = $urlMatcherFactory.compile(handler); + handler = ['$match', function ($match) { return redirect.format($match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); + }, { + prefix: isString(what.prefix) ? what.prefix : '' + }); + }, + regex: function (what, handler) { + if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); + + if (handlerIsString) { + redirect = handler; + handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path())); + }, { + prefix: regExpPrefix(what) + }); + } + }; + + var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; + + for (var n in check) { + if (check[n]) return this.rule(strategies[n](what, handler)); + } + + throw new Error("invalid 'what' in when()"); + }; + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#deferIntercept + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Disables (or enables) deferring location change interception. + * + * If you wish to customize the behavior of syncing the URL (for example, if you wish to + * defer a transition but maintain the current URL), call this method at configuration time. + * Then, at run time, call `$urlRouter.listen()` after you have configured your own + * `$locationChangeSuccess` event handler. + * + * @example + *
    +   * var app = angular.module('app', ['ui.router.router']);
    +   *
    +   * app.config(function ($urlRouterProvider) {
    +   *
    +   *   // Prevent $urlRouter from automatically intercepting URL changes;
    +   *   // this allows you to configure custom behavior in between
    +   *   // location changes and route synchronization:
    +   *   $urlRouterProvider.deferIntercept();
    +   *
    +   * }).run(function ($rootScope, $urlRouter, UserService) {
    +   *
    +   *   $rootScope.$on('$locationChangeSuccess', function(e) {
    +   *     // UserService is an example service for managing user state
    +   *     if (UserService.isLoggedIn()) return;
    +   *
    +   *     // Prevent $urlRouter's default handler from firing
    +   *     e.preventDefault();
    +   *
    +   *     UserService.handleLogin().then(function() {
    +   *       // Once the user has logged in, sync the current URL
    +   *       // to the router:
    +   *       $urlRouter.sync();
    +   *     });
    +   *   });
    +   *
    +   *   // Configures $urlRouter's listener *after* your custom listener
    +   *   $urlRouter.listen();
    +   * });
    +   * 
    + * + * @param {boolean} defer Indicates whether to defer location change interception. Passing + no parameter is equivalent to `true`. + */ + this.deferIntercept = function (defer) { + if (defer === undefined) defer = true; + interceptDeferred = defer; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouter + * + * @requires $location + * @requires $rootScope + * @requires $injector + * @requires $browser + * + * @description + * + */ + this.$get = $get; + $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; + function $get( $location, $rootScope, $injector, $browser) { + + var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; + + function appendBasePath(url, isHtml5, absolute) { + if (baseHref === '/') return url; + if (isHtml5) return baseHref.slice(0, -1) + url; + if (absolute) return baseHref.slice(1) + url; + return url; + } + + // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree + function update(evt) { + if (evt && evt.defaultPrevented) return; + var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; + lastPushedUrl = undefined; + // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573 + //if (ignoreUpdate) return true; + + function check(rule) { + var handled = rule($injector, $location); + + if (!handled) return false; + if (isString(handled)) $location.replace().url(handled); + return true; + } + var n = rules.length, i; + + for (i = 0; i < n; i++) { + if (check(rules[i])) return; + } + // always check otherwise last to allow dynamic updates to the set of rules + if (otherwise) check(otherwise); + } + + function listen() { + listener = listener || $rootScope.$on('$locationChangeSuccess', update); + return listener; + } + + if (!interceptDeferred) listen(); + + return { + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#sync + * @methodOf ui.router.router.$urlRouter + * + * @description + * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. + * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, + * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed + * with the transition by calling `$urlRouter.sync()`. + * + * @example + *
    +       * angular.module('app', ['ui.router'])
    +       *   .run(function($rootScope, $urlRouter) {
    +       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
    +       *       // Halt state change from even starting
    +       *       evt.preventDefault();
    +       *       // Perform custom logic
    +       *       var meetsRequirement = ...
    +       *       // Continue with the update and state transition if logic allows
    +       *       if (meetsRequirement) $urlRouter.sync();
    +       *     });
    +       * });
    +       * 
    + */ + sync: function() { + update(); + }, + + listen: function() { + return listen(); + }, + + update: function(read) { + if (read) { + location = $location.url(); + return; + } + if ($location.url() === location) return; + + $location.url(location); + $location.replace(); + }, + + push: function(urlMatcher, params, options) { + var url = urlMatcher.format(params || {}); + + // Handle the special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + $location.url(url); + lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; + if (options && options.replace) $location.replace(); + }, + + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#href + * @methodOf ui.router.router.$urlRouter + * + * @description + * A URL generation method that returns the compiled URL for a given + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. + * + * @example + *
    +       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
    +       *   person: "bob"
    +       * });
    +       * // $bob == "/about/bob";
    +       * 
    + * + * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. + * @param {object=} params An object of parameter values to fill the matcher's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` + */ + href: function(urlMatcher, params, options) { + if (!urlMatcher.validates(params)) return null; + + var isHtml5 = $locationProvider.html5Mode(); + if (angular.isObject(isHtml5)) { + isHtml5 = isHtml5.enabled; + } + + var url = urlMatcher.format(params); + options = options || {}; + + if (!isHtml5 && url !== null) { + url = "#" + $locationProvider.hashPrefix() + url; + } + + // Handle special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + url = appendBasePath(url, isHtml5, options.absolute); + + if (!options.absolute || !url) { + return url; + } + + var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); + port = (port === 80 || port === 443 ? '' : ':' + port); + + return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); + } + }; + } +} + +angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); diff --git a/awx/ui/client/lib/angular-ui-router/src/view.js b/awx/ui/client/lib/angular-ui-router/src/view.js new file mode 100644 index 0000000000..f19a3c569e --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/view.js @@ -0,0 +1,71 @@ + +$ViewProvider.$inject = []; +function $ViewProvider() { + + this.$get = $get; + /** + * @ngdoc object + * @name ui.router.state.$view + * + * @requires ui.router.util.$templateFactory + * @requires $rootScope + * + * @description + * + */ + $get.$inject = ['$rootScope', '$templateFactory']; + function $get( $rootScope, $templateFactory) { + return { + // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) + /** + * @ngdoc function + * @name ui.router.state.$view#load + * @methodOf ui.router.state.$view + * + * @description + * + * @param {string} name name + * @param {object} options option object. + */ + load: function load(name, options) { + var result, defaults = { + template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} + }; + options = extend(defaults, options); + + if (options.view) { + result = $templateFactory.fromConfig(options.view, options.params, options.locals); + } + if (result && options.notify) { + /** + * @ngdoc event + * @name ui.router.state.$state#$viewContentLoading + * @eventOf ui.router.state.$view + * @eventType broadcast on root scope + * @description + * + * Fired once the view **begins loading**, *before* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {Object} viewConfig The view config properties (template, controller, etc). + * + * @example + * + *
    +         * $scope.$on('$viewContentLoading',
    +         * function(event, viewConfig){
    +         *     // Access to all the view config properties.
    +         *     // and one special property 'targetView'
    +         *     // viewConfig.targetView
    +         * });
    +         * 
    + */ + $rootScope.$broadcast('$viewContentLoading', options); + } + return result; + } + }; + } +} + +angular.module('ui.router.state').provider('$view', $ViewProvider); diff --git a/awx/ui/client/lib/angular-ui-router/src/viewDirective.js b/awx/ui/client/lib/angular-ui-router/src/viewDirective.js new file mode 100644 index 0000000000..b70220779b --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/viewDirective.js @@ -0,0 +1,303 @@ +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-view + * + * @requires ui.router.state.$state + * @requires $compile + * @requires $controller + * @requires $injector + * @requires ui.router.state.$uiViewScroll + * @requires $document + * + * @restrict ECA + * + * @description + * The ui-view directive tells $state where to place your templates. + * + * @param {string=} name A view name. The name should be unique amongst the other views in the + * same state. You can have views of the same name that live in different states. + * + * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window + * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll + * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you + * scroll ui-view elements into view when they are populated during a state activation. + * + * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) + * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* + * + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @example + * A view can be unnamed or named. + *
    + * 
    + * 
    + * + * + *
    + *
    + * + * You can only have one unnamed view within any template (or root html). If you are only using a + * single view and it is unnamed then you can populate it like so: + *
    + * 
    + * $stateProvider.state("home", { + * template: "

    HELLO!

    " + * }) + *
    + * + * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} + * config property, by name, in this case an empty name: + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "": {
    + *       template: "

    HELLO!

    " + * } + * } + * }) + *
    + * + * But typically you'll only use the views property if you name your view or have more than one view + * in the same template. There's not really a compelling reason to name a view if its the only one, + * but you could if you wanted, like so: + *
    + * 
    + *
    + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "main": {
    + *       template: "

    HELLO!

    " + * } + * } + * }) + *
    + * + * Really though, you'll use views to set up multiple views: + *
    + * 
    + *
    + *
    + *
    + * + *
    + * $stateProvider.state("home", {
    + *   views: {
    + *     "": {
    + *       template: "

    HELLO!

    " + * }, + * "chart": { + * template: "" + * }, + * "data": { + * template: "" + * } + * } + * }) + *
    + * + * Examples for `autoscroll`: + * + *
    + * 
    + * 
    + *
    + * 
    + * 
    + * 
    + * 
    + * 
    + */ +$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; +function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { + + function getService() { + return ($injector.has) ? function(service) { + return $injector.has(service) ? $injector.get(service) : null; + } : function(service) { + try { + return $injector.get(service); + } catch (e) { + return null; + } + }; + } + + var service = getService(), + $animator = service('$animator'), + $animate = service('$animate'); + + // Returns a set of DOM manipulation functions based on which Angular version + // it should use + function getRenderer(attrs, scope) { + var statics = function() { + return { + enter: function (element, target, cb) { target.after(element); cb(); }, + leave: function (element, cb) { element.remove(); cb(); } + }; + }; + + if ($animate) { + return { + enter: function(element, target, cb) { + var promise = $animate.enter(element, null, target, cb); + if (promise && promise.then) promise.then(cb); + }, + leave: function(element, cb) { + var promise = $animate.leave(element, cb); + if (promise && promise.then) promise.then(cb); + } + }; + } + + if ($animator) { + var animate = $animator && $animator(scope, attrs); + + return { + enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, + leave: function(element, cb) { animate.leave(element); cb(); } + }; + } + + return statics(); + } + + var directive = { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + compile: function (tElement, tAttrs, $transclude) { + return function (scope, $element, attrs) { + var previousEl, currentEl, currentScope, latestLocals, + onloadExp = attrs.onload || '', + autoScrollExp = attrs.autoscroll, + renderer = getRenderer(attrs, scope); + + scope.$on('$stateChangeSuccess', function() { + updateView(false); + }); + scope.$on('$viewContentLoading', function() { + updateView(false); + }); + + updateView(true); + + function cleanupLastView() { + if (previousEl) { + previousEl.remove(); + previousEl = null; + } + + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + + if (currentEl) { + renderer.leave(currentEl, function() { + previousEl = null; + }); + + previousEl = currentEl; + currentEl = null; + } + } + + function updateView(firstTime) { + var newScope, + name = getUiViewName(scope, attrs, $element, $interpolate), + previousLocals = name && $state.$current && $state.$current.locals[name]; + + if (!firstTime && previousLocals === latestLocals) return; // nothing to do + newScope = scope.$new(); + latestLocals = $state.$current.locals[name]; + + var clone = $transclude(newScope, function(clone) { + renderer.enter(clone, $element, function onUiViewEnter() { + if(currentScope) { + currentScope.$emit('$viewContentAnimationEnded'); + } + + if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { + $uiViewScroll(clone); + } + }); + cleanupLastView(); + }); + + currentEl = clone; + currentScope = newScope; + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoaded + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description * + * Fired once the view is **loaded**, *after* the DOM is rendered. + * + * @param {Object} event Event object. + */ + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + } + }; + } + }; + + return directive; +} + +$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; +function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { + return { + restrict: 'ECA', + priority: -400, + compile: function (tElement) { + var initial = tElement.html(); + return function (scope, $element, attrs) { + var current = $state.$current, + name = getUiViewName(scope, attrs, $element, $interpolate), + locals = current && current.locals[name]; + + if (! locals) { + return; + } + + $element.data('$uiView', { name: name, state: locals.$$state }); + $element.html(locals.$template ? locals.$template : initial); + + var link = $compile($element.contents()); + + if (locals.$$controller) { + locals.$scope = scope; + locals.$element = $element; + var controller = $controller(locals.$$controller, locals); + if (locals.$$controllerAs) { + scope[locals.$$controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + }; + } + }; +} + +/** + * Shared ui-view code for both directives: + * Given scope, element, and its attributes, return the view's name + */ +function getUiViewName(scope, attrs, element, $interpolate) { + var name = $interpolate(attrs.uiView || attrs.name || '')(scope); + var inherited = element.inheritedData('$uiView'); + return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); +} + +angular.module('ui.router.state').directive('uiView', $ViewDirective); +angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); diff --git a/awx/ui/client/lib/angular-ui-router/src/viewScroll.js b/awx/ui/client/lib/angular-ui-router/src/viewScroll.js new file mode 100644 index 0000000000..81114e20de --- /dev/null +++ b/awx/ui/client/lib/angular-ui-router/src/viewScroll.js @@ -0,0 +1,52 @@ +/** + * @ngdoc object + * @name ui.router.state.$uiViewScrollProvider + * + * @description + * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. + */ +function $ViewScrollProvider() { + + var useAnchorScroll = false; + + /** + * @ngdoc function + * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll + * @methodOf ui.router.state.$uiViewScrollProvider + * + * @description + * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for + * scrolling based on the url anchor. + */ + this.useAnchorScroll = function () { + useAnchorScroll = true; + }; + + /** + * @ngdoc object + * @name ui.router.state.$uiViewScroll + * + * @requires $anchorScroll + * @requires $timeout + * + * @description + * When called with a jqLite element, it scrolls the element into view (after a + * `$timeout` so the DOM has time to refresh). + * + * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, + * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. + */ + this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { + if (useAnchorScroll) { + return $anchorScroll; + } + + return function ($element) { + return $timeout(function () { + $element[0].scrollIntoView(); + }, 0, false); + }; + }]; +} + +angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); diff --git a/awx/ui/client/lib/angular/.bower.json b/awx/ui/client/lib/angular/.bower.json index 3aafa83d22..e15139ef5d 100644 --- a/awx/ui/client/lib/angular/.bower.json +++ b/awx/ui/client/lib/angular/.bower.json @@ -1,17 +1,17 @@ { "name": "angular", - "version": "1.4.3", + "version": "1.4.7", "main": "./angular.js", "ignore": [], "dependencies": {}, "homepage": "https://github.com/angular/bower-angular", - "_release": "1.4.3", + "_release": "1.4.7", "_resolution": { "type": "version", - "tag": "v1.4.3", - "commit": "dbd689e8103a6366e53e1f6786727f7c65ccfd75" + "tag": "v1.4.7", + "commit": "6bdc6b4855b416bf029105324080ca7d6aca0e9f" }, - "_source": "git://github.com/angular/bower-angular.git", - "_target": "~1.4.3", + "_source": "https://github.com/angular/bower-angular.git", + "_target": "1.4.7", "_originalSource": "angular" } \ No newline at end of file diff --git a/awx/ui/client/lib/angular/angular.js b/awx/ui/client/lib/angular/angular.js index f7442c0b03..34a93c1c41 100644 --- a/awx/ui/client/lib/angular/angular.js +++ b/awx/ui/client/lib/angular/angular.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.4.3 + * @license AngularJS v1.4.7 * (c) 2010-2015 Google, Inc. http://angularjs.org * License: MIT */ @@ -57,7 +57,7 @@ function minErr(module, ErrorConstructor) { return match; }); - message += '\nhttp://errors.angularjs.org/1.4.3/' + + message += '\nhttp://errors.angularjs.org/1.4.7/' + (module ? module + '/' : '') + code; for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { @@ -423,6 +423,8 @@ function baseExtend(dst, objs, deep) { if (deep && isObject(src)) { if (isDate(src)) { dst[key] = new Date(src.valueOf()); + } else if (isRegExp(src)) { + dst[key] = new RegExp(src); } else { if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {}; baseExtend(dst[key], [src], true); @@ -892,6 +894,8 @@ function copy(source, destination, stackSource, stackDest) { } else if (isRegExp(source)) { destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); destination.lastIndex = source.lastIndex; + } else if (isFunction(source.cloneNode)) { + destination = source.cloneNode(true); } else { var emptyObject = Object.create(getPrototypeOf(source)); return copy(source, emptyObject, stackSource, stackDest); @@ -1042,7 +1046,7 @@ function equals(o1, o2) { for (key in o2) { if (!(key in keySet) && key.charAt(0) !== '$' && - o2[key] !== undefined && + isDefined(o2[key]) && !isFunction(o2[key])) return false; } return true; @@ -1053,22 +1057,39 @@ function equals(o1, o2) { } var csp = function() { - if (isDefined(csp.isActive_)) return csp.isActive_; + if (!isDefined(csp.rules)) { - var active = !!(document.querySelector('[ng-csp]') || - document.querySelector('[data-ng-csp]')); - if (!active) { + var ngCspElement = (document.querySelector('[ng-csp]') || + document.querySelector('[data-ng-csp]')); + + if (ngCspElement) { + var ngCspAttribute = ngCspElement.getAttribute('ng-csp') || + ngCspElement.getAttribute('data-ng-csp'); + csp.rules = { + noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1), + noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1) + }; + } else { + csp.rules = { + noUnsafeEval: noUnsafeEval(), + noInlineStyle: false + }; + } + } + + return csp.rules; + + function noUnsafeEval() { try { /* jshint -W031, -W054 */ new Function(''); /* jshint +W031, +W054 */ + return false; } catch (e) { - active = true; + return true; } } - - return (csp.isActive_ = active); }; /** @@ -1300,13 +1321,19 @@ function tryDecodeURIComponent(value) { * @returns {Object.} */ function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; + var obj = {}; forEach((keyValue || "").split('&'), function(keyValue) { + var splitPoint, key, val; if (keyValue) { - key_value = keyValue.replace(/\+/g,'%20').split('='); - key = tryDecodeURIComponent(key_value[0]); + key = keyValue = keyValue.replace(/\+/g,'%20'); + splitPoint = keyValue.indexOf('='); + if (splitPoint !== -1) { + key = keyValue.substring(0, splitPoint); + val = keyValue.substring(splitPoint + 1); + } + key = tryDecodeURIComponent(key); if (isDefined(key)) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + val = isDefined(val) ? tryDecodeURIComponent(val) : true; if (!hasOwnProperty.call(obj, key)) { obj[key] = val; } else if (isArray(obj[key])) { @@ -1715,10 +1742,9 @@ function bindJQuery() { // bind to jQuery if present; var jqName = jq(); - jQuery = window.jQuery; // use default jQuery. - if (isDefined(jqName)) { // `ngJq` present - jQuery = jqName === null ? undefined : window[jqName]; // if empty; use jqLite. if not empty, use jQuery specified by `ngJq`. - } + jQuery = isUndefined(jqName) ? window.jQuery : // use jQuery (if present) + !jqName ? undefined : // use jqLite + window[jqName]; // use jQuery specified by `ngJq` // Use jQuery if it exists with proper functionality, otherwise default to us. // Angular 1.2+ requires jQuery 1.7+ for on()/off() support. @@ -1823,22 +1849,24 @@ function getter(obj, path, bindFnToScope) { /** * Return the DOM siblings between the first and last node in the given array. * @param {Array} array like object - * @returns {jqLite} jqLite collection containing the nodes + * @returns {Array} the inputted object or a jqLite collection containing the nodes */ function getBlockNodes(nodes) { - // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original - // collection, otherwise update the original collection. + // TODO(perf): update `nodes` instead of creating a new object? var node = nodes[0]; var endNode = nodes[nodes.length - 1]; - var blockNodes = [node]; + var blockNodes; - do { - node = node.nextSibling; - if (!node) break; - blockNodes.push(node); - } while (node !== endNode); + for (var i = 1; node !== endNode && (node = node.nextSibling); i++) { + if (blockNodes || nodes[i] !== node) { + if (!blockNodes) { + blockNodes = jqLite(slice.call(nodes, 0, i)); + } + blockNodes.push(node); + } + } - return jqLite(blockNodes); + return blockNodes || nodes; } @@ -1902,8 +1930,8 @@ function setupModuleLoader(window) { * All modules (angular core or 3rd party) that should be available to an application must be * registered using this mechanism. * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. + * Passing one argument retrieves an existing {@link angular.Module}, + * whereas passing more than one argument creates a new {@link angular.Module} * * * # Module @@ -2222,7 +2250,7 @@ function serializeObject(obj) { val = toJsonReplacer(key, val); if (isObject(val)) { - if (seen.indexOf(val) >= 0) return '<>'; + if (seen.indexOf(val) >= 0) return '...'; seen.push(val); } @@ -2233,7 +2261,7 @@ function serializeObject(obj) { function toDebugString(obj) { if (typeof obj === 'function') { return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { + } else if (isUndefined(obj)) { return 'undefined'; } else if (typeof obj !== 'string') { return serializeObject(obj); @@ -2244,7 +2272,6 @@ function toDebugString(obj) { /* global angularModule: true, version: true, - $LocaleProvider, $CompileProvider, htmlAnchorDirective, @@ -2261,7 +2288,6 @@ function toDebugString(obj) { ngClassDirective, ngClassEvenDirective, ngClassOddDirective, - ngCspDirective, ngCloakDirective, ngControllerDirective, ngFormDirective, @@ -2298,6 +2324,7 @@ function toDebugString(obj) { $AnchorScrollProvider, $AnimateProvider, + $CoreAnimateCssProvider, $$CoreAnimateQueueProvider, $$CoreAnimateRunnerProvider, $BrowserProvider, @@ -2306,6 +2333,7 @@ function toDebugString(obj) { $DocumentProvider, $ExceptionHandlerProvider, $FilterProvider, + $$ForceReflowProvider, $InterpolateProvider, $IntervalProvider, $$HashMapProvider, @@ -2313,6 +2341,7 @@ function toDebugString(obj) { $HttpParamSerializerProvider, $HttpParamSerializerJQLikeProvider, $HttpBackendProvider, + $xhrFactoryProvider, $LocationProvider, $LogProvider, $ParseProvider, @@ -2339,8 +2368,9 @@ function toDebugString(obj) { * @name angular.version * @module ng * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: + * An object that contains information about the current AngularJS version. + * + * This object has the following properties: * * - `full` – `{string}` – Full version string, such as "0.9.18". * - `major` – `{number}` – Major version number, such as "0". @@ -2349,11 +2379,11 @@ function toDebugString(obj) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.4.3', // all of these placeholder strings will be replaced by grunt's + full: '1.4.7', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 4, - dot: 3, - codeName: 'foam-acceleration' + dot: 7, + codeName: 'dark-luminescence' }; @@ -2392,11 +2422,6 @@ function publishExternalAPI(angular) { }); angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } angularModule('ng', ['ngLocale'], ['$provide', function ngModule($provide) { @@ -2459,6 +2484,7 @@ function publishExternalAPI(angular) { $provide.provider({ $anchorScroll: $AnchorScrollProvider, $animate: $AnimateProvider, + $animateCss: $CoreAnimateCssProvider, $$animateQueue: $$CoreAnimateQueueProvider, $$AnimateRunner: $$CoreAnimateRunnerProvider, $browser: $BrowserProvider, @@ -2467,12 +2493,14 @@ function publishExternalAPI(angular) { $document: $DocumentProvider, $exceptionHandler: $ExceptionHandlerProvider, $filter: $FilterProvider, + $$forceReflow: $$ForceReflowProvider, $interpolate: $InterpolateProvider, $interval: $IntervalProvider, $http: $HttpProvider, $httpParamSerializer: $HttpParamSerializerProvider, $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider, $httpBackend: $HttpBackendProvider, + $xhrFactory: $xhrFactoryProvider, $location: $LocationProvider, $log: $LogProvider, $parse: $ParseProvider, @@ -2561,7 +2589,7 @@ function publishExternalAPI(angular) { * - [`html()`](http://api.jquery.com/html/) * - [`next()`](http://api.jquery.com/next/) - Does not support selectors * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors + * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors * - [`prepend()`](http://api.jquery.com/prepend/) @@ -2575,7 +2603,7 @@ function publishExternalAPI(angular) { * - [`text()`](http://api.jquery.com/text/) * - [`toggleClass()`](http://api.jquery.com/toggleClass/) * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces + * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter * - [`val()`](http://api.jquery.com/val/) * - [`wrap()`](http://api.jquery.com/wrap/) * @@ -2647,10 +2675,10 @@ function camelCase(name) { replace(MOZ_HACK_REGEXP, 'Moz$1'); } -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; +var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/; var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; +var TAG_NAME_REGEXP = /<([\w:-]+)/; +var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi; var wrapMap = { 'option': [1, ''], @@ -2946,7 +2974,7 @@ function jqLiteInheritedData(element, name, value) { while (element) { for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = jqLite.data(element, names[i])) !== undefined) return value; + if (isDefined(value = jqLite.data(element, names[i]))) return value; } // If dealing with a document fragment node with a host element, and no parent, use the host @@ -3052,9 +3080,8 @@ function getBooleanAttrName(element, name) { return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; } -function getAliasedAttrName(element, name) { - var nodeName = element.nodeName; - return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name]; +function getAliasedAttrName(name) { + return ALIASED_ATTR[name]; } forEach({ @@ -3191,7 +3218,7 @@ forEach({ // in a way that survives minification. // jqLiteEmpty takes no arguments but is a setter. if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { + (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) { if (isObject(arg1)) { // we are a write, but the object properties are the key/values @@ -3212,7 +3239,7 @@ forEach({ // TODO: do we still need this? var value = fn.$dv; // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; + var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount; for (var j = 0; j < jj; j++) { var nodeValue = fn(this[j], arg1, arg2); value = value ? value + nodeValue : nodeValue; @@ -3686,7 +3713,7 @@ var $$HashMapProvider = [function() { * Implicit module which gets automatically added to each {@link auto.$injector $injector}. */ -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; @@ -4342,6 +4369,7 @@ function createInjector(modulesToLoad, strictDi) { // Module Loading //////////////////////////////////// function loadModules(modulesToLoad) { + assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array'); var runBlocks = [], moduleFn; forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; @@ -4850,61 +4878,66 @@ var $$CoreAnimateQueueProvider = function() { } }; - function addRemoveClassesPostDigest(element, add, remove) { - var data = postDigestQueue.get(element); - var classVal; - if (!data) { - postDigestQueue.put(element, data = {}); - postDigestElements.push(element); - } - - if (add) { - forEach(add.split(' '), function(className) { + function updateData(data, classes, value) { + var changed = false; + if (classes) { + classes = isString(classes) ? classes.split(' ') : + isArray(classes) ? classes : []; + forEach(classes, function(className) { if (className) { - data[className] = true; + changed = true; + data[className] = value; } }); } + return changed; + } - if (remove) { - forEach(remove.split(' '), function(className) { - if (className) { - data[className] = false; - } - }); - } - - if (postDigestElements.length > 1) return; - - $rootScope.$$postDigest(function() { - forEach(postDigestElements, function(element) { - var data = postDigestQueue.get(element); - if (data) { - var existing = splitClasses(element.attr('class')); - var toAdd = ''; - var toRemove = ''; - forEach(data, function(status, className) { - var hasClass = !!existing[className]; - if (status !== hasClass) { - if (status) { - toAdd += (toAdd.length ? ' ' : '') + className; - } else { - toRemove += (toRemove.length ? ' ' : '') + className; - } + function handleCSSClassChanges() { + forEach(postDigestElements, function(element) { + var data = postDigestQueue.get(element); + if (data) { + var existing = splitClasses(element.attr('class')); + var toAdd = ''; + var toRemove = ''; + forEach(data, function(status, className) { + var hasClass = !!existing[className]; + if (status !== hasClass) { + if (status) { + toAdd += (toAdd.length ? ' ' : '') + className; + } else { + toRemove += (toRemove.length ? ' ' : '') + className; } - }); + } + }); - forEach(element, function(elm) { - toAdd && jqLiteAddClass(elm, toAdd); - toRemove && jqLiteRemoveClass(elm, toRemove); - }); - postDigestQueue.remove(element); - } - }); - - postDigestElements.length = 0; + forEach(element, function(elm) { + toAdd && jqLiteAddClass(elm, toAdd); + toRemove && jqLiteRemoveClass(elm, toRemove); + }); + postDigestQueue.remove(element); + } }); + postDigestElements.length = 0; + } + + + function addRemoveClassesPostDigest(element, add, remove) { + var data = postDigestQueue.get(element) || {}; + + var classesAdded = updateData(data, add, true); + var classesRemoved = updateData(data, remove, false); + + if (classesAdded || classesRemoved) { + + postDigestQueue.put(element, data); + postDigestElements.push(element); + + if (postDigestElements.length === 1) { + $rootScope.$$postDigest(handleCSSClassChanges); + } + } } }]; }; @@ -5334,15 +5367,95 @@ var $AnimateProvider = ['$provide', function($provide) { }]; }]; -function $$AsyncCallbackProvider() { - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); +/** + * @ngdoc service + * @name $animateCss + * @kind object + * + * @description + * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included, + * then the `$animateCss` service will actually perform animations. + * + * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}. + */ +var $CoreAnimateCssProvider = function() { + this.$get = ['$$rAF', '$q', function($$rAF, $q) { + + var RAFPromise = function() {}; + RAFPromise.prototype = { + done: function(cancel) { + this.defer && this.defer[cancel === true ? 'reject' : 'resolve'](); + }, + end: function() { + this.done(); + }, + cancel: function() { + this.done(true); + }, + getPromise: function() { + if (!this.defer) { + this.defer = $q.defer(); + } + return this.defer.promise; + }, + then: function(f1,f2) { + return this.getPromise().then(f1,f2); + }, + 'catch': function(f1) { + return this.getPromise()['catch'](f1); + }, + 'finally': function(f1) { + return this.getPromise()['finally'](f1); + } + }; + + return function(element, options) { + // there is no point in applying the styles since + // there is no animation that goes on at all in + // this version of $animateCss. + if (options.cleanupStyles) { + options.from = options.to = null; + } + + if (options.from) { + element.css(options.from); + options.from = null; + } + + var closed, runner = new RAFPromise(); + return { + start: run, + end: run }; + + function run() { + $$rAF(function() { + close(); + if (!closed) { + runner.done(); + } + closed = true; + }); + return runner; + } + + function close() { + if (options.addClass) { + element.addClass(options.addClass); + options.addClass = null; + } + if (options.removeClass) { + element.removeClass(options.removeClass); + options.removeClass = null; + } + if (options.to) { + element.css(options.to); + options.to = null; + } + } + }; }]; -} +}; /* global stripHash: true */ @@ -5432,7 +5545,7 @@ function Browser(window, document, $log, $sniffer) { var cachedState, lastHistoryState, lastBrowserUrl = location.href, baseElement = document.find('base'), - reloadLocation = null; + pendingLocation = null; cacheState(); lastHistoryState = cachedState; @@ -5492,8 +5605,8 @@ function Browser(window, document, $log, $sniffer) { // Do the assignment again so that those two variables are referentially identical. lastHistoryState = cachedState; } else { - if (!sameBase || reloadLocation) { - reloadLocation = url; + if (!sameBase || pendingLocation) { + pendingLocation = url; } if (replace) { location.replace(url); @@ -5502,14 +5615,18 @@ function Browser(window, document, $log, $sniffer) { } else { location.hash = getHash(url); } + if (location.href !== url) { + pendingLocation = url; + } } return self; // getter } else { - // - reloadLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened. + // - pendingLocation is needed as browsers don't allow to read out + // the new location.href if a reload happened or if there is a bug like in iOS 9 (see + // https://openradar.appspot.com/22186109). // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return reloadLocation || location.href.replace(/%27/g,"'"); + return pendingLocation || location.href.replace(/%27/g,"'"); } }; @@ -5531,6 +5648,7 @@ function Browser(window, document, $log, $sniffer) { urlChangeInit = false; function cacheStateAndFireUrlChange() { + pendingLocation = null; cacheState(); fireUrlChange(); } @@ -5766,10 +5884,10 @@ function $BrowserProvider() { $scope.keys = []; $scope.cache = $cacheFactory('cacheId'); $scope.put = function(key, value) { - if ($scope.cache.get(key) === undefined) { + if (angular.isUndefined($scope.cache.get(key))) { $scope.keys.push(key); } - $scope.cache.put(key, value === undefined ? null : value); + $scope.cache.put(key, angular.isUndefined(value) ? null : value); }; }]);
    @@ -6245,18 +6363,24 @@ function $TemplateCacheProvider() { * and other directives used in the directive's template will also be excluded from execution. * * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. + * The scope property can be `true`, an object or a falsy value: * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. + * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope. * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: + * * **`true`:** A new child scope that prototypically inherits from its parent will be created for + * the directive's element. If multiple directives on the same element request a new scope, + * only one new scope is created. The new scope rule does not apply for the root of the template + * since the root of the template always gets a new scope. + * + * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's element. The + * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent + * scope. This is useful when creating reusable components, which should not accidentally read or modify + * data in the parent scope. + * + * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the + * directive's element. These local properties are useful for aliasing values for templates. The keys in + * the object hash map to the name of the property on the isolate scope; the values define how the property + * is bound to the parent scope, via matching attributes on the directive's element: * * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is * always a string since DOM attributes are strings. If no `attr` name is specified then the @@ -6289,6 +6413,20 @@ function $TemplateCacheProvider() { * For example, if the expression is `increment(amount)` then we can specify the amount value * by calling the `localFn` as `localFn({amount: 22})`. * + * In general it's possible to apply more than one directive to one element, but there might be limitations + * depending on the type of scope required by the directives. The following points will help explain these limitations. + * For simplicity only two directives are taken into account, but it is also applicable for several directives: + * + * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope + * * **child scope** + **no scope** => Both directives will share one single child scope + * * **child scope** + **child scope** => Both directives will share one single child scope + * * **isolated scope** + **no scope** => The isolated directive will use it's own created isolated scope. The other directive will use + * its parent's scope + * * **isolated scope** + **child scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives cannot + * be applied to the same element. + * * **isolated scope** + **isolated scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives + * cannot be applied to the same element. + * * * #### `bindToController` * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will @@ -6297,7 +6435,7 @@ function $TemplateCacheProvider() { * * #### `controller` * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see + * pre-linking phase and can be accessed by other directives (see * `require` attribute). This allows the directives to communicate with each other and augment * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: * @@ -6337,9 +6475,10 @@ function $TemplateCacheProvider() { * * #### `controllerAs` * Identifier name for a reference to the controller in the directive's scope. - * This allows the controller to be referenced from the directive template. The directive - * needs to define a scope for this configuration to be used. Useful in the case when - * directive is used as component. + * This allows the controller to be referenced from the directive template. This is especially + * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible + * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the + * `controllerAs` reference might overwrite a property that already exists on the parent scope. * * * #### `restrict` @@ -6506,7 +6645,7 @@ function $TemplateCacheProvider() { * otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown. * * Note that you can also require the directive's own controller - it will be made available like - * like any other controller. + * any other controller. * * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. * This is the same as the `$transclude` @@ -6532,7 +6671,7 @@ function $TemplateCacheProvider() { * * ### Transclusion * - * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and + * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and * copying them to another part of the DOM, while maintaining their connection to the original AngularJS * scope from where they were taken. * @@ -7176,7 +7315,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { var node = this.$$element[0], booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(node, key), + aliasedKey = getAliasedAttrName(key), observer = key, nodeName; @@ -7243,7 +7382,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (writeAttr !== false) { - if (value === null || value === undefined) { + if (value === null || isUndefined(value)) { this.$$element.removeAttr(attrName); } else { this.$$element.attr(attrName, value); @@ -7287,7 +7426,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { listeners.push(fn); $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key)) { + if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) { // no one registered attribute interpolation function, so lets call it manually fn(attrs[key]); } @@ -8209,7 +8348,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { i = 0, ii = directives.length; i < ii; i++) { try { directive = directives[i]; - if ((maxPriority === undefined || maxPriority > directive.priority) && + if ((isUndefined(maxPriority) || maxPriority > directive.priority) && directive.restrict.indexOf(location) != -1) { if (startAttrName) { directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); @@ -8505,7 +8644,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { compile: function() { return { pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); + var $$observers = (attr.$$observers || (attr.$$observers = createMap())); if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { throw $compileMinErr('nodomevents', @@ -8666,24 +8805,19 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { lastValue, parentGet, parentSet, compare; - if (!hasOwnProperty.call(attrs, attrName)) { - // In the case of user defined a binding with the same name as a method in Object.prototype but didn't set - // the corresponding attribute. We need to make sure subsequent code won't access to the prototype function - attrs[attrName] = undefined; - } - switch (mode) { case '@': - if (!attrs[attrName] && !optional) { - destination[scopeName] = undefined; + if (!optional && !hasOwnProperty.call(attrs, attrName)) { + destination[scopeName] = attrs[attrName] = void 0; } - attrs.$observe(attrName, function(value) { - destination[scopeName] = value; + if (isString(value)) { + destination[scopeName] = value; + } }); attrs.$$observers[attrName].$$scope = scope; - if (attrs[attrName]) { + if (isString(attrs[attrName])) { // If the attribute has been provided then we trigger an interpolation to ensure // the value is there for use in the link fn destination[scopeName] = $interpolate(attrs[attrName])(scope); @@ -8691,11 +8825,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { break; case '=': - if (optional && !attrs[attrName]) { - return; + if (!hasOwnProperty.call(attrs, attrName)) { + if (optional) break; + attrs[attrName] = void 0; } - parentGet = $parse(attrs[attrName]); + if (optional && !attrs[attrName]) break; + parentGet = $parse(attrs[attrName]); if (parentGet.literal) { compare = equals; } else { @@ -8734,7 +8870,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { break; case '&': - parentGet = $parse(attrs[attrName]); + // Don't assign Object.prototype method to scope + parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop; // Don't assign noop to destination if expression is not valid if (parentGet === noop && optional) break; @@ -9111,6 +9248,29 @@ function $ExceptionHandlerProvider() { }]; } +var $$ForceReflowProvider = function() { + this.$get = ['$document', function($document) { + return function(domNode) { + //the line below will force the browser to perform a repaint so + //that all the animated elements within the animation frame will + //be properly updated and drawn on screen. This is required to + //ensure that the preparation animation is properly flushed so that + //the active state picks up from there. DO NOT REMOVE THIS LINE. + //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH + //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND + //WILL TAKE YEARS AWAY FROM YOUR LIFE. + if (domNode) { + if (!domNode.nodeType && domNode instanceof jqLite) { + domNode = domNode[0]; + } + } else { + domNode = $document[0].body; + } + return domNode.offsetWidth + 1; + }; + }]; +}; + var APPLICATION_JSON = 'application/json'; var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; var JSON_START = /^\[|^\{(?!\{)/; @@ -9119,6 +9279,12 @@ var JSON_ENDS = { '{': /}$/ }; var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/; +var $httpMinErr = minErr('$http'); +var $httpMinErrLegacyFn = function(method) { + return function() { + throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method); + }; +}; function serializeValue(v) { if (isObject(v)) { @@ -9219,8 +9385,8 @@ function $HttpParamSerializerJQLikeProvider() { function serialize(toSerialize, prefix, topLevel) { if (toSerialize === null || isUndefined(toSerialize)) return; if (isArray(toSerialize)) { - forEach(toSerialize, function(value) { - serialize(value, prefix + '[]'); + forEach(toSerialize, function(value, index) { + serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']'); }); } else if (isObject(toSerialize) && !isDate(toSerialize)) { forEachSorted(toSerialize, function(value, key) { @@ -9441,6 +9607,30 @@ function $HttpProvider() { return useApplyAsync; }; + var useLegacyPromise = true; + /** + * @ngdoc method + * @name $httpProvider#useLegacyPromiseExtensions + * @description + * + * Configure `$http` service to return promises without the shorthand methods `success` and `error`. + * This should be used to make sure that applications work without these methods. + * + * Defaults to false. If no value is specified, returns the current configured value. + * + * @param {boolean=} value If true, `$http` will return a normal promise without the `success` and `error` methods. + * + * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. + * otherwise, returns the current configured value. + **/ + this.useLegacyPromiseExtensions = function(value) { + if (isDefined(value)) { + useLegacyPromise = !!value; + return this; + } + return useLegacyPromise; + }; + /** * @ngdoc property * @name $httpProvider#interceptors @@ -9506,66 +9696,47 @@ function $HttpProvider() { * * * ## General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. + * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} — + * that is used to generate an HTTP request and returns a {@link ng.$q promise}. * * ```js - * // Simple GET request example : - * $http.get('/someUrl'). - * success(function(data, status, headers, config) { + * // Simple GET request example: + * $http({ + * method: 'GET', + * url: '/someUrl' + * }).then(function successCallback(response) { * // this callback will be called asynchronously * // when the response is available - * }). - * error(function(data, status, headers, config) { + * }, function errorCallback(response) { * // called asynchronously if an error occurs * // or server returns response with an error status. * }); * ``` * - * ```js - * // Simple POST request example (passing data) : - * $http.post('/someUrl', {msg:'hello word!'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` + * The response object has these properties: * - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. + * - **data** – `{string|Object}` – The response body transformed with the transform + * functions. + * - **status** – `{number}` – HTTP status code of the response. + * - **headers** – `{function([headerName])}` – Header getter function. + * - **config** – `{Object}` – The configuration object that was used to generate the request. + * - **statusText** – `{string}` – HTTP status text of the response. * * A response status code between 200 and 299 is considered a success status and * will result in the success callback being called. Note that if the response is a redirect, * XMLHttpRequest will transparently follow it, meaning that the error callback will not be * called for such responses. * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` * * ## Shortcut methods * * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. + * request data must be passed in for POST/PUT requests. An optional config can be passed as the + * last argument. * * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); + * $http.get('/someUrl', config).then(successCallback, errorCallback); + * $http.post('/someUrl', data, config).then(successCallback, errorCallback); * ``` * * Complete list of shortcut methods: @@ -9579,6 +9750,25 @@ function $HttpProvider() { * - {@link ng.$http#patch $http.patch} * * + * ## Writing Unit Tests that use $http + * When unit testing (using {@link ngMock ngMock}), it is necessary to call + * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending + * request using trained responses. + * + * ``` + * $httpBackend.expectGET(...); + * $http.get(...); + * $httpBackend.flush(); + * ``` + * + * ## Deprecation Notice + *
    + * The `$http` legacy promise methods `success` and `error` have been deprecated. + * Use the standard `then` method instead. + * If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to + * `false` then these methods will throw {@link $http:legacy `$http/legacy`} error. + *
    + * * ## Setting HTTP Headers * * The $http service will automatically add certain HTTP headers to all requests. These defaults @@ -9622,7 +9812,7 @@ function $HttpProvider() { * data: { test: 'test' } * } * - * $http(req).success(function(){...}).error(function(){...}); + * $http(req).then(function(){...}, function(){...}); * ``` * * ## Transforming Requests and Responses @@ -9728,7 +9918,7 @@ function $HttpProvider() { * * There are two kinds of interceptors (and two kinds of rejection interceptors): * - * * `request`: interceptors get called with a http `config` object. The function is free to + * * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to * modify the `config` object or create a new one. The function needs to return the `config` * object directly, or a promise containing the `config` or a new `config` object. * * `requestError`: interceptor gets called when a previous interceptor threw an error or @@ -9854,7 +10044,6 @@ function $HttpProvider() { * In order to prevent collisions in environments where multiple Angular apps share the * same domain or subdomain, we recommend that each application uses unique cookie name. * - * * @param {object} config Object describing the request to be made and how it should be * processed. The object has following properties: * @@ -9899,20 +10088,9 @@ function $HttpProvider() { * - **responseType** - `{string}` - see * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype). * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: + * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object + * when the request succeeds or fails. * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. * * @property {Array.} pendingRequests Array of config objects for currently pending * requests. This is primarily meant to be used for debugging purposes. @@ -9954,13 +10132,12 @@ function $HttpProvider() { $scope.response = null; $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; + then(function(response) { + $scope.status = response.status; + $scope.data = response.data; + }, function(response) { + $scope.data = response.data || "Request failed"; + $scope.status = response.status; }); }; @@ -10065,23 +10242,28 @@ function $HttpProvider() { promise = promise.then(thenFn, rejectFn); } - promise.success = function(fn) { - assertArgFn(fn, 'fn'); + if (useLegacyPromise) { + promise.success = function(fn) { + assertArgFn(fn, 'fn'); - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; + promise.then(function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; - promise.error = function(fn) { - assertArgFn(fn, 'fn'); + promise.error = function(fn) { + assertArgFn(fn, 'fn'); - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; + promise.then(null, function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + } else { + promise.success = $httpMinErrLegacyFn('success'); + promise.error = $httpMinErrLegacyFn('error'); + } return promise; @@ -10370,8 +10552,8 @@ function $HttpProvider() { * Resolves the raw $http promise. */ function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); + //status: HTTP response status code, 0, -1 (aborted by timeout / promise) + status = status >= -1 ? status : 0; (isSuccess(status) ? deferred.resolve : deferred.reject)({ data: response, @@ -10402,8 +10584,33 @@ function $HttpProvider() { }]; } -function createXhr() { - return new window.XMLHttpRequest(); +/** + * @ngdoc service + * @name $xhrFactory + * + * @description + * Factory function used to create XMLHttpRequest objects. + * + * Replace or decorate this service to create your own custom XMLHttpRequest objects. + * + * ``` + * angular.module('myApp', []) + * .factory('$xhrFactory', function() { + * return function createXhr(method, url) { + * return new window.XMLHttpRequest({mozSystem: true}); + * }; + * }); + * ``` + * + * @param {string} method HTTP method of the request (GET, POST, PUT, ..) + * @param {string} url URL of the request. + */ +function $xhrFactoryProvider() { + this.$get = function() { + return function createXhr() { + return new window.XMLHttpRequest(); + }; + }; } /** @@ -10411,6 +10618,7 @@ function createXhr() { * @name $httpBackend * @requires $window * @requires $document + * @requires $xhrFactory * * @description * HTTP backend used by the {@link ng.$http service} that delegates to @@ -10423,8 +10631,8 @@ function createXhr() { * $httpBackend} which can be trained with responses. */ function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); + this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) { + return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]); }]; } @@ -10448,7 +10656,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc }); } else { - var xhr = createXhr(); + var xhr = createXhr(method, url); xhr.open(method, url, true); forEach(headers, function(value, key) { @@ -10460,7 +10668,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc xhr.onload = function requestLoaded() { var statusText = xhr.statusText || ''; - // responseText is the old-school way of retrieving response (supported by IE8 & 9) + // responseText is the old-school way of retrieving response (supported by IE9) // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) var response = ('response' in xhr) ? xhr.response : xhr.responseText; @@ -10511,7 +10719,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc } } - xhr.send(post); + xhr.send(isUndefined(post) ? null : post); } if (timeout > 0) { @@ -10528,7 +10736,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc function completeRequest(callback, status, response, headersString, statusText) { // cancel timeout and subsequent timeout promise resolution - if (timeoutId !== undefined) { + if (isDefined(timeoutId)) { $browserDefer.cancel(timeoutId); } jsonpDone = xhr = null; @@ -10714,7 +10922,7 @@ function $InterpolateProvider() { * ```js * var $interpolate = ...; // injected * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); + * expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!'); * ``` * * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is @@ -11098,7 +11306,7 @@ function $IntervalProvider() { * @description * Cancels a task associated with the `promise`. * - * @param {promise} promise returned by the `$interval` function. + * @param {Promise=} promise returned by the `$interval` function. * @returns {boolean} Returns `true` if the task was successfully canceled. */ interval.cancel = function(promise) { @@ -11125,75 +11333,6 @@ function $IntervalProvider() { * * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) */ -function $LocaleProvider() { - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - 'short': 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a', - ERANAMES: [ - "Before Christ", - "Anno Domini" - ], - ERAS: [ - "BC", - "AD" - ] - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; @@ -11284,12 +11423,12 @@ function serverBase(url) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} basePrefix url path prefix */ -function LocationHtml5Url(appBase, basePrefix) { +function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) { this.$$html5 = true; basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); parseAbsoluteUrl(appBase, this); @@ -11336,14 +11475,14 @@ function LocationHtml5Url(appBase, basePrefix) { var appUrl, prevAppUrl; var rewrittenUrl; - if ((appUrl = beginsWith(appBase, url)) !== undefined) { + if (isDefined(appUrl = beginsWith(appBase, url))) { prevAppUrl = appUrl; - if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) { + if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) { rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); } else { rewrittenUrl = appBase + prevAppUrl; } - } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) { + } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) { rewrittenUrl = appBaseNoFile + appUrl; } else if (appBaseNoFile == url + '/') { rewrittenUrl = appBaseNoFile; @@ -11363,10 +11502,10 @@ function LocationHtml5Url(appBase, basePrefix) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} hashPrefix hashbang prefix */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); +function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) { parseAbsoluteUrl(appBase, this); @@ -11475,14 +11614,13 @@ function LocationHashbangUrl(appBase, hashPrefix) { * * @constructor * @param {string} appBase application base URL + * @param {string} appBaseNoFile application base URL stripped of any filename * @param {string} hashPrefix hashbang prefix */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { +function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) { this.$$html5 = true; LocationHashbangUrl.apply(this, arguments); - var appBaseNoFile = stripFile(appBase); - this.$$parseLinkUrl = function(url, relHref) { if (relHref && relHref[0] === '#') { // special case for links to hash fragments: @@ -11512,7 +11650,7 @@ function LocationHashbangInHtml5Url(appBase, hashPrefix) { hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#' + // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#' this.$$absUrl = appBase + hashPrefix + this.$$url; }; @@ -12021,7 +12159,9 @@ function $LocationProvider() { appBase = stripHash(initialUrl); LocationMode = LocationHashbangUrl; } - $location = new LocationMode(appBase, '#' + hashPrefix); + var appBaseNoFile = stripFile(appBase); + + $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix); $location.$$parseLinkUrl(initialUrl, initialUrl); $location.$$state = $browser.state(); @@ -12101,6 +12241,13 @@ function $LocationProvider() { // update $location when $browser url changes $browser.onUrlChange(function(newUrl, newState) { + + if (isUndefined(beginsWith(appBaseNoFile, newUrl))) { + // If we are navigating outside of the app then force a reload + $window.location.href = newUrl; + return; + } + $rootScope.$evalAsync(function() { var oldUrl = $location.absUrl(); var oldState = $location.$$state; @@ -12388,6 +12535,25 @@ function ensureSafeMemberName(name, fullExpression) { return name; } +function getStringValue(name, fullExpression) { + // From the JavaScript docs: + // Property names must be strings. This means that non-string objects cannot be used + // as keys in an object. Any non-string object, including a number, is typecasted + // into a string via the toString method. + // + // So, to ensure that we are checking the same `name` that JavaScript would use, + // we cast it to a string, if possible. + // Doing `name + ''` can cause a repl error if the result to `toString` is not a string, + // this is, this will handle objects that misbehave. + name = name + ''; + if (!isString(name)) { + throw $parseMinErr('iseccst', + 'Cannot convert object to primitive value! ' + + 'Expression: {0}', fullExpression); + } + return name; +} + function ensureSafeObject(obj, fullExpression) { // nifty check if obj is Function that is fast and works across iframes and other contexts if (obj) { @@ -12433,6 +12599,16 @@ function ensureSafeFunction(obj, fullExpression) { } } +function ensureSafeAssignContext(obj, fullExpression) { + if (obj) { + if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor || + obj === {}.constructor || obj === [].constructor || obj === Function.constructor) { + throw $parseMinErr('isecaf', + 'Assigning to a constructor is disallowed! Expression: {0}', fullExpression); + } + } +} + var OPERATORS = createMap(); forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; }); var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; @@ -13114,6 +13290,7 @@ ASTCompiler.prototype = { this.state.computing = 'assign'; var result = this.nextId(); this.recurse(assignable, result); + this.return_(result); extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l'); } var toWatch = getInputs(ast.body); @@ -13146,6 +13323,8 @@ ASTCompiler.prototype = { 'ensureSafeMemberName', 'ensureSafeObject', 'ensureSafeFunction', + 'getStringValue', + 'ensureSafeAssignContext', 'ifDefined', 'plus', 'text', @@ -13154,6 +13333,8 @@ ASTCompiler.prototype = { ensureSafeMemberName, ensureSafeObject, ensureSafeFunction, + getStringValue, + ensureSafeAssignContext, ifDefined, plusFn, expression); @@ -13297,6 +13478,7 @@ ASTCompiler.prototype = { if (ast.computed) { right = self.nextId(); self.recurse(ast.property, right); + self.getStringValue(right); self.addEnsureSafeMemberName(right); if (create && create !== 1) { self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}')); @@ -13380,6 +13562,7 @@ ASTCompiler.prototype = { self.if_(self.notNull(left.context), function() { self.recurse(ast.right, right); self.addEnsureSafeObject(self.member(left.context, left.name, left.computed)); + self.addEnsureSafeAssignContext(left.context); expression = self.member(left.context, left.name, left.computed) + ast.operator + right; self.assign(intoId, expression); recursionFn(intoId || expression); @@ -13505,6 +13688,10 @@ ASTCompiler.prototype = { this.current().body.push(this.ensureSafeFunction(item), ';'); }, + addEnsureSafeAssignContext: function(item) { + this.current().body.push(this.ensureSafeAssignContext(item), ';'); + }, + ensureSafeObject: function(item) { return 'ensureSafeObject(' + item + ',text)'; }, @@ -13517,6 +13704,14 @@ ASTCompiler.prototype = { return 'ensureSafeFunction(' + item + ',text)'; }, + getStringValue: function(item) { + this.assign(item, 'getStringValue(' + item + ',text)'); + }, + + ensureSafeAssignContext: function(item) { + return 'ensureSafeAssignContext(' + item + ',text)'; + }, + lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { var self = this; return function() { @@ -13694,6 +13889,7 @@ ASTInterpreter.prototype = { var lhs = left(scope, locals, assign, inputs); var rhs = right(scope, locals, assign, inputs); ensureSafeObject(lhs.value, self.expression); + ensureSafeAssignContext(lhs.context); lhs.context[lhs.name] = rhs; return context ? {value: rhs} : rhs; }; @@ -13891,6 +14087,7 @@ ASTInterpreter.prototype = { var value; if (lhs != null) { rhs = right(scope, locals, assign, inputs); + rhs = getStringValue(rhs); ensureSafeMemberName(rhs, expression); if (create && create !== 1 && lhs && !(lhs[rhs])) { lhs[rhs] = {}; @@ -13950,29 +14147,6 @@ Parser.prototype = { } }; -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, path, setValue, fullExp) { - ensureSafeObject(obj, fullExp); - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = ensureSafeObject(obj[key], fullExp); - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - } - key = ensureSafeMemberName(element.shift(), fullExp); - ensureSafeObject(obj[key], fullExp); - obj[key] = setValue; - return setValue; -} - var getterFnCacheDefault = createMap(); var getterFnCacheExpensive = createMap(); @@ -14041,13 +14215,14 @@ function $ParseProvider() { var cacheDefault = createMap(); var cacheExpensive = createMap(); - this.$get = ['$filter', '$sniffer', function($filter, $sniffer) { + this.$get = ['$filter', function($filter) { + var noUnsafeEval = csp().noUnsafeEval; var $parseOptions = { - csp: $sniffer.csp, + csp: noUnsafeEval, expensiveChecks: false }, $parseOptionsExpensive = { - csp: $sniffer.csp, + csp: noUnsafeEval, expensiveChecks: true }; @@ -14522,8 +14697,11 @@ function qFactory(nextTick, exceptionHandler) { this.$$state = { status: 0 }; } - Promise.prototype = { + extend(Promise.prototype, { then: function(onFulfilled, onRejected, progressBack) { + if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) { + return this; + } var result = new Deferred(); this.$$state.pending = this.$$state.pending || []; @@ -14544,7 +14722,7 @@ function qFactory(nextTick, exceptionHandler) { return handleCallback(error, false, callback); }, progressBack); } - }; + }); //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native function simpleBind(context, fn) { @@ -14591,7 +14769,7 @@ function qFactory(nextTick, exceptionHandler) { this.notify = simpleBind(this, this.notify); } - Deferred.prototype = { + extend(Deferred.prototype, { resolve: function(val) { if (this.promise.$$state.status) return; if (val === this.promise) { @@ -14654,7 +14832,7 @@ function qFactory(nextTick, exceptionHandler) { }); } } - }; + }); /** * @ngdoc method @@ -14737,6 +14915,9 @@ function qFactory(nextTick, exceptionHandler) { * the promise comes from a source that can't be trusted. * * @param {*} value Value or a promise + * @param {Function=} successCallback + * @param {Function=} errorCallback + * @param {Function=} progressCallback * @returns {Promise} Returns a promise of the passed value or promise */ @@ -14756,6 +14937,9 @@ function qFactory(nextTick, exceptionHandler) { * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6. * * @param {*} value Value or a promise + * @param {Function=} successCallback + * @param {Function=} errorCallback + * @param {Function=} progressCallback * @returns {Promise} Returns a promise of the passed value or promise */ var resolve = when; @@ -14844,7 +15028,7 @@ function $$RAFProvider() { //rAF $window.webkitCancelRequestAnimationFrame; var rafSupported = !!requestAnimationFrame; - var rafFn = rafSupported + var raf = rafSupported ? function(fn) { var id = requestAnimationFrame(fn); return function() { @@ -14858,47 +15042,9 @@ function $$RAFProvider() { //rAF }; }; - queueFn.supported = rafSupported; + raf.supported = rafSupported; - var cancelLastRAF; - var taskCount = 0; - var taskQueue = []; - return queueFn; - - function flush() { - for (var i = 0; i < taskQueue.length; i++) { - var task = taskQueue[i]; - if (task) { - taskQueue[i] = null; - task(); - } - } - taskCount = taskQueue.length = 0; - } - - function queueFn(asyncFn) { - var index = taskQueue.length; - - taskCount++; - taskQueue.push(asyncFn); - - if (index === 0) { - cancelLastRAF = rafFn(flush); - } - - return function cancelQueueFn() { - if (index >= 0) { - taskQueue[index] = null; - index = null; - - if (--taskCount === 0 && cancelLastRAF) { - cancelLastRAF(); - cancelLastRAF = null; - taskQueue.length = 0; - } - } - }; - } + return raf; }]; } @@ -15011,12 +15157,9 @@ function $RootScopeProvider() { * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the * {@link auto.$injector $injector}. Child scopes are created using the * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) + * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for + * an in-depth introduction and usage examples. * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * - * ``` * * # Inheritance * A scope can inherit from a parent scope, as in this example: @@ -15158,10 +15301,10 @@ function $RootScopeProvider() { * Registers a `listener` callback to be executed whenever the `watchExpression` changes. * * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) + * $digest()} and should return the value that will be watched. (`watchExpression` should not change + * its value when executed multiple times with the same input because it may be executed multiple + * times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be + * [idempotent](http://en.wikipedia.org/wiki/Idempotence). * - The `listener` is called only when the value from the current `watchExpression` and the * previous call to `watchExpression` are not equal (with the exception of the initial run, * see below). Inequality is determined according to reference inequality, @@ -15178,9 +15321,9 @@ function $RootScopeProvider() { * * * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) + * you can register a `watchExpression` function with no `listener`. (Be prepared for + * multiple calls to your `watchExpression` because it will execute multiple times in a + * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.) * * After a watcher is registered with the scope, the `listener` fn is called asynchronously * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the @@ -15510,7 +15653,7 @@ function $RootScopeProvider() { // copy the items to oldValue and look for changes. newLength = 0; for (key in newValue) { - if (newValue.hasOwnProperty(key)) { + if (hasOwnProperty.call(newValue, key)) { newLength++; newItem = newValue[key]; oldItem = oldValue[key]; @@ -15532,7 +15675,7 @@ function $RootScopeProvider() { // we used to have more keys, need to find them and destroy them. changeDetected++; for (key in oldValue) { - if (!newValue.hasOwnProperty(key)) { + if (!hasOwnProperty.call(newValue, key)) { oldLength--; delete oldValue[key]; } @@ -15942,11 +16085,14 @@ function $RootScopeProvider() { $apply: function(expr) { try { beginPhase('$apply'); - return this.$eval(expr); + try { + return this.$eval(expr); + } finally { + clearPhase(); + } } catch (e) { $exceptionHandler(e); } finally { - clearPhase(); try { $rootScope.$digest(); } catch (e) { @@ -16614,7 +16760,7 @@ function $SceDelegateProvider() { 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', type, trustedValue); } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { + if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') { return trustedValue; } // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting @@ -16669,7 +16815,7 @@ function $SceDelegateProvider() { * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. */ function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { + if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') { return maybeTrusted; } var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); @@ -16862,10 +17008,10 @@ function $SceDelegateProvider() { * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters * match themselves. * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use + * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use * in a whitelist. * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. + * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g. * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might * not have been the intention.) Its usage at the very end of the path is ok. (e.g. * http://foo.example.com/templates/**). @@ -16873,11 +17019,11 @@ function $SceDelegateProvider() { * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a + * have good test coverage). For instance, the use of `.` in the regex is correct only in a * small number of cases. A `.` character in the regex used when matching the scheme or a * subdomain could be matched against a `:` or literal `.` that was likely not intended. It * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. + * as a last resort. * - The regular expression must be an instance of RegExp (i.e. not a string.) It is * matched against the **entire** *normalized / absolute URL* of the resource being tested * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags @@ -16887,7 +17033,7 @@ function $SceDelegateProvider() { * remember to escape your regular expression (and be aware that you might need more than * one level of escaping depending on your templating engine and the way you interpolated * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has + * enough before coding your own. E.g. Ruby has * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). * Javascript lacks a similar built in function for escaping. Take a look at Google @@ -17775,20 +17921,13 @@ var originUrl = urlResolve(window.location.href); * * Implementation Notes for IE * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other + * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other * browsers. However, the parsed components will not be set if the URL assigned did not specify * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We * work around that by performing the parsing in a 2nd step by taking a previously normalized * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the * properties such as protocol, hostname, port, etc. * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * * References: * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html @@ -17937,7 +18076,7 @@ function $$CookieReader($document) { // the first value that is seen for a cookie is the most // specific one. values for the same cookie name that // follow are for less specific paths. - if (lastCookies[name] === undefined) { + if (isUndefined(lastCookies[name])) { lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); } } @@ -18068,6 +18207,7 @@ function $FilterProvider($provide) { * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores * (`myapp_subsection_filterx`). * + * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered. * @returns {Object} Registered filter instance, or if a map of filters was provided then a map * of the registered filter instances. */ @@ -18415,9 +18555,9 @@ function getTypeForFilter(val) { } element(by.model('amount')).clear(); element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)'); + expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00'); + expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00'); + expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234'); }); @@ -18584,6 +18724,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { if (fractionSize > 0 && number < 1) { formatedText = number.toFixed(fractionSize); number = parseFloat(formatedText); + formatedText = formatedText.replace(DECIMAL_SEP, decimalSep); } } @@ -19257,6 +19398,10 @@ function orderByFilter($parse) { if (sortPredicate.length === 0) { sortPredicate = ['+']; } var predicates = processPredicates(sortPredicate, reverseOrder); + // Add a predicate at the end that evaluates to the element index. This makes the + // sort stable as it works as a tie-breaker when all the input predicates cannot + // distinguish between two elements. + predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1}); // The next three lines are a version of a Swartzian Transform idiom from Perl // (sometimes called the Decorate-Sort-Undecorate idiom) @@ -19878,6 +20023,7 @@ function nullFormRenameControl(control, name) { * @property {boolean} $dirty True if user has already interacted with the form. * @property {boolean} $valid True if all of the containing forms and controls are valid. * @property {boolean} $invalid True if at least one containing control or form is invalid. + * @property {boolean} $pending True if at least one containing control or form is pending. * @property {boolean} $submitted True if user has submitted the form even if its invalid. * * @property {Object} $error Is an object hash, containing references to controls or @@ -19917,8 +20063,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { var form = this, controls = []; - var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl; - // init state form.$error = {}; form.$$success = {}; @@ -19929,8 +20073,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { form.$valid = true; form.$invalid = false; form.$submitted = false; - - parentForm.$addControl(form); + form.$$parentForm = nullFormCtrl; /** * @ngdoc method @@ -19969,11 +20112,23 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { /** * @ngdoc method * @name form.FormController#$addControl + * @param {object} control control object, either a {@link form.FormController} or an + * {@link ngModel.NgModelController} * * @description - * Register a control with the form. + * Register a control with the form. Input elements using ngModelController do this automatically + * when they are linked. * - * Input elements using ngModelController do this automatically when they are linked. + * Note that the current state of the control will not be reflected on the new parent form. This + * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine` + * state. + * + * However, if the method is used programmatically, for example by adding dynamically created controls, + * or controls that have been previously removed without destroying their corresponding DOM element, + * it's the developers responsiblity to make sure the current state propagates to the parent form. + * + * For example, if an input control is added that is already `$dirty` and has `$error` properties, + * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form. */ form.$addControl = function(control) { // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored @@ -19984,6 +20139,8 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { if (control.$name) { form[control.$name] = control; } + + control.$$parentForm = form; }; // Private API: rename a form control @@ -20000,11 +20157,18 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { /** * @ngdoc method * @name form.FormController#$removeControl + * @param {object} control control object, either a {@link form.FormController} or an + * {@link ngModel.NgModelController} * * @description * Deregister a control from the form. * * Input elements using ngModelController do this automatically when they are destroyed. + * + * Note that only the removed control's validation state (`$errors`etc.) will be removed from the + * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be + * different from case to case. For example, removing the only `$dirty` control from a form may or + * may not mean that the form is still `$dirty`. */ form.$removeControl = function(control) { if (control.$name && form[control.$name] === control) { @@ -20021,6 +20185,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { }); arrayRemove(controls, control); + control.$$parentForm = nullFormCtrl; }; @@ -20057,7 +20222,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { delete object[property]; } }, - parentForm: parentForm, $animate: $animate }); @@ -20076,7 +20240,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { $animate.addClass(element, DIRTY_CLASS); form.$dirty = true; form.$pristine = false; - parentForm.$setDirty(); + form.$$parentForm.$setDirty(); }; /** @@ -20132,7 +20296,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { form.$setSubmitted = function() { $animate.addClass(element, SUBMITTED_CLASS); form.$submitted = true; - parentForm.$setSubmitted(); + form.$$parentForm.$setSubmitted(); }; } @@ -20182,6 +20346,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { * # CSS classes * - `ng-valid` is set if the form is valid. * - `ng-invalid` is set if the form is invalid. + * - `ng-pending` is set if the form is pending. * - `ng-pristine` is set if the form is pristine. * - `ng-dirty` is set if the form is dirty. * - `ng-submitted` is set if the form was submitted. @@ -20257,7 +20422,6 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { '); \ No newline at end of file +!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(''); \ No newline at end of file diff --git a/awx/ui/client/lib/angular/angular.min.js b/awx/ui/client/lib/angular/angular.min.js index 2c28ef96f2..272101ec7c 100644 --- a/awx/ui/client/lib/angular/angular.min.js +++ b/awx/ui/client/lib/angular/angular.min.js @@ -1,290 +1,294 @@ /* - AngularJS v1.4.3 + AngularJS v1.4.7 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT */ -(function(O,U,t){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.3/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Na?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function yc(b){try{return decodeURIComponent(b)}catch(a){}}function zc(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g, -"%20").split("="),d=yc(c[0]),w(d)&&(b=w(c[1])?yc(c[1]):!0,Xa.call(a,d)?G(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Qb(b){var a=[];m(b,function(b,d){G(b)?m(b,function(b){a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))}):a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))});return a.length?a.join("&"):""}function ob(b){return ma(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ma(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g, -"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Oa.length;for(d=0;d/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=eb(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e= -/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");ca.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function $d(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function ae(b){b=ca.element(b).injector();if(!b)throw Fa("test");return b.get("$$testability")}function Bc(b,a){a=a|| -"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Cc){var a=pb();la=O.jQuery;w(a)&&(la=null===a?t:O[a]);la&&la.fn.on?(y=la,P(la.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),b=la.cleanData,la.cleanData=function(a){var d;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=la._data(f,"events"))&&d.$destroy&&la(f).triggerHandler("$destroy");b(a)}):y=Q;ca.element=y;Cc=!0}}function Sb(b, -a,c){if(!b)throw Fa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&G(b)&&(b=b[b.length-1]);Sb(z(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ra(b,a){if("hasOwnProperty"===b)throw Fa("badname",a);}function Dc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g")+d[2];for(d=d[0];d--;)c=c.lastChild;f=cb(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function Q(b){if(b instanceof Q)return b;var a;L(b)&&(b=R(b),a=!0);if(!(this instanceof Q)){if(a&&"<"!=b.charAt(0))throw Ub("nosel");return new Q(b)}if(a){a=U; -var c;b=(c=Cf.exec(b))?[a.createElement(c[1])]:(c=Nc(b,a))?c.childNodes:[]}Oc(this,b)}function Vb(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;dk&&this.remove(s.key);return b}},get:function(a){if(k").parent()[0])});var f=S(a,b,a,c,d,e);Z.$$addScopeClass(a); -var g=null;return function(b,c,d){Sb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?y(Yb(g,y("
    ").append(a).html())):c?Pa.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);Z.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a, -c,d,e){var f,k,l,s,n,B,C;if(p)for(C=Array(c.length),s=0;sE.priority)break;if(v=E.scope)E.templateUrl|| -(H(v)?(O("new/isolated scope",u||$,E,ba),u=E):O("new/isolated scope",u,E,ba)),$=$||E;w=E.name;!E.templateUrl&&E.controller&&(v=E.controller,N=N||ga(),O("'"+w+"' controller",N[w],E,ba),N[w]=E);if(v=E.transclude)K=!0,E.$$tlb||(O("transclusion",m,E,ba),m=E),"element"==v?(q=!0,F=E.priority,v=ba,ba=d.$$element=y(U.createComment(" "+w+": "+d[w]+" ")),b=ba[0],T(f,za.call(v,0),b),A=Z(v,e,F,g&&g.name,{nonTlbTranscludeDirective:m})):(v=y(Vb(b)).contents(),ba.empty(),A=Z(v,e));if(E.template)if(I=!0,O("template", -D,E,ba),D=E,v=z(E.template)?E.template(ba,d):E.template,v=fa(v),E.replace){g=E;v=Tb.test(v)?$c(Yb(E.templateNamespace,R(v))):[];b=v[0];if(1!=v.length||b.nodeType!==qa)throw ea("tplrt",w,"");T(f,ba,b);Ta={$attr:{}};v=ha(b,[],Ta);var Q=a.splice(xa+1,a.length-(xa+1));u&&ad(v);a=a.concat(v).concat(Q);J(d,Ta);Ta=a.length}else ba.html(v);if(E.templateUrl)I=!0,O("template",D,E,ba),D=E,E.replace&&(g=E),S=Lf(a.splice(xa,a.length-xa),ba,d,f,K&&A,h,k,{controllerDirectives:N,newScopeDirective:$!==E&&$,newIsolateScopeDirective:u, -templateDirective:D,nonTlbTranscludeDirective:m}),Ta=a.length;else if(E.compile)try{Aa=E.compile(ba,d,A),z(Aa)?n(null,Aa,M,P):Aa&&n(Aa.pre,Aa.post,M,P)}catch(Kf){c(Kf,ua(ba))}E.terminal&&(S.terminal=!0,F=Math.max(F,E.priority))}S.scope=$&&!0===$.scope;S.transcludeOnThisElement=K;S.templateOnThisElement=I;S.transclude=A;s.hasElementTranscludeDirective=q;return S}function ad(a){for(var b=0,c=a.length;bn.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Ob(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(x){c(x)}}return h}function A(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return I.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b|| -"ngSrc"==b))return I.RESOURCE_URL}function V(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var l=b(d,!0,g,f);if(l){if("multiple"===e&&"select"===ta(a))throw ea("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers={});if(k.test(e))throw ea("nodomevents");var s=h[e];s!==d&&(l=s&&b(s,!0,g,f),d=s);l&&(h[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e, -a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=a)return b;for(;a--;)8=== -b[a].nodeType&&Mf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ra(a,"controller");H(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!H(a.$scope))throw J("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,l){var k,n,r;h=!0===h;l&&L(l)&&(r=l);if(L(f)){l=f.match(Xc);if(!l)throw Nf("ctrlfmt",f);n=l[1];r=r||l[3];f=b.hasOwnProperty(n)?b[n]:Dc(g.$scope,n,!0)||(a?Dc(d,n,!0):t);Qa(f, -n,!0)}if(h)return h=(G(f)?f[f.length-1]:f).prototype,k=Object.create(h||null),r&&e(g,r,k,n||f.name),P(function(){var a=c.invoke(f,k,g,n);a!==k&&(H(a)||z(a))&&(k=a,r&&e(g,r,k,n||f.name));return k},{instance:k,identifier:r});k=c.instantiate(f,g,n);r&&e(g,r,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return y(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b){return H(b)?aa(b)?b.toISOString():db(b):b} -function cf(){this.$get=function(){return function(b){if(!b)return"";var a=[];oc(b,function(b,d){null===b||A(b)||(G(b)?m(b,function(b,c){a.push(ma(d)+"="+ma(Zb(b)))}):a.push(ma(d)+"="+ma(Zb(b))))});return a.join("&")}}}function df(){this.$get=function(){return function(b){function a(b,e,f){null===b||A(b)||(G(b)?m(b,function(b){a(b,e+"[]")}):H(b)&&!aa(b)?oc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(ma(e)+"="+ma(Zb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function $b(b, -a){if(L(b)){var c=b.replace(Of,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(cd))||(d=(d=c.match(Pf))&&Qf[d[0]].test(c));d&&(b=wc(c))}}return b}function dd(b){var a=ga(),c;L(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=M(R(b.substr(0,c)));b=R(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):H(b)&&m(b,function(b,c){var f=M(c),g=R(b);f&&(a[f]=a[f]?a[f]+", "+g:g)});return a}function ed(b){var a;return function(c){a||(a=dd(b));return c?(c=a[M(c)],void 0===c&&(c=null),c):a}}function fd(b, -a,c,d){if(z(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function bf(){var b=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return w(b)? -(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=P({},a);b.data=a.data?fd(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a,b){var c,e={};m(a,function(a,d){z(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}if(!ca.isObject(a))throw J("$http")("badreq",a);var e=P({method:"get",transformRequest:b.transformRequest, -transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);e.headers=function(a){var c=b.headers,e=P({},a.headers),f,g,h,c=P({},c.common,c[M(a.method)]);a:for(f in c){g=M(f);for(h in e)if(M(h)===g)continue a;e[f]=c[f]}return d(e,ia(a))}(a);e.method=rb(e.method);e.paramSerializer=L(e.paramSerializer)?l.get(e.paramSerializer):e.paramSerializer;var f=[function(a){var d=a.headers,e=fd(a.data,ed(d),t,a.transformRequest);A(e)&&m(d,function(a,b){"content-type"===M(b)&&delete d[b]});A(a.withCredentials)&& -!A(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(m(x,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){Qa(a,"fn");g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){Qa(a,"fn");g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g} -function n(c,f){function l(b,c,d,e){function f(){n(c,b,d,e)}N&&(200<=b&&300>b?N.put(S,[b,c,dd(d),e]):N.remove(S));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function n(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?I.resolve:I.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function x(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function m(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var I=h.defer(),B=I.promise,N,D,q=c.headers,S=r(c.url,c.paramSerializer(c.params)); -k.pendingRequests.push(c);B.then(m,m);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=H(c.cache)?c.cache:H(b.cache)?b.cache:s);N&&(D=N.get(S),w(D)?D&&z(D.then)?D.then(x,x):G(D)?n(D[1],D[0],ia(D[2]),D[3]):n(D,200,{},"OK"):N.put(S,B));A(D)&&((D=gd(c.url)?e()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(q[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,S,f,l,q,c.timeout,c.withCredentials,c.responseType));return B}function r(a,b){0=l&&(u.resolve(C),x(p.$$intervalId),delete f[p.$$intervalId]);F||b.$apply()},h);f[p.$$intervalId]=u;return p}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ge(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".", -GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), -SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function hd(b,a){var c=Ba(b);a.$$protocol=c.protocol; -a.$$host=c.hostname;a.$$port=W(c.port)||Tf[c.protocol]||null}function id(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=zc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Bb(b){return b.replace(/(#.+)|#$/, -"$1")}function cc(b){return b.substr(0,Ja(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);hd(b,this);this.$$parse=function(a){var b=ya(c,a);if(!L(b))throw Cb("ipthprfx",a,c);id(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),b=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)), -!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);hd(b,this);this.$$parse=function(d){var e=ya(b,d)||ya(c,d),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(b=d,this.replace())):(f=ya(a,e),A(f)&&(f=e));id(f,this);d=this.$$path;var e=b,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(d=(f=g.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose= -function(){var c=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function jd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ja(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c= -Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Db(b){return function(){return this[b]}}function kd(b,a){return function(c){if(A(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ff(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return ab(b)?(a.enabled=b,this):H(b)?(ab(b.enabled)&&(a.enabled=b.enabled), -ab(b.requireBase)&&(a.requireBase=b.requireBase),ab(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var r=d.url(),s;if(a.enabled){if(!n&&a.requireBase)throw Cb("nobase");s=r.substring(0, -r.indexOf("/",r.indexOf("//")+2))+(n||"/");n=e.history?dc:jd}else s=Ja(r),n=ec;k=new n(s,"#"+b);k.$$parseLinkUrl(r,r);k.$$state=d.state();var x=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=y(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);x.test(h)|| -!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Bb(k.absUrl())!=Bb(r)&&d.url(k.absUrl(),!0);var C=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(C=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a= -Bb(d.url()),b=Bb(k.absUrl()),f=d.state(),g=k.$$replace,n=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(C||n)C=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(n&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function gf(){var b=!0,a=this;this.debugEnabled=function(a){return w(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&& -(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||v;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]} -function Ca(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw da("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b.window===b)throw da("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw da("isecdom",a);if(b===Object)throw da("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw da("isecff",a); -}}function Xf(b,a){return"undefined"!==typeof b?b:a}function md(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function T(b,a){var c,d;switch(b.type){case q.Program:c=!0;m(b.body,function(b){T(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case q.Literal:b.constant=!0;b.toWatch=[];break;case q.UnaryExpression:T(b.argument,a);b.constant=b.argument.constant;b.toWatch=b.argument.toWatch;break;case q.BinaryExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&& -b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case q.LogicalExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case q.ConditionalExpression:T(b.test,a);T(b.alternate,a);T(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case q.Identifier:b.constant=!1;b.toWatch=[b];break;case q.MemberExpression:T(b.object,a);b.computed&&T(b.property,a); -b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case q.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){T(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case q.AssignmentExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=[b];break;case q.ArrayExpression:c=!0;d=[];m(b.elements,function(b){T(b,a);c= -c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case q.ObjectExpression:c=!0;d=[];m(b.properties,function(b){T(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case q.ThisExpression:b.constant=!1,b.toWatch=[]}}function nd(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:t}}function od(b){return b.type===q.Identifier||b.type===q.MemberExpression}function pd(b){if(1=== -b.body.length&&od(b.body[0].expression))return{type:q.AssignmentExpression,left:b.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function qd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===q.Literal||b.body[0].expression.type===q.ArrayExpression||b.body[0].expression.type===q.ObjectExpression)}function rd(b,a){this.astBuilder=b;this.$filter=a}function sd(b,a){this.astBuilder=b;this.$filter=a}function Eb(b,a,c,d){oa(b,d);a=a.split(".");for(var e,f=0;1< -a.length;f++){e=Ca(a.shift(),d);var g=oa(b[e],d);g||(g={},b[e]=g);b=g}e=Ca(a.shift(),d);oa(b[e],d);return b[e]=c}function Fb(b){return"constructor"==b}function fc(b){return z(b.valueOf)?b.valueOf():Yf.call(b)}function hf(){var b=ga(),a=ga();this.$get=["$filter","$sniffer",function(c,d){function e(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function f(a,b,c,d,f){var g=d.inputs,h;if(1===g.length){var k=e,g=g[0];return a.$watch(function(a){var b= -g(a);e(b,k)||(h=d(a,t,t,[b]),k=b&&fc(b));return h},b,c,f)}for(var l=[],n=[],r=0,m=g.length;r=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;fa)for(b in l++,f)e.hasOwnProperty(b)|| -(m--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1m&&(E=4-m,u[E]||(u[E]=[]),u[E].push({msg:z(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));else if(b===d){s=!1;break a}}catch(A){g(A)}if(!(k=x.$$watchersCount&&x.$$childHead||x!==this&&x.$$nextSibling))for(;x!== -this&&!(k=x.$$nextSibling);)x=x.$parent}while(x=k);if((s||t.length)&&!m--)throw p.$$phase=null,c("infdig",a,u);}while(s||t.length);for(p.$$phase=null;w.length;)try{w.shift()()}catch(y){g(y)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===p&&l.$$applicationDestroyed();s(this,-this.$$watchersCount);for(var b in this.$$listenerCount)x(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail== -this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=v;this.$on=this.$watch=this.$watchGroup=function(){return v};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return h(a)(this,b)}, -$evalAsync:function(a,b){p.$$phase||t.length||l.defer(function(){t.length&&p.$digest()});t.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){w.push(a)},$apply:function(a){try{return r("$apply"),this.$eval(a)}catch(b){g(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&I.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]|| -(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,x(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;lUa)throw Da("iequirks");var d=ia(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs= -d.getTrusted=function(a,b){return b},d.valueOf=Ya);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;m(pa,function(a,b){var c=M(b);d[hb("parse_as_"+c)]=function(b){return e(a,b)};d[hb("get_trusted_"+c)]=function(b){return f(a,b)};d[hb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function of(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(M((b.navigator|| -{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var r in l)if(k=h.exec(r)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=L(l.webkitTransition),n=L(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"=== -a&&11>=Ua)return!1;if(A(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:fb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function qf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,g){e.totalPendingRequests++;L(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var h=a.defaults&&a.defaults.transformResponse;G(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return a.get(f,{cache:b,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f, -a.data);return a.data},function(a){if(!g)throw ea("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function rf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];m(a,function(a){var d=ca.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a, -b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;hb;b=Math.abs(b);var g=Infinity===b;if(!g&&!isFinite(b))return"";var h=b+"",l="",k=!1,n=[];g&&(l="\u221e"); -if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?b=0:(l=h,k=!0)}if(g||k)0b&&(l=b.toFixed(e),b=parseFloat(l));else{g=(h.split(Dd)[1]||"").length;A(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(Dd),h=g[0],g=g[1]||"",r=0,s=a.lgSize,m=a.gSize;if(h.length>=s+m)for(r=h.length-s,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a= -(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function jc(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function zd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=W(b[9]+b[10]),g=W(b[9]+b[11]));h.call(a,W(b[1]), -W(b[2])-1,W(b[3]));f=W(b[4]||0)-f;g=W(b[5]||0)-g;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;L(c)&&(c=fg.test(c)?W(c):a(c));V(c)&&(c=new Date(c));if(!aa(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(h=cb(h,k,1),e=h.pop()):(h.push(e),e=null);var n=c.getTimezoneOffset(); -f&&(n=xc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));m(h,function(a){l=hg[a];g+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function ag(){return function(b,a){A(a)&&(a=2);return db(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):W(a);if(isNaN(a))return b;V(b)&&(b=b.toString());if(!G(b)&&!L(b))return b;c=!c||isNaN(c)?0:W(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0, -c+a),c)}}function Bd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,h=Ya;if(z(a))h=a;else if(L(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(h=b(a),h.constant))var l=h(),h=function(a){return a[l]}}return{get:h,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(b,e,f){if(!Ea(b))return b;G(e)||(e=[e]);0===e.length&&(e=["+"]);var g=a(e,f);b=Array.prototype.map.call(b, -function(a,b){return{value:a,predicateValues:g.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(rc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}});b.sort(function(a,b){for(var c=0,d=0,e=g.length;db||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(aa(c))return c;if(L(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)); -if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c=F};g.$observe("min",function(a){F=s(a);h.$validate()})}if(w(g.max)||g.ngMax){var u; -h.$validators.max=function(a){return!r(a)||A(u)||c(a)<=u};g.$observe("max",function(a){u=s(a);h.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=H(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function Jd(b,a,c,d,e){if(w(d)){b=b(d);if(!b.constant)throw J("ngModel")("constexpr",c,d);return b(a)}return e}function lc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Af=/<([\w:]+)/,Bf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,na={option:[1,'"],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};na.optgroup=na.option;na.tbody=na.tfoot=na.colgroup=na.caption=na.thead; -na.th=na.td;var Pa=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(O).on("load",a))},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:kg,sort:[].sort,splice:[].splice},Ab={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Ab[M(b)]=b});var Tc={};m("input select option textarea button form details".split(" "), -function(b){Tc[b]=!0});var Uc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};m({data:Wb,removeData:ub,hasData:function(b){for(var a in ib[b.ng339])return!0;return!1}},function(b,a){Q[a]=b});m({data:Wb,inheritedData:zb,scope:function(b){return y.data(b,"$scope")||zb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y.data(b,"$isolateScope")||y.data(b,"$isolateScopeNoTemplate")},controller:Qc,injector:function(b){return zb(b, -"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:wb,css:function(b,a,c){a=hb(a);if(w(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=b.nodeType;if(d!==Na&&2!==d&&8!==d)if(d=M(a),Ab[d])if(w(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:t;else if(w(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(w(c))b[a]=c;else return b[a]}, -text:function(){function b(a,b){if(A(b)){var d=a.nodeType;return d===qa||d===Na?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(A(a)){if(b.multiple&&"select"===ta(b)){var c=[];m(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(A(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Rc},function(b,a){Q.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Rc&&(2==b.length&&b!==wb&&b!==Qc? -a:d)===t){if(H(a)){for(e=0;e <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var qg={n:"\n",f:"\f",r:"\r", -t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a|| -"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=w(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw da("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">=");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:c.text, -left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=fa(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant(): -this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===c.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:q.CallExpression,callee:this.identifier(), -arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break; -a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;c={type:q.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}}, -throwError:function(a,c){throw da("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw da("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw da("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a]; -var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:q.Literal,value:!0},"false":{type:q.Literal,value:!1},"null":{type:q.Literal,value:null},undefined:{type:q.Literal,value:t},"this":{type:q.ThisExpression}}};rd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[], -body:[],own:{}},inputs:[]};T(e,d.$filter);var f="",g;this.stage="assign";if(g=pd(e))this.state.computing="assign",f=this.nextId(),this.recurse(g,f),f="fn.assign="+this.generateFunction("assign","s,v,l");g=nd(e.body);d.stage="inputs";m(g,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+ -"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","ifDefined","plus","text",f))(this.$filter,Ca,oa,ld,Xf,md,a);this.state=this.stage=t;f.literal=qd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")}, -generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,g){var h,l,k=this,n,r;e=e||v;if(!g&&w(a.watchId))c=c||this.nextId(),this.if_("i", -this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case q.Program:m(a.body,function(c,d){k.recurse(c.expression,t,t,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case q.Literal:r=this.escape(a.value);this.assign(c,r);e(r);break;case q.UnaryExpression:this.recurse(a.argument,t,t,function(a){l=a});r=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,r);e(r);break;case q.BinaryExpression:this.recurse(a.left, -t,t,function(a){h=a});this.recurse(a.right,t,t,function(a){l=a});r="+"===a.operator?this.plus(h,l):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(l,0):"("+h+")"+a.operator+"("+l+")";this.assign(c,r);e(r);break;case q.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case q.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c); -break;case q.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ca(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l", -a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case q.MemberExpression:h=d&&(d.context=this.nextId())||this.nextId();c=c||this.nextId();k.recurse(a.object,h,t,function(){k.if_(k.notNull(h),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(h,l)),k.lazyAssign(k.computedMember(h,l),"{}")),r=k.ensureSafeObject(k.computedMember(h,l)),k.assign(c,r),d&&(d.computed=!0,d.name=l);else{Ca(a.property.name); -f&&1!==f&&k.if_(k.not(k.nonComputedMember(h,a.property.name)),k.lazyAssign(k.nonComputedMember(h,a.property.name),"{}"));r=k.nonComputedMember(h,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))r=k.ensureSafeObject(r);k.assign(c,r);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case q.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),r=l+ -"("+n.join(",")+")",k.assign(c,r),e(c)):(l=k.nextId(),h={},n=[],k.recurse(a.callee,l,h,function(){k.if_(k.notNull(l),function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(k.ensureSafeObject(a))})});h.name?(k.state.expensiveChecks||k.addEnsureSafeObject(h.context),r=k.member(h.context,h.name,h.computed)+"("+n.join(",")+")"):r=l+"("+n.join(",")+")";r=k.ensureSafeObject(r);k.assign(c,r)},function(){k.assign(c,"undefined")});e(c)}));break;case q.AssignmentExpression:l= -this.nextId();h={};if(!od(a.left))throw da("lval");this.recurse(a.left,t,h,function(){k.if_(k.notNull(h.context),function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(h.context,h.name,h.computed));r=k.member(h.context,h.name,h.computed)+a.operator+l;k.assign(c,r);e(c||r)})},1);break;case q.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(a)})});r="["+n.join(",")+"]";this.assign(c,r);e(r);break;case q.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value, -k.nextId(),t,function(c){n.push(k.escape(a.key.type===q.Identifier?a.key.name:""+a.key.value)+":"+c)})});r="{"+n.join(",")+"}";this.assign(c,r);e(r);break;case q.ThisExpression:this.assign(c,"s");e("s");break;case q.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)|| -(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+ -"."+c},computedMember:function(a,c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+ -a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},lazyRecurse:function(a,c,d,e,f,g){var h=this;return function(){h.recurse(a,c,d,e,f,g)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(L(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true"; -if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw da("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;T(e,d.$filter);var f,g;if(f=pd(e))g=this.recurse(f);f=nd(e.body);var h;f&&(h=[],m(f,function(a,c){var e=d.recurse(a); -a.input=e;h.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};g&&(f.assign=function(a,c,d){return g(a,d,c)});h&&(f.inputs=h);f.literal=qd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,g=this,h;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,c);case q.UnaryExpression:return f= -this.recurse(a.argument),this["unary"+a.operator](f,c);case q.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case q.Identifier:return Ca(a.name,g.expression),g.identifier(a.name,g.expensiveChecks||Fb(a.name), -c,d,g.expression);case q.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Ca(a.property.name,g.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,g.expression):this.nonComputedMember(e,f,g.expensiveChecks,c,d,g.expression);case q.CallExpression:return h=[],m(a.arguments,function(a){h.push(g.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,g){for(var m= -[],q=0;q":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>c(e,f,g,h);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e, -f,g,h){e=a(e,f,g,h)<=c(e,f,g,h);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>=c(e,f,g,h);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)&&c(e,f,g,h);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)||c(e,f,g,h);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,g,h,l){f=a(f,g,h,l)?c(f,g,h,l):d(f,g,h,l);return e?{value:f}:f}},value:function(a,c){return function(){return c? -{context:t,name:t,value:a}:a}},identifier:function(a,c,d,e,f){return function(g,h,l,k){g=h&&a in h?h:g;e&&1!==e&&g&&!g[a]&&(g[a]={});h=g?g[a]:t;c&&oa(h,f);return d?{context:g,name:a,value:h}:h}},computedMember:function(a,c,d,e,f){return function(g,h,l,k){var n=a(g,h,l,k),m,s;null!=n&&(m=c(g,h,l,k),Ca(m,f),e&&1!==e&&n&&!n[m]&&(n[m]={}),s=n[m],oa(s,f));return d?{context:n,name:m,value:s}:s}},nonComputedMember:function(a,c,d,e,f,g){return function(h,l,k,n){h=a(h,l,k,n);f&&1!==f&&h&&!h[c]&&(h[c]={}); -l=null!=h?h[c]:t;(d||Fb(c))&&oa(l,g);return e?{context:h,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,g){return g?g[c]:a(d,e,f)}}};var hc=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d;this.ast=new q(this.lexer);this.astCompiler=d.csp?new sd(this.ast,c):new rd(this.ast,c)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};ga();ga();var Yf=Object.prototype.valueOf,Da=J("$sce"),pa={HTML:"html",CSS:"css",URL:"url", -RESOURCE_URL:"resourceUrl",JS:"js"},ea=J("$compile"),X=U.createElement("a"),wd=Ba(O.location.href);xd.$inject=["$document"];Lc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var Dd=".",hg={yyyy:Y("FullYear",4),yy:Y("FullYear",2,0,!0),y:Y("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:Y("Month",2,1),M:Y("Month",1,1),dd:Y("Date",2),d:Y("Date",1),HH:Y("Hours",2),H:Y("Hours",1),hh:Y("Hours",2,-12),h:Y("Hours",1,-12),mm:Y("Minutes",2),m:Y("Minutes",1),ss:Y("Seconds",2),s:Y("Seconds", -1),sss:Y("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;zd.$inject=["$locale"];var cg=ra(M),dg=ra(rb);Bd.$inject= -["$parse"];var ie=ra({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===sa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),sb={};m(Ab,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=wa("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});sb[e]=function(){return{restrict:"A", -priority:100,link:f}}}});m(Uc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href", -g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ua&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:v,$$renameControl:function(a,c){a.$name=c},$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v,$setSubmitted:v};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Gd,compile:function(d,e){d.addClass(Va).addClass(mb);var f=e.name?"name":a&&e.ngForm?"ngForm": -!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var m=k.$$parentForm;f&&(Eb(a,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(Eb(a,k.$name,t,k.$name),m.$$renameControl(k,c),Eb(a,k.$name,k,k.$name))}));d.on("$destroy",function(){m.$removeControl(k);f&&Eb(a,e[f],t, -k.$name);P(k,Ib)})}}}}}]},je=Od(),we=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,rg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,sg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,tg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/, -Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e)},date:lb("date",Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":lb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:lb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:lb("week",mc,function(a,c){if(aa(a))return a;if(L(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),g= -c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:lb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){Id(a,c,d,e);kb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:tg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Lb("numfmt",a);a=a.toString()}return a});if(w(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)|| -A(h)||a>=h};d.$observe("min",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(w(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||A(l)||a<=l};d.$observe("max",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||rg.test(d)}},email:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e); -e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},radio:function(a,c,d,e){A(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&& -a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:v,button:v,submit:v,reset:v,file:v},Fc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Td[M(h.type)]||Td.text)(f,g,h,l[0],c,a,d,e)}}}}],ug=/^(true|false|\d+)$/,Oe=function(){return{restrict:"A",priority:100,compile:function(a, -c){return ug.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},oe=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],qe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate)); -c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],pe=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],Ne=ra({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -re=lc("",!0),te=lc("Odd",0),se=lc("Even",1),ue=Ma({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),ve=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Kc={},vg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=wa("ng-"+a);Kc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h= -d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};vg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ye=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k= -qb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],ze=["$templateRequest","$anchorScroll","$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(e,f){var g=f.ngInclude||f.src,h=f.onload||"",l=f.autoscroll;return function(e,f,m,s,q){var t=0,F,u,p,v=function(){u&&(u.remove(),u=null);F&&(F.$destroy(),F=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};e.$watch(g,function(g){var m=function(){!w(l)||l&&!e.$eval(l)|| -c()},r=++t;g?(a(g,!0).then(function(a){if(r===t){var c=e.$new();s.template=a;a=q(c,function(a){v();d.enter(a,null,f).then(m)});F=c;p=a;F.$emit("$includeContentLoaded",g);e.$eval(h)}},function(){r===t&&(v(),e.$emit("$includeContentError",g))}),e.$emit("$includeContentRequested",g)):(v(),s.template=null)})}}}}],Qe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Nc(f.template,U).childNodes)(c,function(a){d.append(a)}, -{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],Ae=Ma({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Me=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?R(f):f;e.$parsers.push(function(a){if(!A(a)){var c=[];a&&m(a.split(h),function(a){a&&c.push(g?R(a):a)});return c}});e.$formatters.push(function(a){return G(a)?a.join(f):t});e.$isEmpty=function(a){return!a|| -!a.length}}}},mb="ng-valid",Kd="ng-invalid",Va="ng-pristine",Jb="ng-dirty",Md="ng-pending",Lb=new J("ngModel"),wg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty= -!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var r=f(d.ngModel),s=r.assign,q=r,C=s,F=null,u,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");q=function(a){var d=r(a);z(d)&&(d=c(a));return d};C=function(a,c){z(r(a))?g(a,{$$$p:p.$modelValue}):s(a,p.$modelValue)}}else if(!r.assign)throw Lb("nonassign",d.ngModel,ua(e));};this.$render=v;this.$isEmpty=function(a){return A(a)|| -""===a||null===a||a!==a};var K=e.inheritedData("$formController")||Ib,y=0;Hd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:K,$animate:g});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Va)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;g.removeClass(e,Va);g.addClass(e,Jb);K.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched= -function(){p.$touched=!0;p.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(F);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!V(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,c=p.$valid,d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(f){e||c===f||(p.$modelValue=f?a:t,p.$modelValue!==d&&p.$$writeModelToScope())})}};this.$$runValidators= -function(a,c,d){function e(){var d=!0;m(p.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(m(p.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(p.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!z(k.then))throw Lb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},v):h(!0)}function g(a,c){l===y&&p.$setValidity(a,c)}function h(a){l===y&&d(a)}y++;var l=y;(function(){var a= -p.$$parserName||"parse";if(u===t)g(a,null);else return u||(m(p.$validators,function(a,c){g(c,null)}),m(p.$asyncValidators,function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=p.$viewValue;h.cancel(F);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=p.$$lastCommittedViewValue;if(u=A(c)?t:!0)for(var d= -0;df||e.$isEmpty(c)||c.length<=f}}}}},Ic=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=W(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(ca),y(U).ready(function(){Zd(U,Ac)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document.head).prepend(''); +(function(Q,X,w){'use strict';function I(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.7/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Pa?F(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+F(b)})}catch(d){return F(c)}}function xc(b){try{return decodeURIComponent(b)}catch(a){}} +function yc(b){var a={};m((b||"").split("&"),function(b){var d,e,f;b&&(e=b=b.replace(/\+/g,"%20"),d=b.indexOf("="),-1!==d&&(e=b.substring(0,d),f=b.substring(d+1)),e=xc(e),A(e)&&(f=A(f)?xc(f):!0,ta.call(a,e)?J(a[e])?a[e].push(f):a[e]=[a[e],f]:a[e]=f))});return a}function Pb(b){var a=[];m(b,function(b,d){J(b)?m(b,function(b){a.push(la(d,!0)+(!0===b?"":"="+la(b,!0)))}):a.push(la(d,!0)+(!0===b?"":"="+la(b,!0)))});return a.length?a.join("&"):""}function ob(b){return la(b,!0).replace(/%26/gi,"&").replace(/%3D/gi, +"=").replace(/%2B/gi,"+")}function la(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Qa.length;for(d=0;d/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=fb(a,c.strictDi);d.invoke(["$rootScope", +"$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;Q&&e.test(Q.name)&&(c.debugInfoEnabled=!0,Q.name=Q.name.replace(e,""));if(Q&&!f.test(Q.name))return d();Q.name=Q.name.replace(f,"");da.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};x(da.resumeDeferredBootstrap)&&da.resumeDeferredBootstrap()}function $d(){Q.name="NG_ENABLE_DEBUG_INFO!"+Q.name;Q.location.reload()} +function ae(b){b=da.element(b).injector();if(!b)throw Ea("test");return b.get("$$testability")}function Ac(b,a){a=a||"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Bc){var a=pb();(ra=v(a)?Q.jQuery:a?Q[a]:w)&&ra.fn.on?(B=ra,P(ra.fn,{scope:Ra.scope,isolateScope:Ra.isolateScope,controller:Ra.controller,injector:Ra.injector,inheritedData:Ra.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var d;if(Qb)Qb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d= +ra._data(f,"events"))&&d.$destroy&&ra(f).triggerHandler("$destroy");b(a)}):B=R;da.element=B;Bc=!0}}function qb(b,a,c){if(!b)throw Ea("areq",a||"?",c||"required");return b}function Sa(b,a,c){c&&J(b)&&(b=b[b.length-1]);qb(x(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ta(b,a){if("hasOwnProperty"===b)throw Ea("badname",a);}function Cc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,h=0;h")+d[2];for(d=d[0];d--;)c=c.lastChild;f=db(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof R)return b;var a;G(b)&&(b=T(b), +a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new R(b)}if(a){a=X;var c;b=(c=Ef.exec(b))?[a.createElement(c[1])]:(c=Mc(b,a))?c.childNodes:[]}Nc(this,b)}function Ub(b){return b.cloneNode(!0)}function ub(b,a){a||vb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;dk&&this.remove(r.key);return b}},get:function(a){if(k").parent()[0])});var f= +S(a,b,a,c,d,e);W.$$addScopeClass(a);var g=null;return function(b,c,d){qb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==wa(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Xb(g,B("
    ").append(a).html())):c?Ra.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);W.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a, +b,c,d,e,f){function g(a,c,d,e){var f,k,l,r,n,t,O;if(q)for(O=Array(c.length),r=0;rD.priority)break;if(M=D.scope)D.templateUrl||(C(M)?(Q("new/isolated scope", +u||S,D,v),u=D):Q("new/isolated scope",u,D,v)),S=S||D;y=D.name;!D.templateUrl&&D.controller&&(M=D.controller,ba=ba||fa(),Q("'"+y+"' controller",ba[y],D,v),ba[y]=D);if(M=D.transclude)N=!0,D.$$tlb||(Q("transclusion",z,D,v),z=D),"element"==M?(ia=!0,H=D.priority,M=v,v=d.$$element=B(X.createComment(" "+y+": "+d[y]+" ")),b=v[0],U(f,ua.call(M,0),b),Ka=W(M,e,H,g&&g.name,{nonTlbTranscludeDirective:z})):(M=B(Ub(b)).contents(),v.empty(),Ka=W(M,e));if(D.template)if(m=!0,Q("template",L,D,v),L=D,M=x(D.template)? +D.template(v,d):D.template,M=ha(M),D.replace){g=D;M=Sb.test(M)?Xc(Xb(D.templateNamespace,T(M))):[];b=M[0];if(1!=M.length||b.nodeType!==pa)throw ga("tplrt",y,"");U(f,v,b);F={$attr:{}};M=ca(b,[],F);var Lf=a.splice(I+1,a.length-(I+1));u&&A(M);a=a.concat(M).concat(Lf);Yc(d,F);F=a.length}else v.html(M);if(D.templateUrl)m=!0,Q("template",L,D,v),L=D,D.replace&&(g=D),K=Mf(a.splice(I,a.length-I),v,d,f,N&&Ka,h,k,{controllerDirectives:ba,newScopeDirective:S!==D&&S,newIsolateScopeDirective:u,templateDirective:L, +nonTlbTranscludeDirective:z}),F=a.length;else if(D.compile)try{na=D.compile(v,d,Ka),x(na)?n(null,na,P,R):na&&n(na.pre,na.post,P,R)}catch(V){c(V,xa(v))}D.terminal&&(K.terminal=!0,H=Math.max(H,D.priority))}K.scope=S&&!0===S.scope;K.transcludeOnThisElement=N;K.templateOnThisElement=m;K.transclude=Ka;r.hasElementTranscludeDirective=ia;return K}function A(a){for(var b=0,c=a.length;bn.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Nb(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(H){c(H)}}return h}function I(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return ia.HTML;var c=wa(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b|| +"ngSrc"==b))return ia.RESOURCE_URL}function V(a,c,d,e,f){var h=R(a,e);f=g[e]||f;var l=b(d,!0,h,f);if(l){if("multiple"===e&&"select"===wa(a))throw ga("selmulti",xa(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers=fa());if(k.test(e))throw ga("nodomevents");var r=g[e];r!==d&&(l=r&&b(r,!0,h,f),d=r);l&&(g[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e, +a)}))}}}})}}function U(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=a)return b;for(;a--;)8===b[a].nodeType&&Nf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ta(a,"controller");C(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!C(a.$scope))throw I("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,h,g,l){var k,n,p;g=!0===g;l&&G(l)&&(p=l);if(G(f)){l=f.match(Vc);if(!l)throw Of("ctrlfmt",f); +n=l[1];p=p||l[3];f=b.hasOwnProperty(n)?b[n]:Cc(h.$scope,n,!0)||(a?Cc(d,n,!0):w);Sa(f,n,!0)}if(g)return g=(J(f)?f[f.length-1]:f).prototype,k=Object.create(g||null),p&&e(h,p,k,n||f.name),P(function(){var a=c.invoke(f,k,h,n);a!==k&&(C(a)||x(a))&&(k=a,p&&e(h,p,k,n||f.name));return k},{instance:k,identifier:p});k=c.instantiate(f,h,n);p&&e(h,p,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return B(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b, +arguments)}}]}function Yb(b){return C(b)?ea(b)?b.toISOString():eb(b):b}function df(){this.$get=function(){return function(b){if(!b)return"";var a=[];nc(b,function(b,d){null===b||v(b)||(J(b)?m(b,function(b,c){a.push(la(d)+"="+la(Yb(b)))}):a.push(la(d)+"="+la(Yb(b))))});return a.join("&")}}}function ef(){this.$get=function(){return function(b){function a(b,e,f){null===b||v(b)||(J(b)?m(b,function(b,c){a(b,e+"["+(C(b)?c:"")+"]")}):C(b)&&!ea(b)?nc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(la(e)+ +"="+la(Yb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function Zb(b,a){if(G(b)){var c=b.replace(Pf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(ad))||(d=(d=c.match(Qf))&&Rf[d[0]].test(c));d&&(b=vc(c))}}return b}function bd(b){var a=fa(),c;G(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=F(T(b.substr(0,c)));b=T(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):C(b)&&m(b,function(b,c){var f=F(c),h=T(b);f&&(a[f]=a[f]?a[f]+", "+h:h)});return a}function cd(b){var a; +return function(c){a||(a=bd(b));return c?(c=a[F(c)],void 0===c&&(c=null),c):a}}function dd(b,a,c,d){if(x(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function cf(){var b=this.defaults={transformResponse:[Zb],transformRequest:[function(a){return C(a)&&"[object File]"!==va.call(a)&&"[object Blob]"!==va.call(a)&&"[object FormData]"!==va.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ja($b),put:ja($b),patch:ja($b)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN", +paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return A(b)?(a=!!b,this):a};var c=!0;this.useLegacyPromiseExtensions=function(a){return A(a)?(c=!!a,this):c};var d=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,h,g,l,k){function n(a){function d(a){var b=P({},a);b.data=a.data?dd(a.data,a.headers,a.status,f.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:l.reject(b)}function e(a,b){var c, +d={};m(a,function(a,e){x(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!da.isObject(a))throw I("$http")("badreq",a);var f=P({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);f.headers=function(a){var c=b.headers,d=P({},a.headers),f,g,h,c=P({},c.common,c[F(a.method)]);a:for(f in c){g=F(f);for(h in d)if(F(h)===g)continue a;d[f]=c[f]}return e(d,ja(a))}(a);f.method=sb(f.method);f.paramSerializer=G(f.paramSerializer)?k.get(f.paramSerializer): +f.paramSerializer;var g=[function(a){var c=a.headers,e=dd(a.data,cd(c),w,a.transformRequest);v(e)&&m(c,function(a,b){"content-type"===F(b)&&delete c[b]});v(a.withCredentials)&&!v(b.withCredentials)&&(a.withCredentials=b.withCredentials);return p(a,e).then(d,d)},w],h=l.when(f);for(m(E,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();var r=g.shift(),h=h.then(a,r)}c?(h.success=function(a){Sa(a, +"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Sa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=ed("success"),h.error=ed("error"));return h}function p(c,d){function h(b,c,d,e){function f(){k(c,b,d,e)}L&&(200<=b&&300>b?L.put(ba,[b,c,bd(d),e]):L.remove(ba));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function k(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?O.resolve:O.reject)({data:a,status:b,headers:cd(d),config:c,statusText:e})} +function p(a){k(a.data,a.status,ja(a.headers()),a.statusText)}function E(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var O=l.defer(),H=O.promise,L,m,S=c.headers,ba=r(c.url,c.paramSerializer(c.params));n.pendingRequests.push(c);H.then(E,E);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(L=C(c.cache)?c.cache:C(b.cache)?b.cache:t);L&&(m=L.get(ba),A(m)?m&&x(m.then)?m.then(p,p):J(m)?k(m[1],m[0],ja(m[2]),m[3]):k(m,200,{},"OK"):L.put(ba,H));v(m)&&((m= +fd(c.url)?f()[c.xsrfCookieName||b.xsrfCookieName]:w)&&(S[c.xsrfHeaderName||b.xsrfHeaderName]=m),e(c.method,ba,d,h,S,c.timeout,c.withCredentials,c.responseType));return H}function r(a,b){0=l&&(u.resolve(E), +t(q.$$intervalId),delete f[q.$$intervalId]);K||b.$apply()},g);f[q.$$intervalId]=u;return q}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function gd(b,a){var c=Aa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=Y(c.port)||Tf[c.protocol]||null}function hd(b,a){var c="/"!==b.charAt(0); +c&&(b="/"+b);var d=Aa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=yc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function sa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Cb(b){return b.replace(/(#.+)|#$/,"$1")}function bc(b,a,c){this.$$html5=!0;c=c||"";gd(b,this);this.$$parse=function(b){var c=sa(a, +b);if(!G(c))throw Db("ipthprfx",b,a);hd(c,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var b=Pb(this.$$search),c=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=a+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,h;A(f=sa(b,d))?(h=f,h=A(f=sa(c,f))?a+(sa("/",f)||f):b+h):A(f=sa(a,d))?h=a+f:a==d+"/"&&(h=a);h&&this.$$parse(h);return!!h}}function cc(b,a,c){gd(b,this); +this.$$parse=function(d){var e=sa(b,d)||sa(a,d),f;v(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",v(e)&&(b=d,this.replace())):(f=sa(c,e),v(f)&&(f=e));hd(f,this);d=this.$$path;var e=b,h=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));h.exec(f)||(d=(f=h.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var a=Pb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+e;this.$$absUrl=b+(this.$$url?c+this.$$url:"")};this.$$parseLinkUrl= +function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function id(b,a,c){this.$$html5=!0;cc.apply(this,arguments);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,h;b==Ja(d)?f=d:(h=sa(a,d))?f=b+c+h:a===d+"/"&&(f=a);f&&this.$$parse(f);return!!f};this.$$compose=function(){var a=Pb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+e;this.$$absUrl=b+c+this.$$url}}function Eb(b){return function(){return this[b]}}function jd(b, +a){return function(c){if(v(c))return this[b];this[b]=a(c);this.$$compose();return this}}function hf(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return A(a)?(b=a,this):b};this.html5Mode=function(b){return bb(b)?(a.enabled=b,this):C(b)?(bb(b.enabled)&&(a.enabled=b.enabled),bb(b.requireBase)&&(a.requireBase=b.requireBase),bb(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c, +d,e,f,h){function g(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var p=d.url(),r;if(a.enabled){if(!n&&a.requireBase)throw Db("nobase");r=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(n||"/");n=e.history?bc:id}else r=Ja(p),n=cc;var t=r.substr(0,Ja(r).lastIndexOf("/")+1);k=new n(r,t,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state(); +var E=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=B(b.target);"a"!==wa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");C(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=Aa(g.animVal).href);E.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),h.angular["ff-684208-preventDefault"]= +!0))}});Cb(k.absUrl())!=Cb(p)&&d.url(k.absUrl(),!0);var K=!0;d.onUrlChange(function(a,b){v(sa(t,a))?h.location.href=a:(c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(K=!1,l(d,e)))}),c.$$phase||c.$digest())});c.$watch(function(){var a=Cb(d.url()),b=Cb(k.absUrl()),f=d.state(),h=k.$$replace,r=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(K||r)K=!1, +c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(r&&g(b,h,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function jf(){var b=!0,a=this;this.debugEnabled=function(a){return A(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a= +a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||y;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function Xa(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"=== +b||"__proto__"===b)throw Z("isecfld",a);return b}function kd(b,a){b+="";if(!G(b))throw Z("iseccst",a);return b}function Ba(b,a){if(b){if(b.constructor===b)throw Z("isecfn",a);if(b.window===b)throw Z("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Z("isecdom",a);if(b===Object)throw Z("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw Z("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw Z("isecff",a);}}function md(b,a){if(b&&(b===(0).constructor||b===(!1).constructor|| +b==="".constructor||b==={}.constructor||b===[].constructor||b===Function.constructor))throw Z("isecaf",a);}function Xf(b,a){return"undefined"!==typeof b?b:a}function nd(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function U(b,a){var c,d;switch(b.type){case s.Program:c=!0;m(b.body,function(b){U(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case s.Literal:b.constant=!0;b.toWatch=[];break;case s.UnaryExpression:U(b.argument,a);b.constant=b.argument.constant;b.toWatch= +b.argument.toWatch;break;case s.BinaryExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case s.LogicalExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case s.ConditionalExpression:U(b.test,a);U(b.alternate,a);U(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case s.Identifier:b.constant= +!1;b.toWatch=[b];break;case s.MemberExpression:U(b.object,a);b.computed&&U(b.property,a);b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case s.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){U(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case s.AssignmentExpression:U(b.left,a);U(b.right,a);b.constant=b.left.constant&&b.right.constant; +b.toWatch=[b];break;case s.ArrayExpression:c=!0;d=[];m(b.elements,function(b){U(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case s.ObjectExpression:c=!0;d=[];m(b.properties,function(b){U(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case s.ThisExpression:b.constant=!1,b.toWatch=[]}}function od(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:w}} +function pd(b){return b.type===s.Identifier||b.type===s.MemberExpression}function qd(b){if(1===b.body.length&&pd(b.body[0].expression))return{type:s.AssignmentExpression,left:b.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function rd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===s.Literal||b.body[0].expression.type===s.ArrayExpression||b.body[0].expression.type===s.ObjectExpression)}function sd(b,a){this.astBuilder=b;this.$filter=a}function td(b, +a){this.astBuilder=b;this.$filter=a}function Fb(b){return"constructor"==b}function dc(b){return x(b.valueOf)?b.valueOf():Yf.call(b)}function kf(){var b=fa(),a=fa();this.$get=["$filter",function(c){function d(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=dc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function e(a,b,c,e,f){var g=e.inputs,h;if(1===g.length){var k=d,g=g[0];return a.$watch(function(a){var b=g(a);d(b,k)||(h=e(a,w,w,[b]),k=b&&dc(b));return h},b,c,f)}for(var l=[],n=[],p=0, +m=g.length;p=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;fa)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1 +t&&(D=4-t,u[D]||(u[D]=[]),u[D].push({msg:x(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:g}));else if(b===d){r=!1;break a}}catch(y){h(y)}if(!(k=m.$$watchersCount&&m.$$childHead||m!==this&&m.$$nextSibling))for(;m!==this&&!(k=m.$$nextSibling);)m=m.$parent}while(m=k);if((r||z.length)&&!t--)throw q.$$phase=null,c("infdig",a,u);}while(r||z.length);for(q.$$phase=null;N.length;)try{N.shift()()}catch(A){h(A)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy"); +this.$$destroyed=!0;this===q&&l.$$applicationDestroyed();r(this,-this.$$watchersCount);for(var b in this.$$listenerCount)t(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=y;this.$on= +this.$watch=this.$watchGroup=function(){return y};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){q.$$phase||z.length||l.defer(function(){z.length&&q.$digest()});z.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){N.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{q.$$phase=null}}catch(b){h(b)}finally{try{q.$digest()}catch(c){throw h(c), +c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&w.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,t(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,g={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1}, +k=db([g],arguments,1),l,n;do{d=e.$$listeners[a]||c;g.currentScope=e;l=0;for(n=d.length;lWa)throw Ca("iequirks");var d=ja(oa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=$a);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,h=d.trustAs;m(oa,function(a,b){var c=F(b);d[gb("parse_as_"+c)]=function(b){return e(a,b)};d[gb("get_trusted_"+c)]=function(b){return f(a,b)};d[gb("trust_as_"+ +c)]=function(b){return h(a,b)}});return d}]}function qf(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(F((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},h,g=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var p in l)if(k=g.exec(p)){h=k[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||h+"Transition"in l);n=!!("animation"in l||h+"Animation"in +l);!d||k&&n||(k=G(l.webkitTransition),n=G(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Wa)return!1;if(v(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Fa(),vendorPrefix:h,transitions:k,animations:n,android:d}}]}function sf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,h){e.totalPendingRequests++;G(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var g=a.defaults&&a.defaults.transformResponse; +J(g)?g=g.filter(function(a){return a!==Zb}):g===Zb&&(g=null);return a.get(f,{cache:b,transformResponse:g})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f,a.data);return a.data},function(a){if(!h)throw ga("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function tf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var h=[];m(a,function(a){var d= +da.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+vd(b)+"(\\s|\\||$)")).test(d)&&h.push(a):-1!=d.indexOf(b)&&h.push(a)})});return h},findModels:function(a,b,c){for(var h=["ng-","data-ng-","ng\\:"],g=0;gb;b=Math.abs(b);var h=Infinity===b;if(!h&&!isFinite(b))return"";var g=b+"",l="",k=!1,n=[];h&&(l="\u221e");if(!h&&-1!==g.indexOf("e")){var p=g.match(/([\d\.]+)e(-?)(\d+)/);p&&"-"==p[2]&&p[3]>e+1?b=0:(l=g,k=!0)}if(h||k)0b&&(l=b.toFixed(e),b=parseFloat(l),l=l.replace(hc,d));else{h=(g.split(hc)[1]||"").length;v(e)&&(e=Math.min(Math.max(a.minFrac,h),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var h=(""+b).split(hc),g=h[0],h=h[1]||"",p=0, +r=a.lgSize,t=a.gSize;if(g.length>=r+t)for(p=g.length-r,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=sb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function ic(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function Ad(b){function a(a){var b;if(b= +a.match(c)){a=new Date(0);var f=0,h=0,g=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=Y(b[9]+b[10]),h=Y(b[9]+b[11]));g.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));f=Y(b[4]||0)-f;h=Y(b[5]||0)-h;g=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,h,g,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var h="",g=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;G(c)&&(c= +fg.test(c)?Y(c):a(c));V(c)&&(c=new Date(c));if(!ea(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(g=db(g,k,1),e=g.pop()):(g.push(e),e=null);var n=c.getTimezoneOffset();f&&(n=wc(f,c.getTimezoneOffset()),c=Ob(c,f,!0));m(g,function(a){l=hg[a];h+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return h}}function ag(){return function(b,a){v(a)&&(a=2);return eb(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):Y(a);if(isNaN(a))return b; +V(b)&&(b=b.toString());if(!J(b)&&!G(b))return b;c=!c||isNaN(c)?0:Y(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0,c+a),c)}}function Cd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,g=$a;if(x(a))g=a;else if(G(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(g=b(a),g.constant))var l=g(),g=function(a){return a[l]}}return{get:g,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0; +default:return!1}}return function(b,e,f){if(!Da(b))return b;J(e)||(e=[e]);0===e.length&&(e=["+"]);var h=a(e,f);h.push({get:function(){return{}},descending:f?-1:1});b=Array.prototype.map.call(b,function(a,b){return{value:a,predicateValues:h.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(qc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}}); +b.sort(function(a,b){for(var c=0,d=0,e=h.length;db||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){var b=d.$isEmpty(d.$viewValue)? +"":d.$viewValue;a.val()!==b&&a.val(b)}}function Kb(b,a){return function(c,d){var e,f;if(ea(c))return c;if(G(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c=s};h.$observe("min",function(a){s=r(a);g.$validate()})}if(A(h.max)||h.ngMax){var u;g.$validators.max=function(a){return!p(a)||v(u)||c(a)<=u};h.$observe("max",function(a){u=r(a);g.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=C(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?w:b})}function Jd(b,a,c,d,e){if(A(d)){b= +b(d);if(!b.constant)throw lb("constexpr",c,d);return b(a)}return e}function kc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,Cf=/<([\w:-]+)/,Df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, +ma={option:[1,'"],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option;ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead;ma.th=ma.td;var Ra=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(Q).on("load",a))}, +toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?B(this[b]):B(this[this.length+b])},length:0,push:kg,sort:[].sort,splice:[].splice},Bb={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Bb[F(b)]=b});var Sc={};m("input select option textarea button form details".split(" "),function(b){Sc[b]=!0});var $c={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"}; +m({data:Vb,removeData:vb,hasData:function(b){for(var a in hb[b.ng339])return!0;return!1}},function(b,a){R[a]=b});m({data:Vb,inheritedData:Ab,scope:function(b){return B.data(b,"$scope")||Ab(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return B.data(b,"$isolateScope")||B.data(b,"$isolateScopeNoTemplate")},controller:Pc,injector:function(b){return Ab(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:xb,css:function(b,a,c){a=gb(a);if(A(c))b.style[a]=c;else return b.style[a]}, +attr:function(b,a,c){var d=b.nodeType;if(d!==Pa&&2!==d&&8!==d)if(d=F(a),Bb[d])if(A(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||y).specified?d:w;else if(A(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?w:b},prop:function(b,a,c){if(A(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(v(b)){var d=a.nodeType;return d===pa||d===Pa?a.textContent:""}a.textContent=b}b.$dv="";return b}(), +val:function(b,a){if(v(a)){if(b.multiple&&"select"===wa(b)){var c=[];m(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(v(a))return b.innerHTML;ub(b,!0);b.innerHTML=a},empty:Qc},function(b,a){R.prototype[a]=function(a,d){var e,f,h=this.length;if(b!==Qc&&v(2==b.length&&b!==xb&&b!==Pc?a:d)){if(C(a)){for(e=0;e <= >= && || ! = |".split(" "),function(a){Lb[a]=!0});var rg={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},ec=function(a){this.options=a};ec.prototype={constructor:ec,lex:function(a){this.text=a;this.index=0;for(this.tokens= +[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"=== +a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=A(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Z("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">=");)a={type:s.BinaryExpression,operator:c.text, +left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:s.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:c.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()}, +primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=ha(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()}, +this.consume(")")):"["===c.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression()); +while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break; +c={type:s.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,c){throw Z("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw Z("ueoe",this.text);var c=this.expect(a); +c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw Z("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var h=a.text;if(h===c||h===d||h===e||h===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:s.Literal,value:!0}, +"false":{type:s.Literal,value:!1},"null":{type:s.Literal,value:null},undefined:{type:s.Literal,value:w},"this":{type:s.ThisExpression}}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};U(e,d.$filter);var f="",h;this.stage="assign";if(h=qd(e))this.state.computing="assign",f=this.nextId(),this.recurse(h,f),this.return_(f),f="fn.assign="+this.generateFunction("assign", +"s,v,l");h=od(e.body);d.stage="inputs";m(h,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue", +"ensureSafeAssignContext","ifDefined","plus","text",f))(this.$filter,Xa,Ba,ld,kd,md,Xf,nd,a);this.state=this.stage=w;f.literal=rd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")},generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a= +[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,h){var g,l,k=this,n,p;e=e||y;if(!h&&A(a.watchId))c=c||this.nextId(),this.if_("i",this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case s.Program:m(a.body, +function(c,d){k.recurse(c.expression,w,w,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case s.Literal:p=this.escape(a.value);this.assign(c,p);e(p);break;case s.UnaryExpression:this.recurse(a.argument,w,w,function(a){l=a});p=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,p);e(p);break;case s.BinaryExpression:this.recurse(a.left,w,w,function(a){g=a});this.recurse(a.right,w,w,function(a){l=a});p="+"===a.operator?this.plus(g,l):"-"===a.operator?this.ifDefined(g, +0)+a.operator+this.ifDefined(l,0):"("+g+")"+a.operator+"("+l+")";this.assign(c,p);e(p);break;case s.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case s.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c);break;case s.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l", +a.name)+"?l:s"),d.computed=!1,d.name=a.name);Xa(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case s.MemberExpression:g=d&&(d.context=this.nextId())|| +this.nextId();c=c||this.nextId();k.recurse(a.object,g,w,function(){k.if_(k.notNull(g),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.getStringValue(l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(g,l)),k.lazyAssign(k.computedMember(g,l),"{}")),p=k.ensureSafeObject(k.computedMember(g,l)),k.assign(c,p),d&&(d.computed=!0,d.name=l);else{Xa(a.property.name);f&&1!==f&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name), +"{}"));p=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))p=k.ensureSafeObject(p);k.assign(c,p);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case s.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),p=l+"("+n.join(",")+")",k.assign(c,p),e(c)):(l=k.nextId(),g={},n=[],k.recurse(a.callee,l,g,function(){k.if_(k.notNull(l), +function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),w,function(a){n.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),p=k.member(g.context,g.name,g.computed)+"("+n.join(",")+")"):p=l+"("+n.join(",")+")";p=k.ensureSafeObject(p);k.assign(c,p)},function(){k.assign(c,"undefined")});e(c)}));break;case s.AssignmentExpression:l=this.nextId();g={};if(!pd(a.left))throw Z("lval");this.recurse(a.left,w,g,function(){k.if_(k.notNull(g.context), +function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);p=k.member(g.context,g.name,g.computed)+a.operator+l;k.assign(c,p);e(c||p)})},1);break;case s.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),w,function(a){n.push(a)})});p="["+n.join(",")+"]";this.assign(c,p);e(p);break;case s.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value,k.nextId(),w,function(c){n.push(k.escape(a.key.type=== +s.Identifier?a.key.name:""+a.key.value)+":"+c)})});p="{"+n.join(",")+"}";this.assign(c,p);e(p);break;case s.ThisExpression:this.assign(c,"s");e("s");break;case s.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]= +this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+"."+c},computedMember:function(a, +c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+ +a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,c,d,e,f,h){var g=this;return function(){g.recurse(a,c,d,e,f,h)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g, +stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(G(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Z("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}}; +td.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;U(e,d.$filter);var f,h;if(f=qd(e))h=this.recurse(f);f=od(e.body);var g;f&&(g=[],m(f,function(a,c){var e=d.recurse(a);a.input=e;g.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};h&&(f.assign=function(a,c,d){return h(a,d,c)});g&&(f.inputs= +g);f.literal=rd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,h=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,c);case s.UnaryExpression:return f=this.recurse(a.argument),this["unary"+a.operator](f,c);case s.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case s.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e, +f,c);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case s.Identifier:return Xa(a.name,h.expression),h.identifier(a.name,h.expensiveChecks||Fb(a.name),c,d,h.expression);case s.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Xa(a.property.name,h.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,h.expression):this.nonComputedMember(e,f, +h.expensiveChecks,c,d,h.expression);case s.CallExpression:return g=[],m(a.arguments,function(a){g.push(h.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,h){for(var r=[],m=0;m":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)>c(e,f,h,g);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)<=c(e,f,h,g);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)>=c(e,f,h,g);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e, +f,h,g){e=a(e,f,h,g)&&c(e,f,h,g);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,h,g){e=a(e,f,h,g)||c(e,f,h,g);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,h,g,l){f=a(f,h,g,l)?c(f,h,g,l):d(f,h,g,l);return e?{value:f}:f}},value:function(a,c){return function(){return c?{context:w,name:w,value:a}:a}},identifier:function(a,c,d,e,f){return function(h,g,l,k){h=g&&a in g?g:h;e&&1!==e&&h&&!h[a]&&(h[a]={});g=h?h[a]:w;c&&Ba(g,f);return d?{context:h,name:a,value:g}: +g}},computedMember:function(a,c,d,e,f){return function(h,g,l,k){var n=a(h,g,l,k),p,m;null!=n&&(p=c(h,g,l,k),p=kd(p),Xa(p,f),e&&1!==e&&n&&!n[p]&&(n[p]={}),m=n[p],Ba(m,f));return d?{context:n,name:p,value:m}:m}},nonComputedMember:function(a,c,d,e,f,h){return function(g,l,k,n){g=a(g,l,k,n);f&&1!==f&&g&&!g[c]&&(g[c]={});l=null!=g?g[c]:w;(d||Fb(c))&&Ba(l,h);return e?{context:g,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,h){return h?h[c]:a(d,e,f)}}};var fc=function(a,c,d){this.lexer= +a;this.$filter=c;this.options=d;this.ast=new s(this.lexer);this.astCompiler=d.csp?new td(this.ast,c):new sd(this.ast,c)};fc.prototype={constructor:fc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};fa();fa();var Yf=Object.prototype.valueOf,Ca=I("$sce"),oa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ga=I("$compile"),$=X.createElement("a"),xd=Aa(Q.location.href);yd.$inject=["$document"];Kc.$inject=["$provide"];zd.$inject=["$locale"];Bd.$inject= +["$locale"];var hc=".",hg={yyyy:aa("FullYear",4),yy:aa("FullYear",2,0,!0),y:aa("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:aa("Month",2,1),M:aa("Month",1,1),dd:aa("Date",2),d:aa("Date",1),HH:aa("Hours",2),H:aa("Hours",1),hh:aa("Hours",2,-12),h:aa("Hours",1,-12),mm:aa("Minutes",2),m:aa("Minutes",1),ss:aa("Seconds",2),s:aa("Seconds",1),sss:aa("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<= +a?"+":"")+(Gb(Math[0=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;Ad.$inject=["$locale"];var cg=qa(F),dg=qa(sb);Cd.$inject=["$parse"];var he=qa({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"=== +va.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),tb={};m(Bb,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=ya("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});tb[e]=function(){return{restrict:"A",priority:100,link:f}}}});m($c,function(a,c){tb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern", +new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=ya("ng-"+a);tb[c]=function(){return{priority:99,link:function(d,e,f){var h=a,g=a;"href"===a&&"[object SVGAnimatedString]"===va.call(e.prop("href"))&&(g="xlinkHref",f.$attr[g]="xlink:href",h=null);f.$observe(c,function(c){c?(f.$set(g,c),Wa&&h&&e.prop(h,f[g])):"href"===a&&f.$set(g,null)})}}}});var Ib={$addControl:y,$$renameControl:function(a,c){a.$name=c},$removeControl:y,$setValidity:y, +$setDirty:y,$setPristine:y,$setSubmitted:y};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout","$parse",function(c,d){function e(a){return""===a?d('this[""]').assign:d(a).assign||y}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Gd,compile:function(d,h){d.addClass(Ya).addClass(mb);var g=h.name?"name":a&&h.ngForm?"ngForm":!1;return{pre:function(a,d,f,h){var m=h[0];if(!("action"in f)){var t=function(c){a.$apply(function(){m.$commitViewValue(); +m.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",t,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",t,!1)},0,!1)})}(h[1]||m.$$parentForm).$addControl(m);var s=g?e(m.$name):y;g&&(s(a,m),f.$observe(g,function(c){m.$name!==c&&(s(a,w),m.$$parentForm.$$renameControl(m,c),s=e(m.$name),s(a,m))}));d.on("$destroy",function(){m.$$parentForm.$removeControl(m);s(a,w);P(m,Ib)})}}}}}]},ie=Od(),ve=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, +sg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,tg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,ug=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,lc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/,Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e)},date:kb("date", +Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",lc,function(a,c){if(ea(a))return a;if(G(a)){lc.lastIndex=0;var d=lc.exec(a);if(d){var e=+d[1],f=+d[2],h=d=0,g=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),h=c.getMinutes(),g=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,h,g,l)}}return NaN},"yyyy-Www"), +month:kb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,h){Id(a,c,d,e);jb(a,c,d,e,f,h);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:ug.test(a)?parseFloat(a):w});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw lb("numfmt",a);a=a.toString()}return a});if(A(d.min)||d.ngMin){var g;e.$validators.min=function(a){return e.$isEmpty(a)||v(g)||a>=g};d.$observe("min",function(a){A(a)&&!V(a)&&(a=parseFloat(a,10));g=V(a)&&!isNaN(a)?a:w;e.$validate()})}if(A(d.max)|| +d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||v(l)||a<=l};d.$observe("max",function(a){A(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:w;e.$validate()})}},url:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},email:function(a,c,d,e,f,h){jb(a,c,d,e,f,h);jc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||tg.test(d)}},radio:function(a,c, +d,e){v(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,h,g,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a, +k)});e.$parsers.push(function(a){return a?k:n})},hidden:y,button:y,submit:y,reset:y,file:y},Ec=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,h,g,l){l[0]&&(Td[F(g.type)]||Td.text)(f,h,g,l[0],c,a,d,e)}}}}],vg=/^(true|false|\d+)$/,Ne=function(){return{restrict:"A",priority:100,compile:function(a,c){return vg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value", +a)})}}}},ne=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=v(a)?"":a})}}}}],pe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,h){d=a(f.attr(h.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];h.$observe("ngBindTemplate",function(a){f.textContent=v(a)?"":a})}}}}],oe=["$sce","$parse", +"$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var h=c(f.ngBindHtml),g=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(g,function(){e.html(a.getTrustedHtml(h(c))||"")})}}}}],Me=qa({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),qe=kc("",!0),se=kc("Odd",0),re=kc("Even",1),te=Na({compile:function(a,c){c.$set("ngCloak", +w);a.removeClass("ng-cloak")}}),ue=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Jc={},wg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ya("ng-"+a);Jc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,h){var g=d(h[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){g(c,{$event:d})}; +wg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var xe=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,h){var g,l,k;c.$watch(e.ngIf,function(c){c?l||h(function(c,f){l=f;c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+" ");g={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),g&&(k=rb(g.clone),a.leave(k).then(function(){k=null}),g=null))})}}}],ye=["$templateRequest","$anchorScroll", +"$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:da.noop,compile:function(e,f){var h=f.ngInclude||f.src,g=f.onload||"",l=f.autoscroll;return function(e,f,m,r,t){var s=0,v,u,q,z=function(){u&&(u.remove(),u=null);v&&(v.$destroy(),v=null);q&&(d.leave(q).then(function(){u=null}),u=q,q=null)};e.$watch(h,function(h){var m=function(){!A(l)||l&&!e.$eval(l)||c()},p=++s;h?(a(h,!0).then(function(a){if(p===s){var c=e.$new();r.template=a;a=t(c,function(a){z(); +d.enter(a,null,f).then(m)});v=c;q=a;v.$emit("$includeContentLoaded",h);e.$eval(g)}},function(){p===s&&(z(),e.$emit("$includeContentError",h))}),e.$emit("$includeContentRequested",h)):(z(),r.template=null)})}}}}],Pe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Mc(f.template,X).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ze=Na({priority:450, +compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Le=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",h="false"!==d.ngTrim,g=h?T(f):f;e.$parsers.push(function(a){if(!v(a)){var c=[];a&&m(a.split(g),function(a){a&&c.push(h?T(a):a)});return c}});e.$formatters.push(function(a){return J(a)?a.join(f):w});e.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",Kd="ng-invalid",Ya="ng-pristine",Jb="ng-dirty",Md= +"ng-pending",lb=I("ngModel"),xg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,h,g,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=w;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending= +w;this.$name=n(d.name||"",!1)(a);this.$$parentForm=Ib;var p=f(d.ngModel),r=p.assign,t=p,s=r,K=null,u,q=this;this.$$setOptions=function(a){if((q.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);x(d)&&(d=c(a));return d};s=function(a,c){x(p(a))?g(a,{$$$p:q.$modelValue}):r(a,q.$modelValue)}}else if(!p.assign)throw lb("nonassign",d.ngModel,xa(e));};this.$render=y;this.$isEmpty=function(a){return v(a)||""===a||null===a||a!==a};var z=0;Hd({ctrl:this,$element:e, +set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},$animate:h});this.$setPristine=function(){q.$dirty=!1;q.$pristine=!0;h.removeClass(e,Jb);h.addClass(e,Ya)};this.$setDirty=function(){q.$dirty=!0;q.$pristine=!1;h.removeClass(e,Ya);h.addClass(e,Jb);q.$$parentForm.$setDirty()};this.$setUntouched=function(){q.$touched=!1;q.$untouched=!0;h.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){q.$touched=!0;q.$untouched=!1;h.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue= +function(){g.cancel(K);q.$viewValue=q.$$lastCommittedViewValue;q.$render()};this.$validate=function(){if(!V(q.$modelValue)||!isNaN(q.$modelValue)){var a=q.$$rawModelValue,c=q.$valid,d=q.$modelValue,e=q.$options&&q.$options.allowInvalid;q.$$runValidators(a,q.$$lastCommittedViewValue,function(f){e||c===f||(q.$modelValue=f?a:w,q.$modelValue!==d&&q.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d){function e(){var d=!0;m(q.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d? +!0:(m(q.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(q.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!x(k.then))throw lb("$asyncValidators",k);g(h,w);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},y):h(!0)}function g(a,c){l===z&&q.$setValidity(a,c)}function h(a){l===z&&d(a)}z++;var l=z;(function(){var a=q.$$parserName||"parse";if(v(u))g(a,null);else return u||(m(q.$validators,function(a,c){g(c,null)}),m(q.$asyncValidators, +function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=q.$viewValue;g.cancel(K);if(q.$$lastCommittedViewValue!==a||""===a&&q.$$hasNativeValidators)q.$$lastCommittedViewValue=a,q.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=q.$$lastCommittedViewValue;if(u=v(c)?w:!0)for(var d=0;df||e.$isEmpty(c)||c.length<=f}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=Y(a)||0;e.$validate()}); +e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};Q.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(da),da.module("ngLocale",[],["$provide",function(a){function c(a){a+="";var c=a.indexOf(".");return-1==c?0:a.length-c-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "), +SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3, +maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",pluralCat:function(a,e){var f=a|0,h=e;w===h&&(h=Math.min(c(a),3));Math.pow(10,h);return 1==f&&0==h?"one":"other"}})}]),B(X).ready(function(){Zd(X,zc)}))})(window,document);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(''); //# sourceMappingURL=angular.min.js.map diff --git a/awx/ui/client/lib/angular/angular.min.js.gzip b/awx/ui/client/lib/angular/angular.min.js.gzip index 64c240da57..ede8ca3265 100644 Binary files a/awx/ui/client/lib/angular/angular.min.js.gzip and b/awx/ui/client/lib/angular/angular.min.js.gzip differ diff --git a/awx/ui/client/lib/angular/angular.min.js.map b/awx/ui/client/lib/angular/angular.min.js.map index 71ce90dcc5..a57c997f94 100644 --- a/awx/ui/client/lib/angular/angular.min.js.map +++ b/awx/ui/client/lib/angular/angular.min.js.map @@ -1,8 +1,8 @@ { "version":3, "file":"angular.min.js", -"lineCount":289, -"mappings":"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", +"lineCount":293, +"mappings":"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", "sources":["angular.js"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","Object","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","baseExtend","dst","objs","deep","ii","isObject","j","jj","src","isDate","Date","valueOf","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","hasCustomToString","toString","prototype","isUndefined","isDefined","getPrototypeOf","isNumber","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","TYPED_ARRAY_REGEXP","test","push","constructor","getTime","RegExp","match","lastIndex","emptyObject","shallowCopy","charAt","equals","o1","o2","t1","t2","keySet","createMap","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","timezoneOffset","getTimezoneOffset","setMinutes","getMinutes","minutes","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$CoreAnimateRunnerProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","returnedValue","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","reloadLocation","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","bindToController","controllerAs","CNTRL_REG","$$bindings","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","destroyBindings","$new","$$destroyBindings","$on","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","msie","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","substring","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","$scope","$attrs","$transclude","controllerInstance","hasElementTranscludeDirective","linkNode","thisLinkFn","controllersBoundTransclude","cloneAttachFn","scopeToChild","templateDirective","$$originalDirective","initializeDirectiveBindings","scopeDirective","newScopeDirective","controllerForBindings","identifier","controllerResult","invokeLinkFn","template","templateUrl","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","expando","k","kk","annotation","newScope","onNewScopeDestroyed","lastValue","parentGet","parentSet","compare","$observe","literal","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","throwNoconcat","compute","interpolationFn","$$watchDelegate","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","ERANAMES","ERAS","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","base","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","setter","setValue","fullExp","propertyObj","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","objectEquality","parsedExpression","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","$parseOptions","expensiveChecks","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","flush","taskQueue","task","taskCount","queueFn","asyncFn","cancelLastRAF","rafFn","cancelQueueFn","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","Scope","$parent","$$prevSibling","$root","beginPhase","phase","incrementWatchersCount","current","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","amount","currencySymbol","fractionSize","formatNumber","number","groupSep","decimalSep","isNegative","abs","isInfinity","Infinity","isFinite","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","eraGetter","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","format","NUMBER_STRING","DATE_FORMATS_SPLIT","dateTimezoneOffset","DATE_FORMATS","spacing","limit","processPredicates","sortPredicate","reverseOrder","map","predicate","descending","predicates","compareValues","getComparisonObject","predicateValues","doComparison","v1","v2","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","isActive_","active","Function","name_","el","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","jqLiteHasData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","AnimateRunner","end","resume","pause","complete","pass","fail","postDigestElements","addRemoveClassesPostDigest","add","existing","pin","domOperation","from","to","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","runner","enter","move","leave","addclass","animate","tempClasses","APPLICATION_JSON","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","isExpOperator","start","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","generateFunction","fnKey","intoId","return_","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","stringEscapeRegex","stringEscapeFn","c","charCodeAt","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","nameAttr","ngFormPreLink","handleFormSubmission","parentFormCtrl","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","ngModelCtrl.$render","lastView","lastViewRef","selectMultipleWatch","chromeHack","selectCtrlName","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","$$csp","head"] +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","Object","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","baseExtend","dst","objs","deep","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","hasCustomToString","toString","prototype","isUndefined","isDefined","getPrototypeOf","isNumber","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","TYPED_ARRAY_REGEXP","test","push","constructor","getTime","match","lastIndex","cloneNode","emptyObject","shallowCopy","charAt","equals","o1","o2","t1","t2","keySet","createMap","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","timezoneOffset","getTimezoneOffset","setMinutes","getMinutes","minutes","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$CoreAnimateRunnerProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","returnedValue","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","bindToController","controllerAs","CNTRL_REG","$$bindings","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","destroyBindings","$new","$$destroyBindings","$on","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","msie","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","$scope","$attrs","$transclude","controllerInstance","hasElementTranscludeDirective","linkNode","thisLinkFn","controllersBoundTransclude","cloneAttachFn","scopeToChild","templateDirective","$$originalDirective","initializeDirectiveBindings","scopeDirective","newScopeDirective","controllerForBindings","identifier","controllerResult","invokeLinkFn","template","templateUrl","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","expando","k","kk","annotation","newScope","onNewScopeDestroyed","lastValue","parentGet","parentSet","compare","$observe","literal","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","$httpMinErrLegacyFn","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","throwNoconcat","compute","interpolationFn","$$watchDelegate","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","base","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","Function","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","objectEquality","parsedExpression","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","$parseOptions","expensiveChecks","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","Scope","$parent","$$prevSibling","$root","beginPhase","phase","incrementWatchersCount","current","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","groupSep","decimalSep","isNegative","abs","isInfinity","Infinity","isFinite","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","minFrac","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","num","digits","neg","dateGetter","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","dateTimezoneOffset","DATE_FORMATS","spacing","limit","processPredicates","sortPredicate","reverseOrder","map","predicate","descending","predicates","compareValues","getComparisonObject","predicateValues","doComparison","v1","v2","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","jqLiteHasData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","AnimateRunner","end","resume","pause","complete","pass","fail","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","runner","enter","move","leave","addclass","animate","tempClasses","RAFPromise","getPromise","f1","f2","closed","cleanupStyles","start","domNode","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeMemberName","addEnsureSafeFunction","member","addEnsureSafeAssignContext","filterName","defaultValue","stringEscapeRegex","stringEscapeFn","c","charCodeAt","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","ngModelCtrl.$render","lastView","lastViewRef","selectMultipleWatch","valueInterpolated","optionValue","selectCtrlName","valueAttributeObserveAction","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","pow","ONE","OTHER","$$csp","head"] } diff --git a/awx/ui/client/lib/angular/bower.json b/awx/ui/client/lib/angular/bower.json index 25dbde948b..12b4e8cf9c 100644 --- a/awx/ui/client/lib/angular/bower.json +++ b/awx/ui/client/lib/angular/bower.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.4.3", + "version": "1.4.7", "main": "./angular.js", "ignore": [], "dependencies": { diff --git a/awx/ui/client/lib/angular/package.json b/awx/ui/client/lib/angular/package.json index 28ac057ca6..c39a534caa 100644 --- a/awx/ui/client/lib/angular/package.json +++ b/awx/ui/client/lib/angular/package.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.4.3", + "version": "1.4.7", "description": "HTML enhanced for web apps", "main": "index.js", "scripts": { diff --git a/awx/ui/client/lib/kapusta-jquery.sparkline/.bower.json b/awx/ui/client/lib/kapusta-jquery.sparkline/.bower.json deleted file mode 100644 index 60fabdcc10..0000000000 --- a/awx/ui/client/lib/kapusta-jquery.sparkline/.bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "kapusta-jquery.sparkline", - "version": "2.1.3", - "main": "dist/jquery.sparkline.min.js", - "ignore": [ - "Changelog.txt", - "Gruntfile.js", - "package.json", - ".gitignore", - "bower.json", - "package.json", - "src" - ], - "homepage": "https://github.com/kapusta/jquery.sparkline", - "_release": "2.1.3", - "_resolution": { - "type": "version", - "tag": "2.1.3", - "commit": "1d1d6a7db64b36e342141a4a5db73390fc8baf2f" - }, - "_source": "git://github.com/kapusta/jquery.sparkline.git", - "_target": "^2.1.3", - "_originalSource": "kapusta-jquery.sparkline" -} \ No newline at end of file diff --git a/awx/ui/client/lib/kapusta-jquery.sparkline/README.md b/awx/ui/client/lib/kapusta-jquery.sparkline/README.md deleted file mode 100644 index 481402ae65..0000000000 --- a/awx/ui/client/lib/kapusta-jquery.sparkline/README.md +++ /dev/null @@ -1,28 +0,0 @@ -jQuery Sparklines -================= - -This jQuery plugin makes it easy to generate a number of different types -of sparklines directly in the browser, using online a line of two of HTML -and Javascript. - -The plugin has no dependencies other than jQuery and works with all modern -browsers and also Internet Explorer 6 and later (excanvas is not required -for IE support). - -See the [jQuery Sparkline project page](http://omnipotent.net/jquery.sparkline/) -for live examples and documentation. - -## License - -Released under the New BSD License - -(c) Splunk, Inc 2012 - - -## About this fork - -* The intent of this fork is to build the Javascript files with Grunt 0.4 and to check the built files into the repo. -* The min file is minified using [UglifyJS](https://github.com/mishoo/UglifyJS) with default settings. -* Checking in built files is [not what the original author wants](https://github.com/gwatts/jquery.sparkline/pull/77) in his repo. -* So why does this fork do that? Well, the built files will then be available to developers who use jquery.sparkline and use Bower for dependency management and Grunt to pluck the files they need in their project. This lets the developer avoid having to run Grunt in dependency directories (eg, node_modules) before running their own builds. -* In order to allow for tag level targeting via Bower, new tags will be made, starting at 2.1.3 diff --git a/awx/ui/client/lib/kapusta-jquery.sparkline/bower.json b/awx/ui/client/lib/kapusta-jquery.sparkline/bower.json deleted file mode 100644 index bd30afdd12..0000000000 --- a/awx/ui/client/lib/kapusta-jquery.sparkline/bower.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "kapusta-jquery.sparkline", - "version": "2.1.3", - "main": "dist/jquery.sparkline.min.js", - "ignore": ["Changelog.txt", "Gruntfile.js", "package.json", ".gitignore", "bower.json", "package.json", "src"] -} diff --git a/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.js b/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.js deleted file mode 100644 index fe1ddedd59..0000000000 --- a/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.js +++ /dev/null @@ -1,3080 +0,0 @@ -/** -* -* jquery.sparkline.js -* -* v@VERSION@ -* (c) Splunk, Inc -* Contact: Gareth Watts (gareth@splunk.com) -* http://omnipotent.net/jquery.sparkline/ -* -* Generates inline sparkline charts from data supplied either to the method -* or inline in HTML -* -* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag -* (Firefox 2.0+, Safari, Opera, etc) -* -* License: New BSD License -* -* Copyright (c) 2012, Splunk Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* * Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* * Neither the name of Splunk Inc nor the names of its contributors may -* be used to endorse or promote products derived from this software without -* specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -* Usage: -* $(selector).sparkline(values, options) -* -* If values is undefined or set to 'html' then the data values are read from the specified tag: -*

    Sparkline: 1,4,6,6,8,5,3,5

    -* $('.sparkline').sparkline(); -* There must be no spaces in the enclosed data set -* -* Otherwise values must be an array of numbers or null values -*

    Sparkline: This text replaced if the browser is compatible

    -* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5]) -* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5]) -* -* Values can also be specified in an HTML comment, or as a values attribute: -*

    Sparkline:

    -*

    Sparkline:

    -* $('.sparkline').sparkline(); -* -* For line charts, x values can also be specified: -*

    Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

    -* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ]) -* -* By default, options should be passed in as the second argument to the sparkline function: -* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'}) -* -* Options can also be set by passing them on the tag itself. This feature is disabled by default though -* as there's a slight performance overhead: -* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true}) -*

    Sparkline: loading

    -* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionsPrefix) -* -* Supported options: -* lineColor - Color of the line used for the chart -* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart -* width - Width of the chart - Defaults to 3 times the number of values in pixels -* height - Height of the chart - Defaults to the height of the containing element -* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied -* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied -* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax -* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied -* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied -* composite - If true then don't erase any existing chart attached to the tag, but draw -* another chart over the top - Note that width and height are ignored if an -* existing chart is detected. -* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values' -* enableTagOptions - Whether to check tags for sparkline options -* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark' -* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a -* hidden dom element, avoding a browser reflow -* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled, -* making the plugin perform much like it did in 1.x -* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled) -* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled -* defaults to false (highlights enabled) -* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase -* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body -* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied -* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis -* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis -* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip -* callback is given arguments of (sparkline, options, fields) -* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title -* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries) -* to control the format of the tooltip -* tooltipPrefix - A string to prepend to each field displayed in a tooltip -* tooltipSuffix - A string to append to each field displayed in a tooltip -* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true) -* tooltipValueLookups - An object or range map to map field values to tooltip strings -* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win") -* numberFormatter - Optional callback for formatting numbers in tooltips -* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to "," -* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "." -* numberDigitGroupCount - Number of digits between group separator - Defaults to 3 -* -* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default), -* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box' -* line - Line chart. Options: -* spotColor - Set to '' to not end each line in a circular spot -* minSpotColor - If set, color of spot at minimum value -* maxSpotColor - If set, color of spot at maximum value -* spotRadius - Radius in pixels -* lineWidth - Width of line in pixels -* normalRangeMin -* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal" -* or expected range of values -* normalRangeColor - Color to use for the above bar -* drawNormalOnTop - Draw the normal range above the chart fill color if true -* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart -* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable -* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable -* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map -* -* bar - Bar chart. Options: -* barColor - Color of bars for postive values -* negBarColor - Color of bars for negative values -* zeroColor - Color of bars with zero values -* nullColor - Color of bars with null values - Defaults to omitting the bar entirely -* barWidth - Width of bars in pixels -* colorMap - Optional mappnig of values to colors to override the *BarColor values above -* can be an Array of values to control the color of individual bars or a range map -* to specify colors for individual ranges of values -* barSpacing - Gap between bars in pixels -* zeroAxis - Centers the y-axis around zero if true -* -* tristate - Charts values of win (>0), lose (<0) or draw (=0) -* posBarColor - Color of win values -* negBarColor - Color of lose values -* zeroBarColor - Color of draw values -* barWidth - Width of bars in pixels -* barSpacing - Gap between bars in pixels -* colorMap - Optional mappnig of values to colors to override the *BarColor values above -* can be an Array of values to control the color of individual bars or a range map -* to specify colors for individual ranges of values -* -* discrete - Options: -* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height -* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor -* thresholdColor -* -* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ... -* options: -* targetColor - The color of the vertical target marker -* targetWidth - The width of the target marker in pixels -* performanceColor - The color of the performance measure horizontal bar -* rangeColors - Colors to use for each qualitative range background color -* -* pie - Pie chart. Options: -* sliceColors - An array of colors to use for pie slices -* offset - Angle in degrees to offset the first slice - Try -90 or +90 -* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border) -* borderColor - Color to use for the pie chart border - Defaults to #000 -* -* box - Box plot. Options: -* raw - Set to true to supply pre-computed plot points as values -* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier -* When set to false you can supply any number of values and the box plot will -* be computed for you. Default is false. -* showOutliers - Set to true (default) to display outliers as circles -* outlierIQR - Interquartile range used to determine outliers. Default 1.5 -* boxLineColor - Outline color of the box -* boxFillColor - Fill color for the box -* whiskerColor - Line color used for whiskers -* outlierLineColor - Outline color of outlier circles -* outlierFillColor - Fill color of the outlier circles -* spotRadius - Radius of outlier circles -* medianColor - Line color of the median line -* target - Draw a target cross hair at the supplied value (default undefined) -* -* -* -* Examples: -* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false }); -* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 }); -* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }): -* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' }); -* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' }); -* $('#pie').sparkline([1,1,2], { type:'pie' }); -*/ - -/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */ - -(function(document, Math, undefined) { // performance/minified-size optimization -(function(factory) { - if(typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (jQuery && !jQuery.fn.sparkline) { - factory(jQuery); - } -} -(function($) { - 'use strict'; - - var UNSET_OPTION = {}, - getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, - remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap, - MouseHandler, Tooltip, barHighlightMixin, - line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles, - VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0; - - - /** - * Default configuration settings - */ - getDefaults = function () { - return { - // Settings common to most/all chart types - common: { - type: 'line', - lineColor: '#00f', - fillColor: '#cdf', - defaultPixelsPerValue: 3, - width: 'auto', - height: 'auto', - composite: false, - tagValuesAttribute: 'values', - tagOptionsPrefix: 'spark', - enableTagOptions: false, - enableHighlight: true, - highlightLighten: 1.4, - tooltipSkipNull: true, - tooltipPrefix: '', - tooltipSuffix: '', - disableHiddenCheck: false, - numberFormatter: false, - numberDigitGroupCount: 3, - numberDigitGroupSep: ',', - numberDecimalMark: '.', - disableTooltips: false, - disableInteraction: false - }, - // Defaults for line charts - line: { - spotColor: '#f80', - highlightSpotColor: '#5f5', - highlightLineColor: '#f22', - spotRadius: 1.5, - minSpotColor: '#f80', - maxSpotColor: '#f80', - lineWidth: 1, - normalRangeMin: undefined, - normalRangeMax: undefined, - normalRangeColor: '#ccc', - drawNormalOnTop: false, - chartRangeMin: undefined, - chartRangeMax: undefined, - chartRangeMinX: undefined, - chartRangeMaxX: undefined, - tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}') - }, - // Defaults for bar charts - bar: { - barColor: '#3366cc', - negBarColor: '#f44', - stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', - '#dd4477', '#0099c6', '#990099'], - zeroColor: undefined, - nullColor: undefined, - zeroAxis: true, - barWidth: 4, - barSpacing: 1, - chartRangeMax: undefined, - chartRangeMin: undefined, - chartRangeClip: false, - colorMap: undefined, - tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}') - }, - // Defaults for tristate charts - tristate: { - barWidth: 4, - barSpacing: 1, - posBarColor: '#6f6', - negBarColor: '#f44', - zeroBarColor: '#999', - colorMap: {}, - tooltipFormat: new SPFormat(' {{value:map}}'), - tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } } - }, - // Defaults for discrete charts - discrete: { - lineHeight: 'auto', - thresholdColor: undefined, - thresholdValue: 0, - chartRangeMax: undefined, - chartRangeMin: undefined, - chartRangeClip: false, - tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}') - }, - // Defaults for bullet charts - bullet: { - targetColor: '#f33', - targetWidth: 3, // width of the target bar in pixels - performanceColor: '#33f', - rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'], - base: undefined, // set this to a number to change the base start number - tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'), - tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} } - }, - // Defaults for pie charts - pie: { - offset: 0, - sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', - '#dd4477', '#0099c6', '#990099'], - borderWidth: 0, - borderColor: '#000', - tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)') - }, - // Defaults for box plots - box: { - raw: false, - boxLineColor: '#000', - boxFillColor: '#cdf', - whiskerColor: '#000', - outlierLineColor: '#333', - outlierFillColor: '#fff', - medianColor: '#f00', - showOutliers: true, - outlierIQR: 1.5, - spotRadius: 1.5, - target: undefined, - targetColor: '#4a2', - chartRangeMax: undefined, - chartRangeMin: undefined, - tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'), - tooltipFormatFieldlistKey: 'field', - tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median', - uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier', - lw: 'Left Whisker', rw: 'Right Whisker'} } - } - }; - }; - - // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname - defaultStyles = '.jqstooltip { ' + - 'position: absolute;' + - 'left: 0px;' + - 'top: 0px;' + - 'visibility: hidden;' + - 'background: rgb(0, 0, 0) transparent;' + - 'background-color: rgba(0,0,0,0.6);' + - 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' + - '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' + - 'color: white;' + - 'font: 10px arial, san serif;' + - 'text-align: left;' + - 'white-space: nowrap;' + - 'padding: 5px;' + - 'border: 1px solid white;' + - 'box-sizing: content-box;' + - 'z-index: 10000;' + - '}' + - '.jqsfield { ' + - 'color: white;' + - 'font: 10px arial, san serif;' + - 'text-align: left;' + - '}'; - - - /** - * Utilities - */ - - createClass = function (/* [baseclass, [mixin, ...]], definition */) { - var Class, args; - Class = function () { - this.init.apply(this, arguments); - }; - if (arguments.length > 1) { - if (arguments[0]) { - Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]); - Class._super = arguments[0].prototype; - } else { - Class.prototype = arguments[arguments.length - 1]; - } - if (arguments.length > 2) { - args = Array.prototype.slice.call(arguments, 1, -1); - args.unshift(Class.prototype); - $.extend.apply($, args); - } - } else { - Class.prototype = arguments[0]; - } - Class.prototype.cls = Class; - return Class; - }; - - /** - * Wraps a format string for tooltips - * {{x}} - * {{x.2} - * {{x:months}} - */ - $.SPFormatClass = SPFormat = createClass({ - fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, - precre: /(\w+)\.(\d+)/, - - init: function (format, fclass) { - this.format = format; - this.fclass = fclass; - }, - - render: function (fieldset, lookups, options) { - var self = this, - fields = fieldset, - match, token, lookupkey, fieldvalue, prec; - return this.format.replace(this.fre, function () { - var lookup; - token = arguments[1]; - lookupkey = arguments[3]; - match = self.precre.exec(token); - if (match) { - prec = match[2]; - token = match[1]; - } else { - prec = false; - } - fieldvalue = fields[token]; - if (fieldvalue === undefined) { - return ''; - } - if (lookupkey && lookups && lookups[lookupkey]) { - lookup = lookups[lookupkey]; - if (lookup.get) { // RangeMap - return lookups[lookupkey].get(fieldvalue) || fieldvalue; - } else { - return lookups[lookupkey][fieldvalue] || fieldvalue; - } - } - if (isNumber(fieldvalue)) { - if (options.get('numberFormatter')) { - fieldvalue = options.get('numberFormatter')(fieldvalue); - } else { - fieldvalue = formatNumber(fieldvalue, prec, - options.get('numberDigitGroupCount'), - options.get('numberDigitGroupSep'), - options.get('numberDecimalMark')); - } - } - return fieldvalue; - }); - } - }); - - // convience method to avoid needing the new operator - $.spformat = function(format, fclass) { - return new SPFormat(format, fclass); - }; - - clipval = function (val, min, max) { - if (val < min) { - return min; - } - if (val > max) { - return max; - } - return val; - }; - - quartile = function (values, q) { - var vl; - if (q === 2) { - vl = Math.floor(values.length / 2); - return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2; - } else { - if (values.length % 2 ) { // odd - vl = (values.length * q + q) / 4; - return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; - } else { //even - vl = (values.length * q + 2) / 4; - return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; - - } - } - }; - - normalizeValue = function (val) { - var nf; - switch (val) { - case 'undefined': - val = undefined; - break; - case 'null': - val = null; - break; - case 'true': - val = true; - break; - case 'false': - val = false; - break; - default: - nf = parseFloat(val); - if (val == nf) { - val = nf; - } - } - return val; - }; - - normalizeValues = function (vals) { - var i, result = []; - for (i = vals.length; i--;) { - result[i] = normalizeValue(vals[i]); - } - return result; - }; - - remove = function (vals, filter) { - var i, vl, result = []; - for (i = 0, vl = vals.length; i < vl; i++) { - if (vals[i] !== filter) { - result.push(vals[i]); - } - } - return result; - }; - - isNumber = function (num) { - return !isNaN(parseFloat(num)) && isFinite(num); - }; - - formatNumber = function (num, prec, groupsize, groupsep, decsep) { - var p, i; - num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split(''); - p = (p = $.inArray('.', num)) < 0 ? num.length : p; - if (p < num.length) { - num[p] = decsep; - } - for (i = p - groupsize; i > 0; i -= groupsize) { - num.splice(i, 0, groupsep); - } - return num.join(''); - }; - - // determine if all values of an array match a value - // returns true if the array is empty - all = function (val, arr, ignoreNull) { - var i; - for (i = arr.length; i--; ) { - if (ignoreNull && arr[i] === null) continue; - if (arr[i] !== val) { - return false; - } - } - return true; - }; - - // sums the numeric values in an array, ignoring other values - sum = function (vals) { - var total = 0, i; - for (i = vals.length; i--;) { - total += typeof vals[i] === 'number' ? vals[i] : 0; - } - return total; - }; - - ensureArray = function (val) { - return $.isArray(val) ? val : [val]; - }; - - // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/ - addCSS = function(css) { - var tag, iefail; - if (document.createStyleSheet) { - try { - document.createStyleSheet().cssText = css; - return; - } catch (e) { - // IE <= 9 maxes out at 31 stylesheets; inject into page instead. - iefail = true; - } - } - tag = document.createElement('style'); - tag.type = 'text/css'; - document.getElementsByTagName('head')[0].appendChild(tag); - if (iefail) { - document.styleSheets[document.styleSheets.length - 1].cssText = css; - } else { - tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css; - } - }; - - - // Provide a cross-browser interface to a few simple drawing primitives - $.fn.simpledraw = function (width, height, useExisting, interact) { - var target, mhandler; - if (useExisting && (target = this.data('_jqs_vcanvas'))) { - return target; - } - - if ($.fn.sparkline.canvas === false) { - // We've already determined that neither Canvas nor VML are available - return false; - - } else if ($.fn.sparkline.canvas === undefined) { - // No function defined yet -- need to see if we support Canvas or VML - var el = document.createElement('canvas'); - if (!!(el.getContext && el.getContext('2d'))) { - // Canvas is available - $.fn.sparkline.canvas = function(width, height, target, interact) { - return new VCanvas_canvas(width, height, target, interact); - }; - } else if (document.namespaces && !document.namespaces.v) { - // VML is available - document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); - $.fn.sparkline.canvas = function(width, height, target, interact) { - return new VCanvas_vml(width, height, target); - }; - } else { - // Neither Canvas nor VML are available - $.fn.sparkline.canvas = false; - return false; - } - } - - if (width === undefined) { - width = $(this).innerWidth(); - } - if (height === undefined) { - height = $(this).innerHeight(); - } - - target = $.fn.sparkline.canvas(width, height, this, interact); - - mhandler = $(this).data('_jqs_mhandler'); - if (mhandler) { - mhandler.registerCanvas(target); - } - return target; - }; - - $.fn.cleardraw = function () { - var target = this.data('_jqs_vcanvas'); - if (target) { - target.reset(); - } - }; - - - $.RangeMapClass = RangeMap = createClass({ - init: function (map) { - var key, range, rangelist = []; - for (key in map) { - if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { - range = key.split(':'); - range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); - range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); - range[2] = map[key]; - rangelist.push(range); - } - } - this.map = map; - this.rangelist = rangelist || false; - }, - - get: function (value) { - var rangelist = this.rangelist, - i, range, result; - if ((result = this.map[value]) !== undefined) { - return result; - } - if (rangelist) { - for (i = rangelist.length; i--;) { - range = rangelist[i]; - if (range[0] <= value && range[1] >= value) { - return range[2]; - } - } - } - return undefined; - } - }); - - // Convenience function - $.range_map = function(map) { - return new RangeMap(map); - }; - - - MouseHandler = createClass({ - init: function (el, options) { - var $el = $(el); - this.$el = $el; - this.options = options; - this.currentPageX = 0; - this.currentPageY = 0; - this.el = el; - this.splist = []; - this.tooltip = null; - this.over = false; - this.displayTooltips = !options.get('disableTooltips'); - this.highlightEnabled = !options.get('disableHighlight'); - }, - - registerSparkline: function (sp) { - this.splist.push(sp); - if (this.over) { - this.updateDisplay(); - } - }, - - registerCanvas: function (canvas) { - var $canvas = $(canvas.canvas); - this.canvas = canvas; - this.$canvas = $canvas; - $canvas.mouseenter($.proxy(this.mouseenter, this)); - $canvas.mouseleave($.proxy(this.mouseleave, this)); - $canvas.click($.proxy(this.mouseclick, this)); - }, - - reset: function (removeTooltip) { - this.splist = []; - if (this.tooltip && removeTooltip) { - this.tooltip.remove(); - this.tooltip = undefined; - } - }, - - mouseclick: function (e) { - var clickEvent = $.Event('sparklineClick'); - clickEvent.originalEvent = e; - clickEvent.sparklines = this.splist; - this.$el.trigger(clickEvent); - }, - - mouseenter: function (e) { - $(document.body).unbind('mousemove.jqs'); - $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this)); - this.over = true; - this.currentPageX = e.pageX; - this.currentPageY = e.pageY; - this.currentEl = e.target; - if (!this.tooltip && this.displayTooltips) { - this.tooltip = new Tooltip(this.options); - this.tooltip.updatePosition(e.pageX, e.pageY); - } - this.updateDisplay(); - }, - - mouseleave: function () { - $(document.body).unbind('mousemove.jqs'); - var splist = this.splist, - spcount = splist.length, - needsRefresh = false, - sp, i; - this.over = false; - this.currentEl = null; - - if (this.tooltip) { - this.tooltip.remove(); - this.tooltip = null; - } - - for (i = 0; i < spcount; i++) { - sp = splist[i]; - if (sp.clearRegionHighlight()) { - needsRefresh = true; - } - } - - if (needsRefresh) { - this.canvas.render(); - } - }, - - mousemove: function (e) { - this.currentPageX = e.pageX; - this.currentPageY = e.pageY; - this.currentEl = e.target; - if (this.tooltip) { - this.tooltip.updatePosition(e.pageX, e.pageY); - } - this.updateDisplay(); - }, - - updateDisplay: function () { - var splist = this.splist, - spcount = splist.length, - needsRefresh = false, - offset = this.$canvas.offset(), - localX = this.currentPageX - offset.left, - localY = this.currentPageY - offset.top, - tooltiphtml, sp, i, result, changeEvent; - if (!this.over) { - return; - } - for (i = 0; i < spcount; i++) { - sp = splist[i]; - result = sp.setRegionHighlight(this.currentEl, localX, localY); - if (result) { - needsRefresh = true; - } - } - if (needsRefresh) { - changeEvent = $.Event('sparklineRegionChange'); - changeEvent.sparklines = this.splist; - this.$el.trigger(changeEvent); - if (this.tooltip) { - tooltiphtml = ''; - for (i = 0; i < spcount; i++) { - sp = splist[i]; - tooltiphtml += sp.getCurrentRegionTooltip(); - } - this.tooltip.setContent(tooltiphtml); - } - if (!this.disableHighlight) { - this.canvas.render(); - } - } - if (result === null) { - this.mouseleave(); - } - } - }); - - - Tooltip = createClass({ - sizeStyle: 'position: static !important;' + - 'display: block !important;' + - 'visibility: hidden !important;' + - 'float: left !important;', - - init: function (options) { - var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'), - sizetipStyle = this.sizeStyle, - offset; - this.container = options.get('tooltipContainer') || document.body; - this.tooltipOffsetX = options.get('tooltipOffsetX', 10); - this.tooltipOffsetY = options.get('tooltipOffsetY', 12); - // remove any previous lingering tooltip - $('#jqssizetip').remove(); - $('#jqstooltip').remove(); - this.sizetip = $('
    ', { - id: 'jqssizetip', - style: sizetipStyle, - 'class': tooltipClassname - }); - this.tooltip = $('
    ', { - id: 'jqstooltip', - 'class': tooltipClassname - }).appendTo(this.container); - // account for the container's location - offset = this.tooltip.offset(); - this.offsetLeft = offset.left; - this.offsetTop = offset.top; - this.hidden = true; - $(window).unbind('resize.jqs scroll.jqs'); - $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this)); - this.updateWindowDims(); - }, - - updateWindowDims: function () { - this.scrollTop = $(window).scrollTop(); - this.scrollLeft = $(window).scrollLeft(); - this.scrollRight = this.scrollLeft + $(window).width(); - this.updatePosition(); - }, - - getSize: function (content) { - this.sizetip.html(content).appendTo(this.container); - this.width = this.sizetip.width() + 1; - this.height = this.sizetip.height(); - this.sizetip.remove(); - }, - - setContent: function (content) { - if (!content) { - this.tooltip.css('visibility', 'hidden'); - this.hidden = true; - return; - } - this.getSize(content); - this.tooltip.html(content) - .css({ - 'width': this.width, - 'height': this.height, - 'visibility': 'visible' - }); - if (this.hidden) { - this.hidden = false; - this.updatePosition(); - } - }, - - updatePosition: function (x, y) { - if (x === undefined) { - if (this.mousex === undefined) { - return; - } - x = this.mousex - this.offsetLeft; - y = this.mousey - this.offsetTop; - - } else { - this.mousex = x = x - this.offsetLeft; - this.mousey = y = y - this.offsetTop; - } - if (!this.height || !this.width || this.hidden) { - return; - } - - y -= this.height + this.tooltipOffsetY; - x += this.tooltipOffsetX; - - if (y < this.scrollTop) { - y = this.scrollTop; - } - if (x < this.scrollLeft) { - x = this.scrollLeft; - } else if (x + this.width > this.scrollRight) { - x = this.scrollRight - this.width; - } - - this.tooltip.css({ - 'left': x, - 'top': y - }); - }, - - remove: function () { - this.tooltip.remove(); - this.sizetip.remove(); - this.sizetip = this.tooltip = undefined; - $(window).unbind('resize.jqs scroll.jqs'); - } - }); - - - initStyles = function() { - addCSS(defaultStyles); - }; - - $(initStyles); - - pending = []; - $.fn.sparkline = function (userValues, userOptions) { - return this.each(function () { - var options = new $.fn.sparkline.options(this, userOptions), - $this = $(this), - render, i; - render = function () { - var values, width, height, tmp, mhandler, sp, vals; - if (userValues === 'html' || userValues === undefined) { - vals = this.getAttribute(options.get('tagValuesAttribute')); - if (vals === undefined || vals === null) { - vals = $this.html(); - } - values = vals.replace(/(^\s*\s*$)|\s+/g, '').split(','); - } else { - values = userValues; - } - - width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width'); - if (options.get('height') === 'auto') { - if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) { - // must be a better way to get the line height - tmp = document.createElement('span'); - tmp.innerHTML = 'a'; - $this.html(tmp); - height = $(tmp).innerHeight() || $(tmp).height(); - $(tmp).remove(); - tmp = null; - } - } else { - height = options.get('height'); - } - - if (!options.get('disableInteraction')) { - mhandler = $.data(this, '_jqs_mhandler'); - if (!mhandler) { - mhandler = new MouseHandler(this, options); - $.data(this, '_jqs_mhandler', mhandler); - } else if (!options.get('composite')) { - mhandler.reset(); - } - } else { - mhandler = false; - } - - if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) { - if (!$.data(this, '_jqs_errnotify')) { - alert('Attempted to attach a composite sparkline to an element with no existing sparkline'); - $.data(this, '_jqs_errnotify', true); - } - return; - } - - sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height); - - sp.render(); - - if (mhandler) { - mhandler.registerSparkline(sp); - } - }; - if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) { - if (!options.get('composite') && $.data(this, '_jqs_pending')) { - // remove any existing references to the element - for (i = pending.length; i; i--) { - if (pending[i - 1][0] == this) { - pending.splice(i - 1, 1); - } - } - } - pending.push([this, render]); - $.data(this, '_jqs_pending', true); - } else { - render.call(this); - } - }); - }; - - $.fn.sparkline.defaults = getDefaults(); - - - $.sparkline_display_visible = function () { - var el, i, pl; - var done = []; - for (i = 0, pl = pending.length; i < pl; i++) { - el = pending[i][0]; - if ($(el).is(':visible') && !$(el).parents().is(':hidden')) { - pending[i][1].call(el); - $.data(pending[i][0], '_jqs_pending', false); - done.push(i); - } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) { - // element has been inserted and removed from the DOM - // If it was not yet inserted into the dom then the .data request - // will return true. - // removing from the dom causes the data to be removed. - $.data(pending[i][0], '_jqs_pending', false); - done.push(i); - } - } - for (i = done.length; i; i--) { - pending.splice(done[i - 1], 1); - } - }; - - - /** - * User option handler - */ - $.fn.sparkline.options = createClass({ - init: function (tag, userOptions) { - var extendedOptions, defaults, base, tagOptionType; - this.userOptions = userOptions = userOptions || {}; - this.tag = tag; - this.tagValCache = {}; - defaults = $.fn.sparkline.defaults; - base = defaults.common; - this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix); - - tagOptionType = this.getTagSetting('type'); - if (tagOptionType === UNSET_OPTION) { - extendedOptions = defaults[userOptions.type || base.type]; - } else { - extendedOptions = defaults[tagOptionType]; - } - this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); - }, - - - getTagSetting: function (key) { - var prefix = this.tagOptionsPrefix, - val, i, pairs, keyval; - if (prefix === false || prefix === undefined) { - return UNSET_OPTION; - } - if (this.tagValCache.hasOwnProperty(key)) { - val = this.tagValCache.key; - } else { - val = this.tag.getAttribute(prefix + key); - if (val === undefined || val === null) { - val = UNSET_OPTION; - } else if (val.substr(0, 1) === '[') { - val = val.substr(1, val.length - 2).split(','); - for (i = val.length; i--;) { - val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, '')); - } - } else if (val.substr(0, 1) === '{') { - pairs = val.substr(1, val.length - 2).split(','); - val = {}; - for (i = pairs.length; i--;) { - keyval = pairs[i].split(':', 2); - val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, '')); - } - } else { - val = normalizeValue(val); - } - this.tagValCache.key = val; - } - return val; - }, - - get: function (key, defaultval) { - var tagOption = this.getTagSetting(key), - result; - if (tagOption !== UNSET_OPTION) { - return tagOption; - } - return (result = this.mergedOptions[key]) === undefined ? defaultval : result; - } - }); - - - $.fn.sparkline._base = createClass({ - disabled: false, - - init: function (el, values, options, width, height) { - this.el = el; - this.$el = $(el); - this.values = values; - this.options = options; - this.width = width; - this.height = height; - this.currentRegion = undefined; - }, - - /** - * Setup the canvas - */ - initTarget: function () { - var interactive = !this.options.get('disableInteraction'); - if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) { - this.disabled = true; - } else { - this.canvasWidth = this.target.pixelWidth; - this.canvasHeight = this.target.pixelHeight; - } - }, - - /** - * Actually render the chart to the canvas - */ - render: function () { - if (this.disabled) { - this.el.innerHTML = ''; - return false; - } - return true; - }, - - /** - * Return a region id for a given x/y co-ordinate - */ - getRegion: function (x, y) { - }, - - /** - * Highlight an item based on the moused-over x,y co-ordinate - */ - setRegionHighlight: function (el, x, y) { - var currentRegion = this.currentRegion, - highlightEnabled = !this.options.get('disableHighlight'), - newRegion; - if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) { - return null; - } - newRegion = this.getRegion(el, x, y); - if (currentRegion !== newRegion) { - if (currentRegion !== undefined && highlightEnabled) { - this.removeHighlight(); - } - this.currentRegion = newRegion; - if (newRegion !== undefined && highlightEnabled) { - this.renderHighlight(); - } - return true; - } - return false; - }, - - /** - * Reset any currently highlighted item - */ - clearRegionHighlight: function () { - if (this.currentRegion !== undefined) { - this.removeHighlight(); - this.currentRegion = undefined; - return true; - } - return false; - }, - - renderHighlight: function () { - this.changeHighlight(true); - }, - - removeHighlight: function () { - this.changeHighlight(false); - }, - - changeHighlight: function (highlight) {}, - - /** - * Fetch the HTML to display as a tooltip - */ - getCurrentRegionTooltip: function () { - var options = this.options, - header = '', - entries = [], - fields, formats, formatlen, fclass, text, i, - showFields, showFieldsKey, newFields, fv, - formatter, format, fieldlen, j; - if (this.currentRegion === undefined) { - return ''; - } - fields = this.getCurrentRegionFields(); - formatter = options.get('tooltipFormatter'); - if (formatter) { - return formatter(this, options, fields); - } - if (options.get('tooltipChartTitle')) { - header += '
    ' + options.get('tooltipChartTitle') + '
    \n'; - } - formats = this.options.get('tooltipFormat'); - if (!formats) { - return ''; - } - if (!$.isArray(formats)) { - formats = [formats]; - } - if (!$.isArray(fields)) { - fields = [fields]; - } - showFields = this.options.get('tooltipFormatFieldlist'); - showFieldsKey = this.options.get('tooltipFormatFieldlistKey'); - if (showFields && showFieldsKey) { - // user-selected ordering of fields - newFields = []; - for (i = fields.length; i--;) { - fv = fields[i][showFieldsKey]; - if ((j = $.inArray(fv, showFields)) != -1) { - newFields[j] = fields[i]; - } - } - fields = newFields; - } - formatlen = formats.length; - fieldlen = fields.length; - for (i = 0; i < formatlen; i++) { - format = formats[i]; - if (typeof format === 'string') { - format = new SPFormat(format); - } - fclass = format.fclass || 'jqsfield'; - for (j = 0; j < fieldlen; j++) { - if (!fields[j].isNull || !options.get('tooltipSkipNull')) { - $.extend(fields[j], { - prefix: options.get('tooltipPrefix'), - suffix: options.get('tooltipSuffix') - }); - text = format.render(fields[j], options.get('tooltipValueLookups'), options); - entries.push('
    ' + text + '
    '); - } - } - } - if (entries.length) { - return header + entries.join('\n'); - } - return ''; - }, - - getCurrentRegionFields: function () {}, - - calcHighlightColor: function (color, options) { - var highlightColor = options.get('highlightColor'), - lighten = options.get('highlightLighten'), - parse, mult, rgbnew, i; - if (highlightColor) { - return highlightColor; - } - if (lighten) { - // extract RGB values - parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); - if (parse) { - rgbnew = []; - mult = color.length === 4 ? 16 : 1; - for (i = 0; i < 3; i++) { - rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255); - } - return 'rgb(' + rgbnew.join(',') + ')'; - } - - } - return color; - } - - }); - - barHighlightMixin = { - changeHighlight: function (highlight) { - var currentRegion = this.currentRegion, - target = this.target, - shapeids = this.regionShapes[currentRegion], - newShapes; - // will be null if the region value was null - if (shapeids) { - newShapes = this.renderRegion(currentRegion, highlight); - if ($.isArray(newShapes) || $.isArray(shapeids)) { - target.replaceWithShapes(shapeids, newShapes); - this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) { - return newShape.id; - }); - } else { - target.replaceWithShape(shapeids, newShapes); - this.regionShapes[currentRegion] = newShapes.id; - } - } - }, - - render: function () { - var values = this.values, - target = this.target, - regionShapes = this.regionShapes, - shapes, ids, i, j; - - if (!this.cls._super.render.call(this)) { - return; - } - for (i = values.length; i--;) { - shapes = this.renderRegion(i); - if (shapes) { - if ($.isArray(shapes)) { - ids = []; - for (j = shapes.length; j--;) { - shapes[j].append(); - ids.push(shapes[j].id); - } - regionShapes[i] = ids; - } else { - shapes.append(); - regionShapes[i] = shapes.id; // store just the shapeid - } - } else { - // null value - regionShapes[i] = null; - } - } - target.render(); - } - }; - - - /** - * Line charts - */ - $.fn.sparkline.line = line = createClass($.fn.sparkline._base, { - type: 'line', - - init: function (el, values, options, width, height) { - line._super.init.call(this, el, values, options, width, height); - this.vertices = []; - this.regionMap = []; - this.xvalues = []; - this.yvalues = []; - this.yminmax = []; - this.hightlightSpotId = null; - this.lastShapeId = null; - this.initTarget(); - }, - - getRegion: function (el, x, y) { - var i, - regionMap = this.regionMap; // maps regions to value positions - for (i = regionMap.length; i--;) { - if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) { - return regionMap[i][2]; - } - } - return undefined; - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion; - return { - isNull: this.yvalues[currentRegion] === null, - x: this.xvalues[currentRegion], - y: this.yvalues[currentRegion], - color: this.options.get('lineColor'), - fillColor: this.options.get('fillColor'), - offset: currentRegion - }; - }, - - renderHighlight: function () { - var currentRegion = this.currentRegion, - target = this.target, - vertex = this.vertices[currentRegion], - options = this.options, - spotRadius = options.get('spotRadius'), - highlightSpotColor = options.get('highlightSpotColor'), - highlightLineColor = options.get('highlightLineColor'), - highlightSpot, highlightLine; - - if (!vertex) { - return; - } - if (spotRadius && highlightSpotColor) { - highlightSpot = target.drawCircle(vertex[0], vertex[1], - spotRadius, undefined, highlightSpotColor); - this.highlightSpotId = highlightSpot.id; - target.insertAfterShape(this.lastShapeId, highlightSpot); - } - if (highlightLineColor) { - highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], - this.canvasTop + this.canvasHeight, highlightLineColor); - this.highlightLineId = highlightLine.id; - target.insertAfterShape(this.lastShapeId, highlightLine); - } - }, - - removeHighlight: function () { - var target = this.target; - if (this.highlightSpotId) { - target.removeShapeId(this.highlightSpotId); - this.highlightSpotId = null; - } - if (this.highlightLineId) { - target.removeShapeId(this.highlightLineId); - this.highlightLineId = null; - } - }, - - scanValues: function () { - var values = this.values, - valcount = values.length, - xvalues = this.xvalues, - yvalues = this.yvalues, - yminmax = this.yminmax, - i, val, isStr, isArray, sp; - for (i = 0; i < valcount; i++) { - val = values[i]; - isStr = typeof(values[i]) === 'string'; - isArray = typeof(values[i]) === 'object' && values[i] instanceof Array; - sp = isStr && values[i].split(':'); - if (isStr && sp.length === 2) { // x:y - xvalues.push(Number(sp[0])); - yvalues.push(Number(sp[1])); - yminmax.push(Number(sp[1])); - } else if (isArray) { - xvalues.push(val[0]); - yvalues.push(val[1]); - yminmax.push(val[1]); - } else { - xvalues.push(i); - if (values[i] === null || values[i] === 'null') { - yvalues.push(null); - } else { - yvalues.push(Number(val)); - yminmax.push(Number(val)); - } - } - } - if (this.options.get('xvalues')) { - xvalues = this.options.get('xvalues'); - } - - this.maxy = this.maxyorg = Math.max.apply(Math, yminmax); - this.miny = this.minyorg = Math.min.apply(Math, yminmax); - - this.maxx = Math.max.apply(Math, xvalues); - this.minx = Math.min.apply(Math, xvalues); - - this.xvalues = xvalues; - this.yvalues = yvalues; - this.yminmax = yminmax; - - }, - - processRangeOptions: function () { - var options = this.options, - normalRangeMin = options.get('normalRangeMin'), - normalRangeMax = options.get('normalRangeMax'); - - if (normalRangeMin !== undefined) { - if (normalRangeMin < this.miny) { - this.miny = normalRangeMin; - } - if (normalRangeMax > this.maxy) { - this.maxy = normalRangeMax; - } - } - if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) { - this.miny = options.get('chartRangeMin'); - } - if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) { - this.maxy = options.get('chartRangeMax'); - } - if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) { - this.minx = options.get('chartRangeMinX'); - } - if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) { - this.maxx = options.get('chartRangeMaxX'); - } - - }, - - drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) { - var normalRangeMin = this.options.get('normalRangeMin'), - normalRangeMax = this.options.get('normalRangeMax'), - ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))), - height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey); - this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append(); - }, - - render: function () { - var options = this.options, - target = this.target, - canvasWidth = this.canvasWidth, - canvasHeight = this.canvasHeight, - vertices = this.vertices, - spotRadius = options.get('spotRadius'), - regionMap = this.regionMap, - rangex, rangey, yvallast, - canvasTop, canvasLeft, - vertex, path, paths, x, y, xnext, xpos, xposnext, - last, next, yvalcount, lineShapes, fillShapes, plen, - valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i; - - if (!line._super.render.call(this)) { - return; - } - - this.scanValues(); - this.processRangeOptions(); - - xvalues = this.xvalues; - yvalues = this.yvalues; - - if (!this.yminmax.length || this.yvalues.length < 2) { - // empty or all null valuess - return; - } - - canvasTop = canvasLeft = 0; - - rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx; - rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny; - yvallast = this.yvalues.length - 1; - - if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) { - spotRadius = 0; - } - if (spotRadius) { - // adjust the canvas size as required so that spots will fit - hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction'); - if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) { - canvasHeight -= Math.ceil(spotRadius); - } - if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) { - canvasHeight -= Math.ceil(spotRadius); - canvasTop += Math.ceil(spotRadius); - } - if (hlSpotsEnabled || - ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) { - canvasLeft += Math.ceil(spotRadius); - canvasWidth -= Math.ceil(spotRadius); - } - if (hlSpotsEnabled || options.get('spotColor') || - (options.get('minSpotColor') || options.get('maxSpotColor') && - (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) { - canvasWidth -= Math.ceil(spotRadius); - } - } - - - canvasHeight--; - - if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) { - this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); - } - - path = []; - paths = [path]; - last = next = null; - yvalcount = yvalues.length; - for (i = 0; i < yvalcount; i++) { - x = xvalues[i]; - xnext = xvalues[i + 1]; - y = yvalues[i]; - xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)); - xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth; - next = xpos + ((xposnext - xpos) / 2); - regionMap[i] = [last || 0, next, i]; - last = next; - if (y === null) { - if (i) { - if (yvalues[i - 1] !== null) { - path = []; - paths.push(path); - } - vertices.push(null); - } - } else { - if (y < this.miny) { - y = this.miny; - } - if (y > this.maxy) { - y = this.maxy; - } - if (!path.length) { - // previous value was null - path.push([xpos, canvasTop + canvasHeight]); - } - vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))]; - path.push(vertex); - vertices.push(vertex); - } - } - - lineShapes = []; - fillShapes = []; - plen = paths.length; - for (i = 0; i < plen; i++) { - path = paths[i]; - if (path.length) { - if (options.get('fillColor')) { - path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]); - fillShapes.push(path.slice(0)); - path.pop(); - } - // if there's only a single point in this path, then we want to display it - // as a vertical line which means we keep path[0] as is - if (path.length > 2) { - // else we want the first value - path[0] = [path[0][0], path[1][1]]; - } - lineShapes.push(path); - } - } - - // draw the fill first, then optionally the normal range, then the line on top of that - plen = fillShapes.length; - for (i = 0; i < plen; i++) { - target.drawShape(fillShapes[i], - options.get('fillColor'), options.get('fillColor')).append(); - } - - if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) { - this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); - } - - plen = lineShapes.length; - for (i = 0; i < plen; i++) { - target.drawShape(lineShapes[i], options.get('lineColor'), undefined, - options.get('lineWidth')).append(); - } - - if (spotRadius && options.get('valueSpots')) { - valueSpots = options.get('valueSpots'); - if (valueSpots.get === undefined) { - valueSpots = new RangeMap(valueSpots); - } - for (i = 0; i < yvalcount; i++) { - color = valueSpots.get(yvalues[i]); - if (color) { - target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)), - canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))), - spotRadius, undefined, - color).append(); - } - } - - } - if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) { - target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), - canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))), - spotRadius, undefined, - options.get('spotColor')).append(); - } - if (this.maxy !== this.minyorg) { - if (spotRadius && options.get('minSpotColor')) { - x = xvalues[$.inArray(this.minyorg, yvalues)]; - target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), - canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))), - spotRadius, undefined, - options.get('minSpotColor')).append(); - } - if (spotRadius && options.get('maxSpotColor')) { - x = xvalues[$.inArray(this.maxyorg, yvalues)]; - target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), - canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))), - spotRadius, undefined, - options.get('maxSpotColor')).append(); - } - } - - this.lastShapeId = target.getLastShapeId(); - this.canvasTop = canvasTop; - target.render(); - } - }); - - - /** - * Bar charts - */ - $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, { - type: 'bar', - - init: function (el, values, options, width, height) { - var barWidth = parseInt(options.get('barWidth'), 10), - barSpacing = parseInt(options.get('barSpacing'), 10), - chartRangeMin = options.get('chartRangeMin'), - chartRangeMax = options.get('chartRangeMax'), - chartRangeClip = options.get('chartRangeClip'), - stackMin = Infinity, - stackMax = -Infinity, - isStackString, groupMin, groupMax, stackRanges, - numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, - stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; - bar._super.init.call(this, el, values, options, width, height); - - // scan values to determine whether to stack bars - for (i = 0, vlen = values.length; i < vlen; i++) { - val = values[i]; - isStackString = typeof(val) === 'string' && val.indexOf(':') > -1; - if (isStackString || $.isArray(val)) { - stacked = true; - if (isStackString) { - val = values[i] = normalizeValues(val.split(':')); - } - val = remove(val, null); // min/max will treat null as zero - groupMin = Math.min.apply(Math, val); - groupMax = Math.max.apply(Math, val); - if (groupMin < stackMin) { - stackMin = groupMin; - } - if (groupMax > stackMax) { - stackMax = groupMax; - } - } - } - - this.stacked = stacked; - this.regionShapes = {}; - this.barWidth = barWidth; - this.barSpacing = barSpacing; - this.totalBarWidth = barWidth + barSpacing; - this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); - - this.initTarget(); - - if (chartRangeClip) { - clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; - clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; - } - - numValues = []; - stackRanges = stacked ? [] : numValues; - var stackTotals = []; - var stackRangesNeg = []; - for (i = 0, vlen = values.length; i < vlen; i++) { - if (stacked) { - vlist = values[i]; - values[i] = svals = []; - stackTotals[i] = 0; - stackRanges[i] = stackRangesNeg[i] = 0; - for (j = 0, slen = vlist.length; j < slen; j++) { - val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j]; - if (val !== null) { - if (val > 0) { - stackTotals[i] += val; - } - if (stackMin < 0 && stackMax > 0) { - if (val < 0) { - stackRangesNeg[i] += Math.abs(val); - } else { - stackRanges[i] += val; - } - } else { - stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); - } - numValues.push(val); - } - } - } else { - val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; - val = values[i] = normalizeValue(val); - if (val !== null) { - numValues.push(val); - } - } - } - this.max = max = Math.max.apply(Math, numValues); - this.min = min = Math.min.apply(Math, numValues); - this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; - this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; - - if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { - min = options.get('chartRangeMin'); - } - if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { - max = options.get('chartRangeMax'); - } - - this.zeroAxis = zeroAxis = options.get('zeroAxis', true); - if (min <= 0 && max >= 0 && zeroAxis) { - xaxisOffset = 0; - } else if (zeroAxis == false) { - xaxisOffset = min; - } else if (min > 0) { - xaxisOffset = min; - } else { - xaxisOffset = max; - } - this.xaxisOffset = xaxisOffset; - - range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; - - // as we plot zero/min values a single pixel line, we add a pixel to all other - // values - Reduce the effective canvas size to suit - this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1; - - if (min < xaxisOffset) { - yMaxCalc = (stacked && max >= 0) ? stackMax : max; - yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight; - if (yoffset !== Math.ceil(yoffset)) { - this.canvasHeightEf -= 2; - yoffset = Math.ceil(yoffset); - } - } else { - yoffset = this.canvasHeight; - } - this.yoffset = yoffset; - - if ($.isArray(options.get('colorMap'))) { - this.colorMapByIndex = options.get('colorMap'); - this.colorMapByValue = null; - } else { - this.colorMapByIndex = null; - this.colorMapByValue = options.get('colorMap'); - if (this.colorMapByValue && this.colorMapByValue.get === undefined) { - this.colorMapByValue = new RangeMap(this.colorMapByValue); - } - } - - this.range = range; - }, - - getRegion: function (el, x, y) { - var result = Math.floor(x / this.totalBarWidth); - return (result < 0 || result >= this.values.length) ? undefined : result; - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion, - values = ensureArray(this.values[currentRegion]), - result = [], - value, i; - for (i = values.length; i--;) { - value = values[i]; - result.push({ - isNull: value === null, - value: value, - color: this.calcColor(i, value, currentRegion), - offset: currentRegion - }); - } - return result; - }, - - calcColor: function (stacknum, value, valuenum) { - var colorMapByIndex = this.colorMapByIndex, - colorMapByValue = this.colorMapByValue, - options = this.options, - color, newColor; - if (this.stacked) { - color = options.get('stackedBarColor'); - } else { - color = (value < 0) ? options.get('negBarColor') : options.get('barColor'); - } - if (value === 0 && options.get('zeroColor') !== undefined) { - color = options.get('zeroColor'); - } - if (colorMapByValue && (newColor = colorMapByValue.get(value))) { - color = newColor; - } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { - color = colorMapByIndex[valuenum]; - } - return $.isArray(color) ? color[stacknum % color.length] : color; - }, - - /** - * Render bar(s) for a region - */ - renderRegion: function (valuenum, highlight) { - var vals = this.values[valuenum], - options = this.options, - xaxisOffset = this.xaxisOffset, - result = [], - range = this.range, - stacked = this.stacked, - target = this.target, - x = valuenum * this.totalBarWidth, - canvasHeightEf = this.canvasHeightEf, - yoffset = this.yoffset, - y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin; - - vals = $.isArray(vals) ? vals : [vals]; - valcount = vals.length; - val = vals[0]; - isNull = all(null, vals); - allMin = all(xaxisOffset, vals, true); - - if (isNull) { - if (options.get('nullColor')) { - color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options); - y = (yoffset > 0) ? yoffset - 1 : yoffset; - return target.drawRect(x, y, this.barWidth - 1, 0, color, color); - } else { - return undefined; - } - } - yoffsetNeg = yoffset; - for (i = 0; i < valcount; i++) { - val = vals[i]; - - if (stacked && val === xaxisOffset) { - if (!allMin || minPlotted) { - continue; - } - minPlotted = true; - } - - if (range > 0) { - height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1; - } else { - height = 1; - } - if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) { - y = yoffsetNeg; - yoffsetNeg += height; - } else { - y = yoffset - height; - yoffset -= height; - } - color = this.calcColor(i, val, valuenum); - if (highlight) { - color = this.calcHighlightColor(color, options); - } - result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color)); - } - if (result.length === 1) { - return result[0]; - } - return result; - } - }); - - - /** - * Tristate charts - */ - $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, { - type: 'tristate', - - init: function (el, values, options, width, height) { - var barWidth = parseInt(options.get('barWidth'), 10), - barSpacing = parseInt(options.get('barSpacing'), 10); - tristate._super.init.call(this, el, values, options, width, height); - - this.regionShapes = {}; - this.barWidth = barWidth; - this.barSpacing = barSpacing; - this.totalBarWidth = barWidth + barSpacing; - this.values = $.map(values, Number); - this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); - - if ($.isArray(options.get('colorMap'))) { - this.colorMapByIndex = options.get('colorMap'); - this.colorMapByValue = null; - } else { - this.colorMapByIndex = null; - this.colorMapByValue = options.get('colorMap'); - if (this.colorMapByValue && this.colorMapByValue.get === undefined) { - this.colorMapByValue = new RangeMap(this.colorMapByValue); - } - } - this.initTarget(); - }, - - getRegion: function (el, x, y) { - return Math.floor(x / this.totalBarWidth); - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion; - return { - isNull: this.values[currentRegion] === undefined, - value: this.values[currentRegion], - color: this.calcColor(this.values[currentRegion], currentRegion), - offset: currentRegion - }; - }, - - calcColor: function (value, valuenum) { - var values = this.values, - options = this.options, - colorMapByIndex = this.colorMapByIndex, - colorMapByValue = this.colorMapByValue, - color, newColor; - - if (colorMapByValue && (newColor = colorMapByValue.get(value))) { - color = newColor; - } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { - color = colorMapByIndex[valuenum]; - } else if (values[valuenum] < 0) { - color = options.get('negBarColor'); - } else if (values[valuenum] > 0) { - color = options.get('posBarColor'); - } else { - color = options.get('zeroBarColor'); - } - return color; - }, - - renderRegion: function (valuenum, highlight) { - var values = this.values, - options = this.options, - target = this.target, - canvasHeight, height, halfHeight, - x, y, color; - - canvasHeight = target.pixelHeight; - halfHeight = Math.round(canvasHeight / 2); - - x = valuenum * this.totalBarWidth; - if (values[valuenum] < 0) { - y = halfHeight; - height = halfHeight - 1; - } else if (values[valuenum] > 0) { - y = 0; - height = halfHeight - 1; - } else { - y = halfHeight - 1; - height = 2; - } - color = this.calcColor(values[valuenum], valuenum); - if (color === null) { - return; - } - if (highlight) { - color = this.calcHighlightColor(color, options); - } - return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color); - } - }); - - - /** - * Discrete charts - */ - $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, { - type: 'discrete', - - init: function (el, values, options, width, height) { - discrete._super.init.call(this, el, values, options, width, height); - - this.regionShapes = {}; - this.values = values = $.map(values, Number); - this.min = Math.min.apply(Math, values); - this.max = Math.max.apply(Math, values); - this.range = this.max - this.min; - this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width; - this.interval = Math.floor(width / values.length); - this.itemWidth = width / values.length; - if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) { - this.min = options.get('chartRangeMin'); - } - if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) { - this.max = options.get('chartRangeMax'); - } - this.initTarget(); - if (this.target) { - this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight'); - } - }, - - getRegion: function (el, x, y) { - return Math.floor(x / this.itemWidth); - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion; - return { - isNull: this.values[currentRegion] === undefined, - value: this.values[currentRegion], - offset: currentRegion - }; - }, - - renderRegion: function (valuenum, highlight) { - var values = this.values, - options = this.options, - min = this.min, - max = this.max, - range = this.range, - interval = this.interval, - target = this.target, - canvasHeight = this.canvasHeight, - lineHeight = this.lineHeight, - pheight = canvasHeight - lineHeight, - ytop, val, color, x; - - val = clipval(values[valuenum], min, max); - x = valuenum * interval; - ytop = Math.round(pheight - pheight * ((val - min) / range)); - color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'); - if (highlight) { - color = this.calcHighlightColor(color, options); - } - return target.drawLine(x, ytop, x, ytop + lineHeight, color); - } - }); - - - /** - * Bullet charts - */ - $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, { - type: 'bullet', - - init: function (el, values, options, width, height) { - var min, max, vals; - bullet._super.init.call(this, el, values, options, width, height); - - // values: target, performance, range1, range2, range3 - this.values = values = normalizeValues(values); - // target or performance could be null - vals = values.slice(); - vals[0] = vals[0] === null ? vals[2] : vals[0]; - vals[1] = values[1] === null ? vals[2] : vals[1]; - min = Math.min.apply(Math, values); - max = Math.max.apply(Math, values); - if (options.get('base') === undefined) { - min = min < 0 ? min : 0; - } else { - min = options.get('base'); - } - this.min = min; - this.max = max; - this.range = max - min; - this.shapes = {}; - this.valueShapes = {}; - this.regiondata = {}; - this.width = width = options.get('width') === 'auto' ? '4.0em' : width; - this.target = this.$el.simpledraw(width, height, options.get('composite')); - if (!values.length) { - this.disabled = true; - } - this.initTarget(); - }, - - getRegion: function (el, x, y) { - var shapeid = this.target.getShapeAt(el, x, y); - return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion; - return { - fieldkey: currentRegion.substr(0, 1), - value: this.values[currentRegion.substr(1)], - region: currentRegion - }; - }, - - changeHighlight: function (highlight) { - var currentRegion = this.currentRegion, - shapeid = this.valueShapes[currentRegion], - shape; - delete this.shapes[shapeid]; - switch (currentRegion.substr(0, 1)) { - case 'r': - shape = this.renderRange(currentRegion.substr(1), highlight); - break; - case 'p': - shape = this.renderPerformance(highlight); - break; - case 't': - shape = this.renderTarget(highlight); - break; - } - this.valueShapes[currentRegion] = shape.id; - this.shapes[shape.id] = currentRegion; - this.target.replaceWithShape(shapeid, shape); - }, - - renderRange: function (rn, highlight) { - var rangeval = this.values[rn], - rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), - color = this.options.get('rangeColors')[rn - 2]; - if (highlight) { - color = this.calcHighlightColor(color, this.options); - } - return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color); - }, - - renderPerformance: function (highlight) { - var perfval = this.values[1], - perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), - color = this.options.get('performanceColor'); - if (highlight) { - color = this.calcHighlightColor(color, this.options); - } - return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, - Math.round(this.canvasHeight * 0.4) - 1, color, color); - }, - - renderTarget: function (highlight) { - var targetval = this.values[0], - x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)), - targettop = Math.round(this.canvasHeight * 0.10), - targetheight = this.canvasHeight - (targettop * 2), - color = this.options.get('targetColor'); - if (highlight) { - color = this.calcHighlightColor(color, this.options); - } - return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color); - }, - - render: function () { - var vlen = this.values.length, - target = this.target, - i, shape; - if (!bullet._super.render.call(this)) { - return; - } - for (i = 2; i < vlen; i++) { - shape = this.renderRange(i).append(); - this.shapes[shape.id] = 'r' + i; - this.valueShapes['r' + i] = shape.id; - } - if (this.values[1] !== null) { - shape = this.renderPerformance().append(); - this.shapes[shape.id] = 'p1'; - this.valueShapes.p1 = shape.id; - } - if (this.values[0] !== null) { - shape = this.renderTarget().append(); - this.shapes[shape.id] = 't0'; - this.valueShapes.t0 = shape.id; - } - target.render(); - } - }); - - - /** - * Pie charts - */ - $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, { - type: 'pie', - - init: function (el, values, options, width, height) { - var total = 0, i; - - pie._super.init.call(this, el, values, options, width, height); - - this.shapes = {}; // map shape ids to value offsets - this.valueShapes = {}; // maps value offsets to shape ids - this.values = values = $.map(values, Number); - - if (options.get('width') === 'auto') { - this.width = this.height; - } - - if (values.length > 0) { - for (i = values.length; i--;) { - total += values[i]; - } - } - this.total = total; - this.initTarget(); - this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2); - }, - - getRegion: function (el, x, y) { - var shapeid = this.target.getShapeAt(el, x, y); - return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; - }, - - getCurrentRegionFields: function () { - var currentRegion = this.currentRegion; - return { - isNull: this.values[currentRegion] === undefined, - value: this.values[currentRegion], - percent: this.values[currentRegion] / this.total * 100, - color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length], - offset: currentRegion - }; - }, - - changeHighlight: function (highlight) { - var currentRegion = this.currentRegion, - newslice = this.renderSlice(currentRegion, highlight), - shapeid = this.valueShapes[currentRegion]; - delete this.shapes[shapeid]; - this.target.replaceWithShape(shapeid, newslice); - this.valueShapes[currentRegion] = newslice.id; - this.shapes[newslice.id] = currentRegion; - }, - - renderSlice: function (valuenum, highlight) { - var target = this.target, - options = this.options, - radius = this.radius, - borderWidth = options.get('borderWidth'), - offset = options.get('offset'), - circle = 2 * Math.PI, - values = this.values, - total = this.total, - next = offset ? (2*Math.PI)*(offset/360) : 0, - start, end, i, vlen, color; - - vlen = values.length; - for (i = 0; i < vlen; i++) { - start = next; - end = next; - if (total > 0) { // avoid divide by zero - end = next + (circle * (values[i] / total)); - } - if (valuenum === i) { - color = options.get('sliceColors')[i % options.get('sliceColors').length]; - if (highlight) { - color = this.calcHighlightColor(color, options); - } - - return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color); - } - next = end; - } - }, - - render: function () { - var target = this.target, - values = this.values, - options = this.options, - radius = this.radius, - borderWidth = options.get('borderWidth'), - shape, i; - - if (!pie._super.render.call(this)) { - return; - } - if (borderWidth) { - target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)), - options.get('borderColor'), undefined, borderWidth).append(); - } - for (i = values.length; i--;) { - if (values[i]) { // don't render zero values - shape = this.renderSlice(i).append(); - this.valueShapes[i] = shape.id; // store just the shapeid - this.shapes[shape.id] = i; - } - } - target.render(); - } - }); - - - /** - * Box plots - */ - $.fn.sparkline.box = box = createClass($.fn.sparkline._base, { - type: 'box', - - init: function (el, values, options, width, height) { - box._super.init.call(this, el, values, options, width, height); - this.values = $.map(values, Number); - this.width = options.get('width') === 'auto' ? '4.0em' : width; - this.initTarget(); - if (!this.values.length) { - this.disabled = 1; - } - }, - - /** - * Simulate a single region - */ - getRegion: function () { - return 1; - }, - - getCurrentRegionFields: function () { - var result = [ - { field: 'lq', value: this.quartiles[0] }, - { field: 'med', value: this.quartiles[1] }, - { field: 'uq', value: this.quartiles[2] } - ]; - if (this.loutlier !== undefined) { - result.push({ field: 'lo', value: this.loutlier}); - } - if (this.routlier !== undefined) { - result.push({ field: 'ro', value: this.routlier}); - } - if (this.lwhisker !== undefined) { - result.push({ field: 'lw', value: this.lwhisker}); - } - if (this.rwhisker !== undefined) { - result.push({ field: 'rw', value: this.rwhisker}); - } - return result; - }, - - render: function () { - var target = this.target, - values = this.values, - vlen = values.length, - options = this.options, - canvasWidth = this.canvasWidth, - canvasHeight = this.canvasHeight, - minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'), - maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'), - canvasLeft = 0, - lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i, - size, unitSize; - - if (!box._super.render.call(this)) { - return; - } - - if (options.get('raw')) { - if (options.get('showOutliers') && values.length > 5) { - loutlier = values[0]; - lwhisker = values[1]; - q1 = values[2]; - q2 = values[3]; - q3 = values[4]; - rwhisker = values[5]; - routlier = values[6]; - } else { - lwhisker = values[0]; - q1 = values[1]; - q2 = values[2]; - q3 = values[3]; - rwhisker = values[4]; - } - } else { - values.sort(function (a, b) { return a - b; }); - q1 = quartile(values, 1); - q2 = quartile(values, 2); - q3 = quartile(values, 3); - iqr = q3 - q1; - if (options.get('showOutliers')) { - lwhisker = rwhisker = undefined; - for (i = 0; i < vlen; i++) { - if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) { - lwhisker = values[i]; - } - if (values[i] < q3 + (iqr * options.get('outlierIQR'))) { - rwhisker = values[i]; - } - } - loutlier = values[0]; - routlier = values[vlen - 1]; - } else { - lwhisker = values[0]; - rwhisker = values[vlen - 1]; - } - } - this.quartiles = [q1, q2, q3]; - this.lwhisker = lwhisker; - this.rwhisker = rwhisker; - this.loutlier = loutlier; - this.routlier = routlier; - - unitSize = canvasWidth / (maxValue - minValue + 1); - if (options.get('showOutliers')) { - canvasLeft = Math.ceil(options.get('spotRadius')); - canvasWidth -= 2 * Math.ceil(options.get('spotRadius')); - unitSize = canvasWidth / (maxValue - minValue + 1); - if (loutlier < lwhisker) { - target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, - canvasHeight / 2, - options.get('spotRadius'), - options.get('outlierLineColor'), - options.get('outlierFillColor')).append(); - } - if (routlier > rwhisker) { - target.drawCircle((routlier - minValue) * unitSize + canvasLeft, - canvasHeight / 2, - options.get('spotRadius'), - options.get('outlierLineColor'), - options.get('outlierFillColor')).append(); - } - } - - // box - target.drawRect( - Math.round((q1 - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight * 0.1), - Math.round((q3 - q1) * unitSize), - Math.round(canvasHeight * 0.8), - options.get('boxLineColor'), - options.get('boxFillColor')).append(); - // left whisker - target.drawLine( - Math.round((lwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 2), - Math.round((q1 - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 2), - options.get('lineColor')).append(); - target.drawLine( - Math.round((lwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 4), - Math.round((lwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight - canvasHeight / 4), - options.get('whiskerColor')).append(); - // right whisker - target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 2), - Math.round((q3 - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 2), - options.get('lineColor')).append(); - target.drawLine( - Math.round((rwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight / 4), - Math.round((rwhisker - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight - canvasHeight / 4), - options.get('whiskerColor')).append(); - // median line - target.drawLine( - Math.round((q2 - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight * 0.1), - Math.round((q2 - minValue) * unitSize + canvasLeft), - Math.round(canvasHeight * 0.9), - options.get('medianColor')).append(); - if (options.get('target')) { - size = Math.ceil(options.get('spotRadius')); - target.drawLine( - Math.round((options.get('target') - minValue) * unitSize + canvasLeft), - Math.round((canvasHeight / 2) - size), - Math.round((options.get('target') - minValue) * unitSize + canvasLeft), - Math.round((canvasHeight / 2) + size), - options.get('targetColor')).append(); - target.drawLine( - Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size), - Math.round(canvasHeight / 2), - Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size), - Math.round(canvasHeight / 2), - options.get('targetColor')).append(); - } - target.render(); - } - }); - - - // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier - // This is accessible as $(foo).simpledraw() - - VShape = createClass({ - init: function (target, id, type, args) { - this.target = target; - this.id = id; - this.type = type; - this.args = args; - }, - append: function () { - this.target.appendShape(this); - return this; - } - }); - - VCanvas_base = createClass({ - _pxregex: /(\d+)(px)?\s*$/i, - - init: function (width, height, target) { - if (!width) { - return; - } - this.width = width; - this.height = height; - this.target = target; - this.lastShapeId = null; - if (target[0]) { - target = target[0]; - } - $.data(target, '_jqs_vcanvas', this); - }, - - drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) { - return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth); - }, - - drawShape: function (path, lineColor, fillColor, lineWidth) { - return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]); - }, - - drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) { - return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]); - }, - - drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) { - return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]); - }, - - drawRect: function (x, y, width, height, lineColor, fillColor) { - return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]); - }, - - getElement: function () { - return this.canvas; - }, - - /** - * Return the most recently inserted shape id - */ - getLastShapeId: function () { - return this.lastShapeId; - }, - - /** - * Clear and reset the canvas - */ - reset: function () { - alert('reset not implemented'); - }, - - _insert: function (el, target) { - $(target).html(el); - }, - - /** - * Calculate the pixel dimensions of the canvas - */ - _calculatePixelDims: function (width, height, canvas) { - // XXX This should probably be a configurable option - var match; - match = this._pxregex.exec(height); - if (match) { - this.pixelHeight = match[1]; - } else { - this.pixelHeight = $(canvas).height(); - } - match = this._pxregex.exec(width); - if (match) { - this.pixelWidth = match[1]; - } else { - this.pixelWidth = $(canvas).width(); - } - }, - - /** - * Generate a shape object and id for later rendering - */ - _genShape: function (shapetype, shapeargs) { - var id = shapeCount++; - shapeargs.unshift(id); - return new VShape(this, id, shapetype, shapeargs); - }, - - /** - * Add a shape to the end of the render queue - */ - appendShape: function (shape) { - alert('appendShape not implemented'); - }, - - /** - * Replace one shape with another - */ - replaceWithShape: function (shapeid, shape) { - alert('replaceWithShape not implemented'); - }, - - /** - * Insert one shape after another in the render queue - */ - insertAfterShape: function (shapeid, shape) { - alert('insertAfterShape not implemented'); - }, - - /** - * Remove a shape from the queue - */ - removeShapeId: function (shapeid) { - alert('removeShapeId not implemented'); - }, - - /** - * Find a shape at the specified x/y co-ordinates - */ - getShapeAt: function (el, x, y) { - alert('getShapeAt not implemented'); - }, - - /** - * Render all queued shapes onto the canvas - */ - render: function () { - alert('render not implemented'); - } - }); - - - VCanvas_canvas = createClass(VCanvas_base, { - init: function (width, height, target, interact) { - VCanvas_canvas._super.init.call(this, width, height, target); - this.canvas = document.createElement('canvas'); - if (target[0]) { - target = target[0]; - } - $.data(target, '_jqs_vcanvas', this); - $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' }); - this._insert(this.canvas, target); - this._calculatePixelDims(width, height, this.canvas); - this.canvas.width = this.pixelWidth; - this.canvas.height = this.pixelHeight; - this.interact = interact; - this.shapes = {}; - this.shapeseq = []; - this.currentTargetShapeId = undefined; - $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight}); - }, - - _getContext: function (lineColor, fillColor, lineWidth) { - var context = this.canvas.getContext('2d'); - if (lineColor !== undefined) { - context.strokeStyle = lineColor; - } - context.lineWidth = lineWidth === undefined ? 1 : lineWidth; - if (fillColor !== undefined) { - context.fillStyle = fillColor; - } - return context; - }, - - reset: function () { - var context = this._getContext(); - context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); - this.shapes = {}; - this.shapeseq = []; - this.currentTargetShapeId = undefined; - }, - - _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { - var context = this._getContext(lineColor, fillColor, lineWidth), - i, plen; - context.beginPath(); - context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5); - for (i = 1, plen = path.length; i < plen; i++) { - context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines - } - if (lineColor !== undefined) { - context.stroke(); - } - if (fillColor !== undefined) { - context.fill(); - } - if (this.targetX !== undefined && this.targetY !== undefined && - context.isPointInPath(this.targetX, this.targetY)) { - this.currentTargetShapeId = shapeid; - } - }, - - _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { - var context = this._getContext(lineColor, fillColor, lineWidth); - context.beginPath(); - context.arc(x, y, radius, 0, 2 * Math.PI, false); - if (this.targetX !== undefined && this.targetY !== undefined && - context.isPointInPath(this.targetX, this.targetY)) { - this.currentTargetShapeId = shapeid; - } - if (lineColor !== undefined) { - context.stroke(); - } - if (fillColor !== undefined) { - context.fill(); - } - }, - - _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { - var context = this._getContext(lineColor, fillColor); - context.beginPath(); - context.moveTo(x, y); - context.arc(x, y, radius, startAngle, endAngle, false); - context.lineTo(x, y); - context.closePath(); - if (lineColor !== undefined) { - context.stroke(); - } - if (fillColor) { - context.fill(); - } - if (this.targetX !== undefined && this.targetY !== undefined && - context.isPointInPath(this.targetX, this.targetY)) { - this.currentTargetShapeId = shapeid; - } - }, - - _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { - return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor); - }, - - appendShape: function (shape) { - this.shapes[shape.id] = shape; - this.shapeseq.push(shape.id); - this.lastShapeId = shape.id; - return shape.id; - }, - - replaceWithShape: function (shapeid, shape) { - var shapeseq = this.shapeseq, - i; - this.shapes[shape.id] = shape; - for (i = shapeseq.length; i--;) { - if (shapeseq[i] == shapeid) { - shapeseq[i] = shape.id; - } - } - delete this.shapes[shapeid]; - }, - - replaceWithShapes: function (shapeids, shapes) { - var shapeseq = this.shapeseq, - shapemap = {}, - sid, i, first; - - for (i = shapeids.length; i--;) { - shapemap[shapeids[i]] = true; - } - for (i = shapeseq.length; i--;) { - sid = shapeseq[i]; - if (shapemap[sid]) { - shapeseq.splice(i, 1); - delete this.shapes[sid]; - first = i; - } - } - for (i = shapes.length; i--;) { - shapeseq.splice(first, 0, shapes[i].id); - this.shapes[shapes[i].id] = shapes[i]; - } - - }, - - insertAfterShape: function (shapeid, shape) { - var shapeseq = this.shapeseq, - i; - for (i = shapeseq.length; i--;) { - if (shapeseq[i] === shapeid) { - shapeseq.splice(i + 1, 0, shape.id); - this.shapes[shape.id] = shape; - return; - } - } - }, - - removeShapeId: function (shapeid) { - var shapeseq = this.shapeseq, - i; - for (i = shapeseq.length; i--;) { - if (shapeseq[i] === shapeid) { - shapeseq.splice(i, 1); - break; - } - } - delete this.shapes[shapeid]; - }, - - getShapeAt: function (el, x, y) { - this.targetX = x; - this.targetY = y; - this.render(); - return this.currentTargetShapeId; - }, - - render: function () { - var shapeseq = this.shapeseq, - shapes = this.shapes, - shapeCount = shapeseq.length, - context = this._getContext(), - shapeid, shape, i; - context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); - for (i = 0; i < shapeCount; i++) { - shapeid = shapeseq[i]; - shape = shapes[shapeid]; - this['_draw' + shape.type].apply(this, shape.args); - } - if (!this.interact) { - // not interactive so no need to keep the shapes array - this.shapes = {}; - this.shapeseq = []; - } - } - - }); - - - VCanvas_vml = createClass(VCanvas_base, { - init: function (width, height, target) { - var groupel; - VCanvas_vml._super.init.call(this, width, height, target); - if (target[0]) { - target = target[0]; - } - $.data(target, '_jqs_vcanvas', this); - this.canvas = document.createElement('span'); - $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'}); - this._insert(this.canvas, target); - this._calculatePixelDims(width, height, this.canvas); - this.canvas.width = this.pixelWidth; - this.canvas.height = this.pixelHeight; - groupel = ''; - this.canvas.insertAdjacentHTML('beforeEnd', groupel); - this.group = $(this.canvas).children()[0]; - this.rendered = false; - this.prerender = ''; - }, - - _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { - var vpath = [], - initial, stroke, fill, closed, vel, plen, i; - for (i = 0, plen = path.length; i < plen; i++) { - vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]); - } - initial = vpath.splice(0, 1); - lineWidth = lineWidth === undefined ? 1 : lineWidth; - stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; - fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; - closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : ''; - vel = '' + - ' '; - return vel; - }, - - _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { - var stroke, fill, vel; - x -= radius; - y -= radius; - stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; - fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; - vel = ''; - return vel; - - }, - - _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { - var vpath, startx, starty, endx, endy, stroke, fill, vel; - if (startAngle === endAngle) { - return ''; // VML seems to have problem when start angle equals end angle. - } - if ((endAngle - startAngle) === (2 * Math.PI)) { - startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0 - endAngle = (2 * Math.PI); - } - - startx = x + Math.round(Math.cos(startAngle) * radius); - starty = y + Math.round(Math.sin(startAngle) * radius); - endx = x + Math.round(Math.cos(endAngle) * radius); - endy = y + Math.round(Math.sin(endAngle) * radius); - - if (startx === endx && starty === endy) { - if ((endAngle - startAngle) < Math.PI) { - // Prevent very small slices from being mistaken as a whole pie - return ''; - } - // essentially going to be the entire circle, so ignore startAngle - startx = endx = x + radius; - starty = endy = y; - } - - if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) { - return ''; - } - - vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy]; - stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" '; - fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; - vel = '' + - ' '; - return vel; - }, - - _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { - return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor); - }, - - reset: function () { - this.group.innerHTML = ''; - }, - - appendShape: function (shape) { - var vel = this['_draw' + shape.type].apply(this, shape.args); - if (this.rendered) { - this.group.insertAdjacentHTML('beforeEnd', vel); - } else { - this.prerender += vel; - } - this.lastShapeId = shape.id; - return shape.id; - }, - - replaceWithShape: function (shapeid, shape) { - var existing = $('#jqsshape' + shapeid), - vel = this['_draw' + shape.type].apply(this, shape.args); - existing[0].outerHTML = vel; - }, - - replaceWithShapes: function (shapeids, shapes) { - // replace the first shapeid with all the new shapes then toast the remaining old shapes - var existing = $('#jqsshape' + shapeids[0]), - replace = '', - slen = shapes.length, - i; - for (i = 0; i < slen; i++) { - replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args); - } - existing[0].outerHTML = replace; - for (i = 1; i < shapeids.length; i++) { - $('#jqsshape' + shapeids[i]).remove(); - } - }, - - insertAfterShape: function (shapeid, shape) { - var existing = $('#jqsshape' + shapeid), - vel = this['_draw' + shape.type].apply(this, shape.args); - existing[0].insertAdjacentHTML('afterEnd', vel); - }, - - removeShapeId: function (shapeid) { - var existing = $('#jqsshape' + shapeid); - this.group.removeChild(existing[0]); - }, - - getShapeAt: function (el, x, y) { - var shapeid = el.id.substr(8); - return shapeid; - }, - - render: function () { - if (!this.rendered) { - // batch the intial render into a single repaint - this.group.innerHTML = this.prerender; - this.rendered = true; - } - } - }); - - -}))}(document, Math)); diff --git a/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.min.js b/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.min.js deleted file mode 100644 index e3b396c385..0000000000 --- a/awx/ui/client/lib/kapusta-jquery.sparkline/dist/jquery.sparkline.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/* jquery.sparkline 2.1.3 - http://omnipotent.net/jquery.sparkline/ - Licensed under the New BSD License - see above site for details */ -!function(a,b,c){!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.sparkline&&a(jQuery)}(function(d){"use strict";var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K={},L=0;e=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:c,normalRangeMax:c,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:c,chartRangeMax:c,chartRangeMinX:c,chartRangeMaxX:c,tooltipFormat:new g(' {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:c,nullColor:c,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,colorMap:c,tooltipFormat:new g(' {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new g(' {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:c,thresholdValue:0,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,tooltipFormat:new g("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:c,tooltipFormat:new g("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new g(' {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:c,targetColor:"#4a2",chartRangeMax:c,chartRangeMin:c,tooltipFormat:new g("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},D='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;box-sizing: content-box;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',f=function(){var a,b;return a=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(a.prototype=d.extend(new arguments[0],arguments[arguments.length-1]),a._super=arguments[0].prototype):a.prototype=arguments[arguments.length-1],arguments.length>2&&(b=Array.prototype.slice.call(arguments,1,-1),b.unshift(a.prototype),d.extend.apply(d,b))):a.prototype=arguments[0],a.prototype.cls=a,a},d.SPFormatClass=g=f({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,d){var e,f,g,h,i,j=this,k=a;return this.format.replace(this.fre,function(){var a;return f=arguments[1],g=arguments[3],e=j.precre.exec(f),e?(i=e[2],f=e[1]):i=!1,h=k[f],h===c?"":g&&b&&b[g]?(a=b[g],a.get?b[g].get(h)||h:b[g][h]||h):(m(h)&&(h=d.get("numberFormatter")?d.get("numberFormatter")(h):r(h,i,d.get("numberDigitGroupCount"),d.get("numberDigitGroupSep"),d.get("numberDecimalMark"))),h)})}}),d.spformat=function(a,b){return new g(a,b)},h=function(a,b,c){return b>a?b:a>c?c:a},i=function(a,c){var d;return 2===c?(d=b.floor(a.length/2),a.length%2?a[d]:(a[d-1]+a[d])/2):a.length%2?(d=(a.length*c+c)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1]):(d=(a.length*c+2)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1])},j=function(a){var b;switch(a){case"undefined":a=c;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},k=function(a){var b,c=[];for(b=a.length;b--;)c[b]=j(a[b]);return c},l=function(a,b){var c,d,e=[];for(c=0,d=a.length;d>c;c++)a[c]!==b&&e.push(a[c]);return e},m=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},r=function(a,b,c,e,f){var g,h;for(a=(b===!1?parseFloat(a).toString():a.toFixed(b)).split(""),g=(g=d.inArray(".",a))<0?a.length:g,g0;h-=c)a.splice(h,0,e);return a.join("")},n=function(a,b,c){var d;for(d=b.length;d--;)if((!c||null!==b[d])&&b[d]!==a)return!1;return!0},o=function(a){var b,c=0;for(b=a.length;b--;)c+="number"==typeof a[b]?a[b]:0;return c},q=function(a){return d.isArray(a)?a:[a]},p=function(b){var c,d;if(a.createStyleSheet)try{return a.createStyleSheet().cssText=b,void 0}catch(e){d=!0}c=a.createElement("style"),c.type="text/css",a.getElementsByTagName("head")[0].appendChild(c),d?a.styleSheets[a.styleSheets.length-1].cssText=b:c["string"==typeof a.body.style.WebkitAppearance?"innerText":"innerHTML"]=b},d.fn.simpledraw=function(b,e,f,g){var h,i;if(f&&(h=this.data("_jqs_vcanvas")))return h;if(d.fn.sparkline.canvas===!1)return!1;if(d.fn.sparkline.canvas===c){var j=a.createElement("canvas");if(j.getContext&&j.getContext("2d"))d.fn.sparkline.canvas=function(a,b,c,d){return new H(a,b,c,d)};else{if(!a.namespaces||a.namespaces.v)return d.fn.sparkline.canvas=!1,!1;a.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),d.fn.sparkline.canvas=function(a,b,c){return new I(a,b,c)}}}return b===c&&(b=d(this).innerWidth()),e===c&&(e=d(this).innerHeight()),h=d.fn.sparkline.canvas(b,e,this,g),i=d(this).data("_jqs_mhandler"),i&&i.registerCanvas(h),h},d.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},d.RangeMapClass=s=f({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&"string"==typeof b&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=0===c[0].length?-1/0:parseFloat(c[0]),c[1]=0===c[1].length?1/0:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b,d,e,f=this.rangelist;if((e=this.map[a])!==c)return e;if(f)for(b=f.length;b--;)if(d=f[b],d[0]<=a&&d[1]>=a)return d[2];return c}}),d.range_map=function(a){return new s(a)},t=f({init:function(a,b){var c=d(a);this.$el=c,this.options=b,this.currentPageX=0,this.currentPageY=0,this.el=a,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!b.get("disableTooltips"),this.highlightEnabled=!b.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(a){var b=d(a.canvas);this.canvas=a,this.$canvas=b,b.mouseenter(d.proxy(this.mouseenter,this)),b.mouseleave(d.proxy(this.mouseleave,this)),b.click(d.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=c)},mouseclick:function(a){var b=d.Event("sparklineClick");b.originalEvent=a,b.sparklines=this.splist,this.$el.trigger(b)},mouseenter:function(b){d(a.body).unbind("mousemove.jqs"),d(a.body).bind("mousemove.jqs",d.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new u(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){d(a.body).unbind("mousemove.jqs");var b,c,e=this.splist,f=e.length,g=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),c=0;f>c;c++)b=e[c],b.clearRegionHighlight()&&(g=!0);g&&this.canvas.render()},mousemove:function(a){this.currentPageX=a.pageX,this.currentPageY=a.pageY,this.currentEl=a.target,this.tooltip&&this.tooltip.updatePosition(a.pageX,a.pageY),this.updateDisplay()},updateDisplay:function(){var a,b,c,e,f,g=this.splist,h=g.length,i=!1,j=this.$canvas.offset(),k=this.currentPageX-j.left,l=this.currentPageY-j.top;if(this.over){for(c=0;h>c;c++)b=g[c],e=b.setRegionHighlight(this.currentEl,k,l),e&&(i=!0);if(i){if(f=d.Event("sparklineRegionChange"),f.sparklines=this.splist,this.$el.trigger(f),this.tooltip){for(a="",c=0;h>c;c++)b=g[c],a+=b.getCurrentRegionTooltip();this.tooltip.setContent(a)}this.disableHighlight||this.canvas.render()}null===e&&this.mouseleave()}}}),u=f({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(b){var c,e=b.get("tooltipClassname","jqstooltip"),f=this.sizeStyle;this.container=b.get("tooltipContainer")||a.body,this.tooltipOffsetX=b.get("tooltipOffsetX",10),this.tooltipOffsetY=b.get("tooltipOffsetY",12),d("#jqssizetip").remove(),d("#jqstooltip").remove(),this.sizetip=d("
    ",{id:"jqssizetip",style:f,"class":e}),this.tooltip=d("
    ",{id:"jqstooltip","class":e}).appendTo(this.container),c=this.tooltip.offset(),this.offsetLeft=c.left,this.offsetTop=c.top,this.hidden=!0,d(window).unbind("resize.jqs scroll.jqs"),d(window).bind("resize.jqs scroll.jqs",d.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=d(window).scrollTop(),this.scrollLeft=d(window).scrollLeft(),this.scrollRight=this.scrollLeft+d(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){return a?(this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition()),void 0):(this.tooltip.css("visibility","hidden"),this.hidden=!0,void 0)},updatePosition:function(a,b){if(a===c){if(this.mousex===c)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;this.height&&this.width&&!this.hidden&&(b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,bthis.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b}))},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=c,d(window).unbind("resize.jqs scroll.jqs")}}),E=function(){p(D)},d(E),J=[],d.fn.sparkline=function(b,e){return this.each(function(){var f,g,h=new d.fn.sparkline.options(this,e),i=d(this);if(f=function(){var e,f,g,j,k,l,m;return"html"===b||b===c?(m=this.getAttribute(h.get("tagValuesAttribute")),(m===c||null===m)&&(m=i.html()),e=m.replace(/(^\s*\s*$)|\s+/g,"").split(",")):e=b,f="auto"===h.get("width")?e.length*h.get("defaultPixelsPerValue"):h.get("width"),"auto"===h.get("height")?h.get("composite")&&d.data(this,"_jqs_vcanvas")||(j=a.createElement("span"),j.innerHTML="a",i.html(j),g=d(j).innerHeight()||d(j).height(),d(j).remove(),j=null):g=h.get("height"),h.get("disableInteraction")?k=!1:(k=d.data(this,"_jqs_mhandler"),k?h.get("composite")||k.reset():(k=new t(this,h),d.data(this,"_jqs_mhandler",k))),h.get("composite")&&!d.data(this,"_jqs_vcanvas")?(d.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),d.data(this,"_jqs_errnotify",!0)),void 0):(l=new(d.fn.sparkline[h.get("type")])(this,e,h,f,g),l.render(),k&&k.registerSparkline(l),void 0)},d(this).html()&&!h.get("disableHiddenCheck")&&d(this).is(":hidden")||!d(this).parents("body").length){if(!h.get("composite")&&d.data(this,"_jqs_pending"))for(g=J.length;g;g--)J[g-1][0]==this&&J.splice(g-1,1);J.push([this,f]),d.data(this,"_jqs_pending",!0)}else f.call(this)})},d.fn.sparkline.defaults=e(),d.sparkline_display_visible=function(){var a,b,c,e=[];for(b=0,c=J.length;c>b;b++)a=J[b][0],d(a).is(":visible")&&!d(a).parents().is(":hidden")?(J[b][1].call(a),d.data(J[b][0],"_jqs_pending",!1),e.push(b)):d(a).closest("html").length||d.data(a,"_jqs_pending")||(d.data(J[b][0],"_jqs_pending",!1),e.push(b));for(b=e.length;b;b--)J.splice(e[b-1],1)},d.fn.sparkline.options=f({init:function(a,b){var c,e,f,g;this.userOptions=b=b||{},this.tag=a,this.tagValCache={},e=d.fn.sparkline.defaults,f=e.common,this.tagOptionsPrefix=b.enableTagOptions&&(b.tagOptionsPrefix||f.tagOptionsPrefix),g=this.getTagSetting("type"),c=g===K?e[b.type||f.type]:e[g],this.mergedOptions=d.extend({},f,c,b)},getTagSetting:function(a){var b,d,e,f,g=this.tagOptionsPrefix;if(g===!1||g===c)return K;if(this.tagValCache.hasOwnProperty(a))b=this.tagValCache.key;else{if(b=this.tag.getAttribute(g+a),b===c||null===b)b=K;else if("["===b.substr(0,1))for(b=b.substr(1,b.length-2).split(","),d=b.length;d--;)b[d]=j(b[d].replace(/(^\s*)|(\s*$)/g,""));else if("{"===b.substr(0,1))for(e=b.substr(1,b.length-2).split(","),b={},d=e.length;d--;)f=e[d].split(":",2),b[f[0].replace(/(^\s*)|(\s*$)/g,"")]=j(f[1].replace(/(^\s*)|(\s*$)/g,""));else b=j(b);this.tagValCache.key=b}return b},get:function(a,b){var d,e=this.getTagSetting(a);return e!==K?e:(d=this.mergedOptions[a])===c?b:d}}),d.fn.sparkline._base=f({disabled:!1,init:function(a,b,e,f,g){this.el=a,this.$el=d(a),this.values=b,this.options=e,this.width=f,this.height=g,this.currentRegion=c},initTarget:function(){var a=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),a))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return this.disabled?(this.el.innerHTML="",!1):!0},getRegion:function(){},setRegionHighlight:function(a,b,d){var e,f=this.currentRegion,g=!this.options.get("disableHighlight");return b>this.canvasWidth||d>this.canvasHeight||0>b||0>d?null:(e=this.getRegion(a,b,d),f!==e?(f!==c&&g&&this.removeHighlight(),this.currentRegion=e,e!==c&&g&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==c?(this.removeHighlight(),this.currentRegion=c,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(){},getCurrentRegionTooltip:function(){var a,b,e,f,h,i,j,k,l,m,n,o,p,q,r=this.options,s="",t=[];if(this.currentRegion===c)return"";if(a=this.getCurrentRegionFields(),n=r.get("tooltipFormatter"))return n(this,r,a);if(r.get("tooltipChartTitle")&&(s+='
    '+r.get("tooltipChartTitle")+"
    \n"),b=this.options.get("tooltipFormat"),!b)return"";if(d.isArray(b)||(b=[b]),d.isArray(a)||(a=[a]),j=this.options.get("tooltipFormatFieldlist"),k=this.options.get("tooltipFormatFieldlistKey"),j&&k){for(l=[],i=a.length;i--;)m=a[i][k],-1!=(q=d.inArray(m,j))&&(l[q]=a[i]);a=l}for(e=b.length,p=a.length,i=0;e>i;i++)for(o=b[i],"string"==typeof o&&(o=new g(o)),f=o.fclass||"jqsfield",q=0;p>q;q++)a[q].isNull&&r.get("tooltipSkipNull")||(d.extend(a[q],{prefix:r.get("tooltipPrefix"),suffix:r.get("tooltipSuffix")}),h=o.render(a[q],r.get("tooltipValueLookups"),r),t.push('
    '+h+"
    "));return t.length?s+t.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,c){var d,e,f,g,i=c.get("highlightColor"),j=c.get("highlightLighten");if(i)return i;if(j&&(d=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a))){for(f=[],e=4===a.length?16:1,g=0;3>g;g++)f[g]=h(b.round(parseInt(d[g+1],16)*e*j),0,255);return"rgb("+f.join(",")+")"}return a}}),v={changeHighlight:function(a){var b,c=this.currentRegion,e=this.target,f=this.regionShapes[c];f&&(b=this.renderRegion(c,a),d.isArray(b)||d.isArray(f)?(e.replaceWithShapes(f,b),this.regionShapes[c]=d.map(b,function(a){return a.id})):(e.replaceWithShape(f,b),this.regionShapes[c]=b.id))},render:function(){var a,b,c,e,f=this.values,g=this.target,h=this.regionShapes;if(this.cls._super.render.call(this)){for(c=f.length;c--;)if(a=this.renderRegion(c))if(d.isArray(a)){for(b=[],e=a.length;e--;)a[e].append(),b.push(a[e].id);h[c]=b}else a.append(),h[c]=a.id;else h[c]=null;g.render()}}},d.fn.sparkline.line=w=f(d.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){w._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b){var d,e=this.regionMap;for(d=e.length;d--;)if(null!==e[d]&&b>=e[d][0]&&b<=e[d][1])return e[d][2];return c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:null===this.yvalues[a],x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a,b,d=this.currentRegion,e=this.target,f=this.vertices[d],g=this.options,h=g.get("spotRadius"),i=g.get("highlightSpotColor"),j=g.get("highlightLineColor");f&&(h&&i&&(a=e.drawCircle(f[0],f[1],h,c,i),this.highlightSpotId=a.id,e.insertAfterShape(this.lastShapeId,a)),j&&(b=e.drawLine(f[0],this.canvasTop,f[0],this.canvasTop+this.canvasHeight,j),this.highlightLineId=b.id,e.insertAfterShape(this.lastShapeId,b)))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a,c,d,e,f,g=this.values,h=g.length,i=this.xvalues,j=this.yvalues,k=this.yminmax;for(a=0;h>a;a++)c=g[a],d="string"==typeof g[a],e="object"==typeof g[a]&&g[a]instanceof Array,f=d&&g[a].split(":"),d&&2===f.length?(i.push(Number(f[0])),j.push(Number(f[1])),k.push(Number(f[1]))):e?(i.push(c[0]),j.push(c[1]),k.push(c[1])):(i.push(a),null===g[a]||"null"===g[a]?j.push(null):(j.push(Number(c)),k.push(Number(c))));this.options.get("xvalues")&&(i=this.options.get("xvalues")),this.maxy=this.maxyorg=b.max.apply(b,k),this.miny=this.minyorg=b.min.apply(b,k),this.maxx=b.max.apply(b,i),this.minx=b.min.apply(b,i),this.xvalues=i,this.yvalues=j,this.yminmax=k},processRangeOptions:function(){var a=this.options,b=a.get("normalRangeMin"),d=a.get("normalRangeMax");b!==c&&(bthis.maxy&&(this.maxy=d)),a.get("chartRangeMin")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMin")this.maxy)&&(this.maxy=a.get("chartRangeMax")),a.get("chartRangeMinX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMinX")this.maxx)&&(this.maxx=a.get("chartRangeMaxX"))},drawNormalRange:function(a,d,e,f,g){var h=this.options.get("normalRangeMin"),i=this.options.get("normalRangeMax"),j=d+b.round(e-e*((i-this.miny)/g)),k=b.round(e*(i-h)/g);this.target.drawRect(a,j,f,k,c,this.options.get("normalRangeColor")).append()},render:function(){var a,e,f,g,h,i,j,k,l,m,n,o,p,q,r,t,u,v,x,y,z,A,B,C,D,E=this.options,F=this.target,G=this.canvasWidth,H=this.canvasHeight,I=this.vertices,J=E.get("spotRadius"),K=this.regionMap;if(w._super.render.call(this)&&(this.scanValues(),this.processRangeOptions(),B=this.xvalues,C=this.yvalues,this.yminmax.length&&!(this.yvalues.length<2))){for(g=h=0,a=this.maxx-this.minx===0?1:this.maxx-this.minx,e=this.maxy-this.miny===0?1:this.maxy-this.miny,f=this.yvalues.length-1,J&&(4*J>G||4*J>H)&&(J=0),J&&(z=E.get("highlightSpotColor")&&!E.get("disableInteraction"),(z||E.get("minSpotColor")||E.get("spotColor")&&C[f]===this.miny)&&(H-=b.ceil(J)),(z||E.get("maxSpotColor")||E.get("spotColor")&&C[f]===this.maxy)&&(H-=b.ceil(J),g+=b.ceil(J)),(z||(E.get("minSpotColor")||E.get("maxSpotColor"))&&(C[0]===this.miny||C[0]===this.maxy))&&(h+=b.ceil(J),G-=b.ceil(J)),(z||E.get("spotColor")||E.get("minSpotColor")||E.get("maxSpotColor")&&(C[f]===this.miny||C[f]===this.maxy))&&(G-=b.ceil(J))),H--,E.get("normalRangeMin")===c||E.get("drawNormalOnTop")||this.drawNormalRange(h,g,H,G,e),j=[],k=[j],q=r=null,t=C.length,D=0;t>D;D++)l=B[D],n=B[D+1],m=C[D],o=h+b.round((l-this.minx)*(G/a)),p=t-1>D?h+b.round((n-this.minx)*(G/a)):G,r=o+(p-o)/2,K[D]=[q||0,r,D],q=r,null===m?D&&(null!==C[D-1]&&(j=[],k.push(j)),I.push(null)):(mthis.maxy&&(m=this.maxy),j.length||j.push([o,g+H]),i=[o,g+b.round(H-H*((m-this.miny)/e))],j.push(i),I.push(i));for(u=[],v=[],x=k.length,D=0;x>D;D++)j=k[D],j.length&&(E.get("fillColor")&&(j.push([j[j.length-1][0],g+H]),v.push(j.slice(0)),j.pop()),j.length>2&&(j[0]=[j[0][0],j[1][1]]),u.push(j));for(x=v.length,D=0;x>D;D++)F.drawShape(v[D],E.get("fillColor"),E.get("fillColor")).append();for(E.get("normalRangeMin")!==c&&E.get("drawNormalOnTop")&&this.drawNormalRange(h,g,H,G,e),x=u.length,D=0;x>D;D++)F.drawShape(u[D],E.get("lineColor"),c,E.get("lineWidth")).append();if(J&&E.get("valueSpots"))for(y=E.get("valueSpots"),y.get===c&&(y=new s(y)),D=0;t>D;D++)A=y.get(C[D]),A&&F.drawCircle(h+b.round((B[D]-this.minx)*(G/a)),g+b.round(H-H*((C[D]-this.miny)/e)),J,c,A).append();J&&E.get("spotColor")&&null!==C[f]&&F.drawCircle(h+b.round((B[B.length-1]-this.minx)*(G/a)),g+b.round(H-H*((C[f]-this.miny)/e)),J,c,E.get("spotColor")).append(),this.maxy!==this.minyorg&&(J&&E.get("minSpotColor")&&(l=B[d.inArray(this.minyorg,C)],F.drawCircle(h+b.round((l-this.minx)*(G/a)),g+b.round(H-H*((this.minyorg-this.miny)/e)),J,c,E.get("minSpotColor")).append()),J&&E.get("maxSpotColor")&&(l=B[d.inArray(this.maxyorg,C)],F.drawCircle(h+b.round((l-this.minx)*(G/a)),g+b.round(H-H*((this.maxyorg-this.miny)/e)),J,c,E.get("maxSpotColor")).append())),this.lastShapeId=F.getLastShapeId(),this.canvasTop=g,F.render()}}}),d.fn.sparkline.bar=x=f(d.fn.sparkline._base,v,{type:"bar",init:function(a,e,f,g,i){var m,n,o,p,q,r,t,u,v,w,y,z,A,B,C,D,E,F,G,H,I,J,K=parseInt(f.get("barWidth"),10),L=parseInt(f.get("barSpacing"),10),M=f.get("chartRangeMin"),N=f.get("chartRangeMax"),O=f.get("chartRangeClip"),P=1/0,Q=-1/0;for(x._super.init.call(this,a,e,f,g,i),r=0,t=e.length;t>r;r++)H=e[r],m="string"==typeof H&&H.indexOf(":")>-1,(m||d.isArray(H))&&(C=!0,m&&(H=e[r]=k(H.split(":"))),H=l(H,null),n=b.min.apply(b,H),o=b.max.apply(b,H),P>n&&(P=n),o>Q&&(Q=o));this.stacked=C,this.regionShapes={},this.barWidth=K,this.barSpacing=L,this.totalBarWidth=K+L,this.width=g=e.length*K+(e.length-1)*L,this.initTarget(),O&&(A=M===c?-1/0:M,B=N===c?1/0:N),q=[],p=C?[]:q;var R=[],S=[];for(r=0,t=e.length;t>r;r++)if(C)for(D=e[r],e[r]=G=[],R[r]=0,p[r]=S[r]=0,E=0,F=D.length;F>E;E++)H=G[E]=O?h(D[E],A,B):D[E],null!==H&&(H>0&&(R[r]+=H),0>P&&Q>0?0>H?S[r]+=b.abs(H):p[r]+=H:p[r]+=b.abs(H-(0>H?Q:P)),q.push(H));else H=O?h(e[r],A,B):e[r],H=e[r]=j(H),null!==H&&q.push(H);this.max=z=b.max.apply(b,q),this.min=y=b.min.apply(b,q),this.stackMax=Q=C?b.max.apply(b,R):z,this.stackMin=P=C?b.min.apply(b,q):y,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")z)&&(z=f.get("chartRangeMax")),this.zeroAxis=v=f.get("zeroAxis",!0),w=0>=y&&z>=0&&v?0:0==v?y:y>0?y:z,this.xaxisOffset=w,u=C?b.max.apply(b,p)+b.max.apply(b,S):z-y,this.canvasHeightEf=v&&0>y?this.canvasHeight-2:this.canvasHeight-1,w>y?(J=C&&z>=0?Q:z,I=(J-w)/u*this.canvasHeight,I!==b.ceil(I)&&(this.canvasHeightEf-=2,I=b.ceil(I))):I=this.canvasHeight,this.yoffset=I,d.isArray(f.get("colorMap"))?(this.colorMapByIndex=f.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=f.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new s(this.colorMapByValue))),this.range=u},getRegion:function(a,d){var e=b.floor(d/this.totalBarWidth);return 0>e||e>=this.values.length?c:e},getCurrentRegionFields:function(){var a,b,c=this.currentRegion,d=q(this.values[c]),e=[];for(b=d.length;b--;)a=d[b],e.push({isNull:null===a,value:a,color:this.calcColor(b,a,c),offset:c});return e},calcColor:function(a,b,e){var f,g,h=this.colorMapByIndex,i=this.colorMapByValue,j=this.options;return f=this.stacked?j.get("stackedBarColor"):0>b?j.get("negBarColor"):j.get("barColor"),0===b&&j.get("zeroColor")!==c&&(f=j.get("zeroColor")),i&&(g=i.get(b))?f=g:h&&h.length>e&&(f=h[e]),d.isArray(f)?f[a%f.length]:f},renderRegion:function(a,e){var f,g,h,i,j,k,l,m,o,p,q=this.values[a],r=this.options,s=this.xaxisOffset,t=[],u=this.range,v=this.stacked,w=this.target,x=a*this.totalBarWidth,y=this.canvasHeightEf,z=this.yoffset;if(q=d.isArray(q)?q:[q],l=q.length,m=q[0],i=n(null,q),p=n(s,q,!0),i)return r.get("nullColor")?(h=e?r.get("nullColor"):this.calcHighlightColor(r.get("nullColor"),r),f=z>0?z-1:z,w.drawRect(x,f,this.barWidth-1,0,h,h)):c;for(j=z,k=0;l>k;k++){if(m=q[k],v&&m===s){if(!p||o)continue;o=!0}g=u>0?b.floor(y*(b.abs(m-s)/u))+1:1,s>m||m===s&&0===z?(f=j,j+=g):(f=z-g,z-=g),h=this.calcColor(k,m,a),e&&(h=this.calcHighlightColor(h,r)),t.push(w.drawRect(x,f,this.barWidth-1,g-1,h,h))}return 1===t.length?t[0]:t}}),d.fn.sparkline.tristate=y=f(d.fn.sparkline._base,v,{type:"tristate",init:function(a,b,e,f,g){var h=parseInt(e.get("barWidth"),10),i=parseInt(e.get("barSpacing"),10);y._super.init.call(this,a,b,e,f,g),this.regionShapes={},this.barWidth=h,this.barSpacing=i,this.totalBarWidth=h+i,this.values=d.map(b,Number),this.width=f=b.length*h+(b.length-1)*i,d.isArray(e.get("colorMap"))?(this.colorMapByIndex=e.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=e.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new s(this.colorMapByValue))),this.initTarget()},getRegion:function(a,c){return b.floor(c/this.totalBarWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],color:this.calcColor(this.values[a],a),offset:a}},calcColor:function(a,b){var c,d,e=this.values,f=this.options,g=this.colorMapByIndex,h=this.colorMapByValue;return c=h&&(d=h.get(a))?d:g&&g.length>b?g[b]:e[b]<0?f.get("negBarColor"):e[b]>0?f.get("posBarColor"):f.get("zeroBarColor")},renderRegion:function(a,c){var d,e,f,g,h,i,j=this.values,k=this.options,l=this.target;return d=l.pixelHeight,f=b.round(d/2),g=a*this.totalBarWidth,j[a]<0?(h=f,e=f-1):j[a]>0?(h=0,e=f-1):(h=f-1,e=2),i=this.calcColor(j[a],a),null!==i?(c&&(i=this.calcHighlightColor(i,k)),l.drawRect(g,h,this.barWidth-1,e-1,i,i)):void 0}}),d.fn.sparkline.discrete=z=f(d.fn.sparkline._base,v,{type:"discrete",init:function(a,e,f,g,h){z._super.init.call(this,a,e,f,g,h),this.regionShapes={},this.values=e=d.map(e,Number),this.min=b.min.apply(b,e),this.max=b.max.apply(b,e),this.range=this.max-this.min,this.width=g="auto"===f.get("width")?2*e.length:this.width,this.interval=b.floor(g/e.length),this.itemWidth=g/e.length,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")this.max)&&(this.max=f.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight="auto"===f.get("lineHeight")?b.round(.3*this.canvasHeight):f.get("lineHeight"))},getRegion:function(a,c){return b.floor(c/this.itemWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],offset:a}},renderRegion:function(a,c){var d,e,f,g,i=this.values,j=this.options,k=this.min,l=this.max,m=this.range,n=this.interval,o=this.target,p=this.canvasHeight,q=this.lineHeight,r=p-q;return e=h(i[a],k,l),g=a*n,d=b.round(r-r*((e-k)/m)),f=j.get("thresholdColor")&&eh?h:0:e.get("base"),this.min=h,this.max=i,this.range=i-h,this.shapes={},this.valueShapes={},this.regiondata={},this.width=f="auto"===e.get("width")?"4.0em":f,this.target=this.$el.simpledraw(f,g,e.get("composite")),d.length||(this.disabled=!0),this.initTarget()},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{fieldkey:a.substr(0,1),value:this.values[a.substr(1)],region:a}},changeHighlight:function(a){var b,c=this.currentRegion,d=this.valueShapes[c];switch(delete this.shapes[d],c.substr(0,1)){case"r":b=this.renderRange(c.substr(1),a);break;case"p":b=this.renderPerformance(a);break;case"t":b=this.renderTarget(a)}this.valueShapes[c]=b.id,this.shapes[b.id]=c,this.target.replaceWithShape(d,b)},renderRange:function(a,c){var d=this.values[a],e=b.round(this.canvasWidth*((d-this.min)/this.range)),f=this.options.get("rangeColors")[a-2];return c&&(f=this.calcHighlightColor(f,this.options)),this.target.drawRect(0,0,e-1,this.canvasHeight-1,f,f)},renderPerformance:function(a){var c=this.values[1],d=b.round(this.canvasWidth*((c-this.min)/this.range)),e=this.options.get("performanceColor");return a&&(e=this.calcHighlightColor(e,this.options)),this.target.drawRect(0,b.round(.3*this.canvasHeight),d-1,b.round(.4*this.canvasHeight)-1,e,e)},renderTarget:function(a){var c=this.values[0],d=b.round(this.canvasWidth*((c-this.min)/this.range)-this.options.get("targetWidth")/2),e=b.round(.1*this.canvasHeight),f=this.canvasHeight-2*e,g=this.options.get("targetColor");return a&&(g=this.calcHighlightColor(g,this.options)),this.target.drawRect(d,e,this.options.get("targetWidth")-1,f-1,g,g)},render:function(){var a,b,c=this.values.length,d=this.target;if(A._super.render.call(this)){for(a=2;c>a;a++)b=this.renderRange(a).append(),this.shapes[b.id]="r"+a,this.valueShapes["r"+a]=b.id;null!==this.values[1]&&(b=this.renderPerformance().append(),this.shapes[b.id]="p1",this.valueShapes.p1=b.id),null!==this.values[0]&&(b=this.renderTarget().append(),this.shapes[b.id]="t0",this.valueShapes.t0=b.id),d.render()}}}),d.fn.sparkline.pie=B=f(d.fn.sparkline._base,{type:"pie",init:function(a,c,e,f,g){var h,i=0;if(B._super.init.call(this,a,c,e,f,g),this.shapes={},this.valueShapes={},this.values=c=d.map(c,Number),"auto"===e.get("width")&&(this.width=this.height),c.length>0)for(h=c.length;h--;)i+=c[h];this.total=i,this.initTarget(),this.radius=b.floor(b.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],percent:this.values[a]/this.total*100,color:this.options.get("sliceColors")[a%this.options.get("sliceColors").length],offset:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.renderSlice(b,a),d=this.valueShapes[b];delete this.shapes[d],this.target.replaceWithShape(d,c),this.valueShapes[b]=c.id,this.shapes[c.id]=b},renderSlice:function(a,d){var e,f,g,h,i,j=this.target,k=this.options,l=this.radius,m=k.get("borderWidth"),n=k.get("offset"),o=2*b.PI,p=this.values,q=this.total,r=n?2*b.PI*(n/360):0;for(h=p.length,g=0;h>g;g++){if(e=r,f=r,q>0&&(f=r+o*(p[g]/q)),a===g)return i=k.get("sliceColors")[g%k.get("sliceColors").length],d&&(i=this.calcHighlightColor(i,k)),j.drawPieSlice(l,l,l-m,e,f,c,i); -r=f}},render:function(){var a,d,e=this.target,f=this.values,g=this.options,h=this.radius,i=g.get("borderWidth");if(B._super.render.call(this)){for(i&&e.drawCircle(h,h,b.floor(h-i/2),g.get("borderColor"),c,i).append(),d=f.length;d--;)f[d]&&(a=this.renderSlice(d).append(),this.valueShapes[d]=a.id,this.shapes[a.id]=d);e.render()}}}),d.fn.sparkline.box=C=f(d.fn.sparkline._base,{type:"box",init:function(a,b,c,e,f){C._super.init.call(this,a,b,c,e,f),this.values=d.map(b,Number),this.width="auto"===c.get("width")?"4.0em":e,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var a=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]}];return this.loutlier!==c&&a.push({field:"lo",value:this.loutlier}),this.routlier!==c&&a.push({field:"ro",value:this.routlier}),this.lwhisker!==c&&a.push({field:"lw",value:this.lwhisker}),this.rwhisker!==c&&a.push({field:"rw",value:this.rwhisker}),a},render:function(){var a,d,e,f,g,h,j,k,l,m,n,o=this.target,p=this.values,q=p.length,r=this.options,s=this.canvasWidth,t=this.canvasHeight,u=r.get("chartRangeMin")===c?b.min.apply(b,p):r.get("chartRangeMin"),v=r.get("chartRangeMax")===c?b.max.apply(b,p):r.get("chartRangeMax"),w=0;if(C._super.render.call(this)){if(r.get("raw"))r.get("showOutliers")&&p.length>5?(d=p[0],a=p[1],f=p[2],g=p[3],h=p[4],j=p[5],k=p[6]):(a=p[0],f=p[1],g=p[2],h=p[3],j=p[4]);else if(p.sort(function(a,b){return a-b}),f=i(p,1),g=i(p,2),h=i(p,3),e=h-f,r.get("showOutliers")){for(a=j=c,l=0;q>l;l++)a===c&&p[l]>f-e*r.get("outlierIQR")&&(a=p[l]),p[l]d&&o.drawCircle((d-u)*n+w,t/2,r.get("spotRadius"),r.get("outlierLineColor"),r.get("outlierFillColor")).append(),k>j&&o.drawCircle((k-u)*n+w,t/2,r.get("spotRadius"),r.get("outlierLineColor"),r.get("outlierFillColor")).append()),o.drawRect(b.round((f-u)*n+w),b.round(.1*t),b.round((h-f)*n),b.round(.8*t),r.get("boxLineColor"),r.get("boxFillColor")).append(),o.drawLine(b.round((a-u)*n+w),b.round(t/2),b.round((f-u)*n+w),b.round(t/2),r.get("lineColor")).append(),o.drawLine(b.round((a-u)*n+w),b.round(t/4),b.round((a-u)*n+w),b.round(t-t/4),r.get("whiskerColor")).append(),o.drawLine(b.round((j-u)*n+w),b.round(t/2),b.round((h-u)*n+w),b.round(t/2),r.get("lineColor")).append(),o.drawLine(b.round((j-u)*n+w),b.round(t/4),b.round((j-u)*n+w),b.round(t-t/4),r.get("whiskerColor")).append(),o.drawLine(b.round((g-u)*n+w),b.round(.1*t),b.round((g-u)*n+w),b.round(.9*t),r.get("medianColor")).append(),r.get("target")&&(m=b.ceil(r.get("spotRadius")),o.drawLine(b.round((r.get("target")-u)*n+w),b.round(t/2-m),b.round((r.get("target")-u)*n+w),b.round(t/2+m),r.get("targetColor")).append(),o.drawLine(b.round((r.get("target")-u)*n+w-m),b.round(t/2),b.round((r.get("target")-u)*n+w+m),b.round(t/2),r.get("targetColor")).append()),o.render()}}}),F=f({init:function(a,b,c,d){this.target=a,this.id=b,this.type=c,this.args=d},append:function(){return this.target.appendShape(this),this}}),G=f({_pxregex:/(\d+)(px)?\s*$/i,init:function(a,b,c){a&&(this.width=a,this.height=b,this.target=c,this.lastShapeId=null,c[0]&&(c=c[0]),d.data(c,"_jqs_vcanvas",this))},drawLine:function(a,b,c,d,e,f){return this.drawShape([[a,b],[c,d]],e,f)},drawShape:function(a,b,c,d){return this._genShape("Shape",[a,b,c,d])},drawCircle:function(a,b,c,d,e,f){return this._genShape("Circle",[a,b,c,d,e,f])},drawPieSlice:function(a,b,c,d,e,f,g){return this._genShape("PieSlice",[a,b,c,d,e,f,g])},drawRect:function(a,b,c,d,e,f){return this._genShape("Rect",[a,b,c,d,e,f])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(a,b){d(b).html(a)},_calculatePixelDims:function(a,b,c){var e;e=this._pxregex.exec(b),this.pixelHeight=e?e[1]:d(c).height(),e=this._pxregex.exec(a),this.pixelWidth=e?e[1]:d(c).width()},_genShape:function(a,b){var c=L++;return b.unshift(c),new F(this,c,a,b)},appendShape:function(){alert("appendShape not implemented")},replaceWithShape:function(){alert("replaceWithShape not implemented")},insertAfterShape:function(){alert("insertAfterShape not implemented")},removeShapeId:function(){alert("removeShapeId not implemented")},getShapeAt:function(){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),H=f(G,{init:function(b,e,f,g){H._super.init.call(this,b,e,f),this.canvas=a.createElement("canvas"),f[0]&&(f=f[0]),d.data(f,"_jqs_vcanvas",this),d(this.canvas).css({display:"inline-block",width:b,height:e,verticalAlign:"top"}),this._insert(this.canvas,f),this._calculatePixelDims(b,e,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=g,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c,d(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(a,b,d){var e=this.canvas.getContext("2d");return a!==c&&(e.strokeStyle=a),e.lineWidth=d===c?1:d,b!==c&&(e.fillStyle=b),e},reset:function(){var a=this._getContext();a.clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c},_drawShape:function(a,b,d,e,f){var g,h,i=this._getContext(d,e,f);for(i.beginPath(),i.moveTo(b[0][0]+.5,b[0][1]+.5),g=1,h=b.length;h>g;g++)i.lineTo(b[g][0]+.5,b[g][1]+.5);d!==c&&i.stroke(),e!==c&&i.fill(),this.targetX!==c&&this.targetY!==c&&i.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawCircle:function(a,d,e,f,g,h,i){var j=this._getContext(g,h,i);j.beginPath(),j.arc(d,e,f,0,2*b.PI,!1),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a),g!==c&&j.stroke(),h!==c&&j.fill()},_drawPieSlice:function(a,b,d,e,f,g,h,i){var j=this._getContext(h,i);j.beginPath(),j.moveTo(b,d),j.arc(b,d,e,f,g,!1),j.lineTo(b,d),j.closePath(),h!==c&&j.stroke(),i&&j.fill(),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b+d,c],[b+d,c+e],[b,c+e],[b,c]],f,g)},appendShape:function(a){return this.shapes[a.id]=a,this.shapeseq.push(a.id),this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c,d=this.shapeseq;for(this.shapes[b.id]=b,c=d.length;c--;)d[c]==a&&(d[c]=b.id);delete this.shapes[a]},replaceWithShapes:function(a,b){var c,d,e,f=this.shapeseq,g={};for(d=a.length;d--;)g[a[d]]=!0;for(d=f.length;d--;)c=f[d],g[c]&&(f.splice(d,1),delete this.shapes[c],e=d);for(d=b.length;d--;)f.splice(e,0,b[d].id),this.shapes[b[d].id]=b[d]},insertAfterShape:function(a,b){var c,d=this.shapeseq;for(c=d.length;c--;)if(d[c]===a)return d.splice(c+1,0,b.id),this.shapes[b.id]=b,void 0},removeShapeId:function(a){var b,c=this.shapeseq;for(b=c.length;b--;)if(c[b]===a){c.splice(b,1);break}delete this.shapes[a]},getShapeAt:function(a,b,c){return this.targetX=b,this.targetY=c,this.render(),this.currentTargetShapeId},render:function(){var a,b,c,d=this.shapeseq,e=this.shapes,f=d.length,g=this._getContext();for(g.clearRect(0,0,this.pixelWidth,this.pixelHeight),c=0;f>c;c++)a=d[c],b=e[a],this["_draw"+b.type].apply(this,b.args);this.interact||(this.shapes={},this.shapeseq=[])}}),I=f(G,{init:function(b,c,e){var f;I._super.init.call(this,b,c,e),e[0]&&(e=e[0]),d.data(e,"_jqs_vcanvas",this),this.canvas=a.createElement("span"),d(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:b,height:c,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,e),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,f='',this.canvas.insertAdjacentHTML("beforeEnd",f),this.group=d(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(a,b,d,e,f){var g,h,i,j,k,l,m,n=[];for(m=0,l=b.length;l>m;m++)n[m]=""+b[m][0]+","+b[m][1];return g=n.splice(0,1),f=f===c?1:f,h=d===c?' stroked="false" ':' strokeWeight="'+f+'px" strokeColor="'+d+'" ',i=e===c?' filled="false"':' fillColor="'+e+'" filled="true" ',j=n[0]===n[n.length-1]?"x ":"",k=' '},_drawCircle:function(a,b,d,e,f,g,h){var i,j,k;return b-=e,d-=e,i=f===c?' stroked="false" ':' strokeWeight="'+h+'px" strokeColor="'+f+'" ',j=g===c?' filled="false"':' fillColor="'+g+'" filled="true" ',k=''},_drawPieSlice:function(a,d,e,f,g,h,i,j){var k,l,m,n,o,p,q,r;if(g===h)return"";if(h-g===2*b.PI&&(g=0,h=2*b.PI),l=d+b.round(b.cos(g)*f),m=e+b.round(b.sin(g)*f),n=d+b.round(b.cos(h)*f),o=e+b.round(b.sin(h)*f),l===n&&m===o){if(h-g ')},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b,c+e],[b+d,c+e],[b+d,c],[b,c]],f,g)},reset:function(){this.group.innerHTML=""},appendShape:function(a){var b=this["_draw"+a.type].apply(this,a.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",b):this.prerender+=b,this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].outerHTML=e},replaceWithShapes:function(a,b){var c,e=d("#jqsshape"+a[0]),f="",g=b.length;for(c=0;g>c;c++)f+=this["_draw"+b[c].type].apply(this,b[c].args);for(e[0].outerHTML=f,c=1;c" + ], + "description": "angular directive to handle element scroll", + "keywords": [ + "angular", + "scroll", + "inifinite" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "_release": "1.0.0", + "_resolution": { + "type": "version", + "tag": "1.0.0", + "commit": "c833e9d8ff56d6c66e2a21ed7f27ad840f159a8b" + }, + "_source": "https://github.com/lorenzofox3/lrInfiniteScroll.git", + "_target": "~1.0.0", + "_originalSource": "lrInfiniteScroll" +} \ No newline at end of file diff --git a/awx/ui/client/lib/lrInfiniteScroll/index.js b/awx/ui/client/lib/lrInfiniteScroll/index.js new file mode 100644 index 0000000000..62f33e97b4 --- /dev/null +++ b/awx/ui/client/lib/lrInfiniteScroll/index.js @@ -0,0 +1,2 @@ +require('./lrInfiniteScroll'); +module.exports = 'lrInfiniteScroll'; diff --git a/awx/ui/client/lib/lrInfiniteScroll/lrInfiniteScroll.js b/awx/ui/client/lib/lrInfiniteScroll/lrInfiniteScroll.js index 3268a94081..ac29895c2b 100644 --- a/awx/ui/client/lib/lrInfiniteScroll/lrInfiniteScroll.js +++ b/awx/ui/client/lib/lrInfiniteScroll/lrInfiniteScroll.js @@ -2,13 +2,12 @@ 'use strict'; var module = ng.module('lrInfiniteScroll', []); - module.directive('lrInfiniteScroll', ['$log', '$timeout', function ($log, timeout) { + module.directive('lrInfiniteScroll', ['$timeout', function (timeout) { return{ link: function (scope, element, attr) { var lengthThreshold = attr.scrollThreshold || 50, timeThreshold = attr.timeThreshold || 400, - direction = attr.direction || 'down', handler = scope.$eval(attr.lrInfiniteScroll), promise = null, lastRemaining = 9999; @@ -20,14 +19,14 @@ handler = ng.noop; } - $log.debug('lrInfiniteScroll: ' + attr.lrInfiniteScroll); - element.bind('scroll', function () { - var remaining = (direction === 'down') ? element[0].scrollHeight - (element[0].clientHeight + element[0].scrollTop) : element[0].scrollTop; - // if we have reached the threshold and we scroll down - if ((direction === 'down' && remaining < lengthThreshold && (remaining - lastRemaining) < 0) || - direction === 'up' && remaining < lengthThreshold) { - //if there is already a timer running which has not expired yet we have to cancel it and restart the timer + var + remaining = element[0].scrollHeight - (element[0].clientHeight + element[0].scrollTop); + + //if we have reached the threshold and we scroll down + if (remaining < lengthThreshold && (remaining - lastRemaining) < 0) { + + //if there is already a timer running which has no expired yet we have to cancel it and restart the timer if (promise !== null) { timeout.cancel(promise); } diff --git a/awx/ui/client/lib/ngToast/.bower.json b/awx/ui/client/lib/ngToast/.bower.json new file mode 100644 index 0000000000..446800a71d --- /dev/null +++ b/awx/ui/client/lib/ngToast/.bower.json @@ -0,0 +1,59 @@ +{ + "name": "ngToast", + "version": "2.0.0", + "description": "Angular provider for toast notifications", + "main": [ + "dist/ngToast.js", + "dist/ngToast.css" + ], + "keywords": [ + "angular", + "toast", + "message", + "notification", + "toastr" + ], + "repository": { + "type": "git", + "url": "git://github.com/tameraydin/ngToast.git" + }, + "homepage": "http://tameraydin.github.io/ngToast", + "authors": [ + "Tamer Aydin (http://tamerayd.in)", + "Levi Thomason (http://www.levithomason.com)" + ], + "license": "MIT", + "dependencies": { + "angular": ">=1.2.15 <1.6", + "angular-sanitize": ">=1.2.15 <1.6" + }, + "devDependencies": { + "angular-animate": ">=1.2.17 <1.6", + "bootstrap": "~3.3.2", + "Faker": "~2.1.2" + }, + "ignore": [ + "**/.*", + "node_modules", + "test", + "src", + ".editorconfig", + ".gitignore", + ".gitattributes", + ".jshintrc", + ".travis.yml", + "Gruntfile.js", + "package.json", + "index.html" + ], + "_release": "2.0.0", + "_resolution": { + "type": "version", + "tag": "2.0.0", + "commit": "8a1951c54a956c33964c99b338f3a4830e652689" + }, + "_source": "git://github.com/tameraydin/ngToast.git", + "_target": "~2.0.0", + "_originalSource": "ngtoast", + "_direct": true +} \ No newline at end of file diff --git a/awx/ui/client/lib/ngToast/README.md b/awx/ui/client/lib/ngToast/README.md new file mode 100644 index 0000000000..186930a86d --- /dev/null +++ b/awx/ui/client/lib/ngToast/README.md @@ -0,0 +1,119 @@ +ngToast [![Code Climate](http://img.shields.io/codeclimate/github/tameraydin/ngToast.svg?style=flat-square)](https://codeclimate.com/github/tameraydin/ngToast/dist/ngToast.js) [![Build Status](http://img.shields.io/travis/tameraydin/ngToast/master.svg?style=flat-square)](https://travis-ci.org/tameraydin/ngToast) +======= + +ngToast is a simple Angular provider for toast notifications. + +**[Demo](http://tameraydin.github.io/ngToast)** + +## Usage + +1. Install via [Bower](http://bower.io/) or [NPM](http://www.npmjs.org): + ```bash + bower install ngtoast --production + # or + npm install ng-toast --production + ``` + or manually [download](https://github.com/tameraydin/ngToast/archive/master.zip). + +2. Include ngToast source files and dependencies ([ngSanitize](http://docs.angularjs.org/api/ngSanitize), [Bootstrap CSS](http://getbootstrap.com/)): + ```html + + + + + + ``` + *Note: only the [Alerts](http://getbootstrap.com/components/#alerts) component is used as style base, so you don't have to include complete CSS* + +3. Include ngToast as a dependency in your application module: + ```javascript + var app = angular.module('myApp', ['ngToast']); + ``` + +4. Place `toast` element into your HTML: + ```html + + + ... + + ``` + +5. Inject ngToast provider in your controller: + ```javascript + app.controller('myCtrl', function(ngToast) { + ngToast.create('a toast message...'); + }); + // for more info: http://tameraydin.github.io/ngToast/#api + ``` + +## Animations +ngToast comes with optional animations. In order to enable animations in ngToast, you need to include [ngAnimate](http://docs.angularjs.org/api/ngAnimate) module into your app: + +```html + +``` + +**Built-in** + 1. Include the ngToast animation stylesheet: + + ```html + + ``` + + 2. Set the `animation` option. + ```javascript + app.config(['ngToastProvider', function(ngToastProvider) { + ngToastProvider.configure({ + animation: 'slide' // or 'fade' + }); + }]); + ``` + Built-in ngToast animations include `slide` & `fade`. + +**Custom** + + See the [plunker](http://plnkr.co/edit/wglAvsCuTLLykLNqVGwU) using [animate.css](http://daneden.github.io/animate.css/). + + 1. Using the `additionalClasses` option and [ngAnimate](http://docs.angularjs.org/api/ngAnimate) you can easily add your own animations or wire up 3rd party css animations. + ```javascript + app.config(['ngToastProvider', function(ngToastProvider) { + ngToastProvider.configure({ + additionalClasses: 'my-animation' + }); + }]); + ``` + + 2. Then in your CSS (example using animate.css): + ```css + /* Add any vendor prefixes you need */ + .my-animation.ng-enter { + animation: flipInY 1s; + } + + .my-animation.ng-leave { + animation: flipOutY 1s; + } + ``` + +## Settings & API + +Please find at the [project website](http://tameraydin.github.io/ngToast/#api). + +## Development + +* Clone the repo or [download](https://github.com/tameraydin/ngToast/archive/master.zip) +* Install dependencies: ``npm install && bower install`` +* Run ``grunt watch``, play on **/src** +* Build: ``grunt`` + +## License + +MIT [http://tameraydin.mit-license.org/](http://tameraydin.mit-license.org/) + +## Maintainers + +- [Tamer Aydin](http://tamerayd.in) +- [Levi Thomason](http://www.levithomason.com) + +## TODO +- Add more unit & e2e tests diff --git a/awx/ui/client/lib/ngToast/bower.json b/awx/ui/client/lib/ngToast/bower.json new file mode 100644 index 0000000000..4e116404ba --- /dev/null +++ b/awx/ui/client/lib/ngToast/bower.json @@ -0,0 +1,49 @@ +{ + "name": "ngToast", + "version": "2.0.0", + "description": "Angular provider for toast notifications", + "main": [ + "dist/ngToast.js", + "dist/ngToast.css" + ], + "keywords": [ + "angular", + "toast", + "message", + "notification", + "toastr" + ], + "repository": { + "type": "git", + "url": "git://github.com/tameraydin/ngToast.git" + }, + "homepage": "http://tameraydin.github.io/ngToast", + "authors": [ + "Tamer Aydin (http://tamerayd.in)", + "Levi Thomason (http://www.levithomason.com)" + ], + "license": "MIT", + "dependencies": { + "angular": ">=1.2.15 <1.6", + "angular-sanitize": ">=1.2.15 <1.6" + }, + "devDependencies": { + "angular-animate": ">=1.2.17 <1.6", + "bootstrap": "~3.3.2", + "Faker": "~2.1.2" + }, + "ignore": [ + "**/.*", + "node_modules", + "test", + "src", + ".editorconfig", + ".gitignore", + ".gitattributes", + ".jshintrc", + ".travis.yml", + "Gruntfile.js", + "package.json", + "index.html" + ] +} diff --git a/awx/ui/client/lib/ngToast/dist/ngToast-animations.css b/awx/ui/client/lib/ngToast/dist/ngToast-animations.css new file mode 100644 index 0000000000..905bd4d3d9 --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast-animations.css @@ -0,0 +1,107 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +.ng-toast--animate-fade .ng-enter, +.ng-toast--animate-fade .ng-leave, +.ng-toast--animate-fade .ng-move { + transition-property: opacity; + transition-duration: 0.3s; + transition-timing-function: ease; } + +.ng-toast--animate-fade .ng-enter { + opacity: 0; } + +.ng-toast--animate-fade .ng-enter.ng-enter-active { + opacity: 1; } + +.ng-toast--animate-fade .ng-leave { + opacity: 1; } + +.ng-toast--animate-fade .ng-leave.ng-leave-active { + opacity: 0; } + +.ng-toast--animate-fade .ng-move { + opacity: 0.5; } + +.ng-toast--animate-fade .ng-move.ng-move-active { + opacity: 1; } + +.ng-toast--animate-slide .ng-enter, +.ng-toast--animate-slide .ng-leave, +.ng-toast--animate-slide .ng-move { + position: relative; + transition-duration: 0.3s; + transition-timing-function: ease; } + +.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message { + position: relative; + transition-property: top, margin-top, opacity; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-enter { + opacity: 0; + top: -100px; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-enter.ng-enter-active { + opacity: 1; + top: 0; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-leave { + opacity: 1; + top: 0; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-leave.ng-leave-active { + opacity: 0; + margin-top: -72px; } + +.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message { + position: relative; + transition-property: bottom, margin-bottom, opacity; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-enter { + opacity: 0; + bottom: -100px; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-enter.ng-enter-active { + opacity: 1; + bottom: 0; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-leave { + opacity: 1; + bottom: 0; } + .ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-leave.ng-leave-active { + opacity: 0; + margin-bottom: -72px; } + +.ng-toast--animate-slide.ng-toast--right { + transition-property: right, margin-right, opacity; } + .ng-toast--animate-slide.ng-toast--right .ng-enter { + opacity: 0; + right: -200%; + margin-right: 20px; } + .ng-toast--animate-slide.ng-toast--right .ng-enter.ng-enter-active { + opacity: 1; + right: 0; + margin-right: 0; } + .ng-toast--animate-slide.ng-toast--right .ng-leave { + opacity: 1; + right: 0; + margin-right: 0; } + .ng-toast--animate-slide.ng-toast--right .ng-leave.ng-leave-active { + opacity: 0; + right: -200%; + margin-right: 20px; } + +.ng-toast--animate-slide.ng-toast--left { + transition-property: left, margin-left, opacity; } + .ng-toast--animate-slide.ng-toast--left .ng-enter { + opacity: 0; + left: -200%; + margin-left: 20px; } + .ng-toast--animate-slide.ng-toast--left .ng-enter.ng-enter-active { + opacity: 1; + left: 0; + margin-left: 0; } + .ng-toast--animate-slide.ng-toast--left .ng-leave { + opacity: 1; + left: 0; + margin-left: 0; } + .ng-toast--animate-slide.ng-toast--left .ng-leave.ng-leave-active { + opacity: 0; + left: -200%; + margin-left: 20px; } diff --git a/awx/ui/client/lib/ngToast/dist/ngToast-animations.min.css b/awx/ui/client/lib/ngToast/dist/ngToast-animations.min.css new file mode 100644 index 0000000000..607552e896 --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast-animations.min.css @@ -0,0 +1,7 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +.ng-toast--animate-fade .ng-enter,.ng-toast--animate-fade .ng-leave,.ng-toast--animate-fade .ng-move{transition-property:opacity;transition-duration:.3s;transition-timing-function:ease}.ng-toast--animate-fade .ng-enter{opacity:0}.ng-toast--animate-fade .ng-enter.ng-enter-active,.ng-toast--animate-fade .ng-leave{opacity:1}.ng-toast--animate-fade .ng-leave.ng-leave-active{opacity:0}.ng-toast--animate-fade .ng-move{opacity:.5}.ng-toast--animate-fade .ng-move.ng-move-active{opacity:1}.ng-toast--animate-slide .ng-enter,.ng-toast--animate-slide .ng-leave,.ng-toast--animate-slide .ng-move{position:relative;transition-duration:.3s;transition-timing-function:ease}.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message{position:relative;transition-property:top,margin-top,opacity}.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-enter{opacity:0;top:-100px}.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-enter.ng-enter-active,.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-leave{opacity:1;top:0}.ng-toast--animate-slide.ng-toast--center.ng-toast--top .ng-toast__message.ng-leave.ng-leave-active{opacity:0;margin-top:-72px}.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message{position:relative;transition-property:bottom,margin-bottom,opacity}.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-enter{opacity:0;bottom:-100px}.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-enter.ng-enter-active,.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-leave{opacity:1;bottom:0}.ng-toast--animate-slide.ng-toast--center.ng-toast--bottom .ng-toast__message.ng-leave.ng-leave-active{opacity:0;margin-bottom:-72px}.ng-toast--animate-slide.ng-toast--right{transition-property:right,margin-right,opacity}.ng-toast--animate-slide.ng-toast--right .ng-enter{opacity:0;right:-200%;margin-right:20px}.ng-toast--animate-slide.ng-toast--right .ng-enter.ng-enter-active,.ng-toast--animate-slide.ng-toast--right .ng-leave{opacity:1;right:0;margin-right:0}.ng-toast--animate-slide.ng-toast--right .ng-leave.ng-leave-active{opacity:0;right:-200%;margin-right:20px}.ng-toast--animate-slide.ng-toast--left{transition-property:left,margin-left,opacity}.ng-toast--animate-slide.ng-toast--left .ng-enter{opacity:0;left:-200%;margin-left:20px}.ng-toast--animate-slide.ng-toast--left .ng-enter.ng-enter-active,.ng-toast--animate-slide.ng-toast--left .ng-leave{opacity:1;left:0;margin-left:0}.ng-toast--animate-slide.ng-toast--left .ng-leave.ng-leave-active{opacity:0;left:-200%;margin-left:20px} \ No newline at end of file diff --git a/awx/ui/client/lib/ngToast/dist/ngToast.css b/awx/ui/client/lib/ngToast/dist/ngToast.css new file mode 100644 index 0000000000..790b82e28b --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast.css @@ -0,0 +1,60 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +.ng-toast { + position: fixed; + z-index: 1080; + width: 100%; + height: 0; + margin-top: 20px; + text-align: center; } + .ng-toast.ng-toast--top { + top: 0; + bottom: auto; } + .ng-toast.ng-toast--top .ng-toast__list { + top: 0; + bottom: auto; } + .ng-toast.ng-toast--top.ng-toast--center .ng-toast__list { + position: static; } + .ng-toast.ng-toast--bottom { + top: auto; + bottom: 0; } + .ng-toast.ng-toast--bottom .ng-toast__list { + top: auto; + bottom: 0; } + .ng-toast.ng-toast--bottom.ng-toast--center .ng-toast__list { + pointer-events: none; } + .ng-toast.ng-toast--bottom.ng-toast--center .ng-toast__message .alert { + pointer-events: auto; } + .ng-toast.ng-toast--right .ng-toast__list { + left: auto; + right: 0; + margin-right: 20px; } + .ng-toast.ng-toast--right .ng-toast__message { + text-align: right; } + .ng-toast.ng-toast--left .ng-toast__list { + right: auto; + left: 0; + margin-left: 20px; } + .ng-toast.ng-toast--left .ng-toast__message { + text-align: left; } + .ng-toast .ng-toast__list { + display: inline-block; + position: absolute; + right: 0; + left: 0; + margin: 0 auto; + padding: 0; + list-style: none; } + .ng-toast .ng-toast__message { + display: block; + width: 100%; + text-align: center; } + .ng-toast .ng-toast__message .alert { + display: inline-block; } + .ng-toast .ng-toast__message__count { + display: inline-block; + margin: 0 15px 0 5px; } diff --git a/awx/ui/client/lib/ngToast/dist/ngToast.js b/awx/ui/client/lib/ngToast/dist/ngToast.js new file mode 100644 index 0000000000..ed94e0d321 --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast.js @@ -0,0 +1,284 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +(function(window, angular, undefined) { + 'use strict'; + + angular.module('ngToast.provider', []) + .provider('ngToast', [ + function() { + var messages = [], + messageStack = []; + + var defaults = { + animation: false, + className: 'success', + additionalClasses: null, + dismissOnTimeout: true, + timeout: 4000, + dismissButton: false, + dismissButtonHtml: '×', + dismissOnClick: true, + onDismiss: null, + compileContent: false, + combineDuplications: false, + horizontalPosition: 'right', // right, center, left + verticalPosition: 'top', // top, bottom, + maxNumber: 0, + newestOnTop: true + }; + + function Message(msg) { + var id = Math.floor(Math.random()*1000); + while (messages.indexOf(id) > -1) { + id = Math.floor(Math.random()*1000); + } + + this.id = id; + this.count = 0; + this.animation = defaults.animation; + this.className = defaults.className; + this.additionalClasses = defaults.additionalClasses; + this.dismissOnTimeout = defaults.dismissOnTimeout; + this.timeout = defaults.timeout; + this.dismissButton = defaults.dismissButton; + this.dismissButtonHtml = defaults.dismissButtonHtml; + this.dismissOnClick = defaults.dismissOnClick; + this.onDismiss = defaults.onDismiss; + this.compileContent = defaults.compileContent; + + angular.extend(this, msg); + } + + this.configure = function(config) { + angular.extend(defaults, config); + }; + + this.$get = [function() { + var _createWithClassName = function(className, msg) { + msg = (typeof msg === 'object') ? msg : {content: msg}; + msg.className = className; + + return this.create(msg); + }; + + return { + settings: defaults, + messages: messages, + dismiss: function(id) { + if (id) { + for (var i = messages.length - 1; i >= 0; i--) { + if (messages[i].id === id) { + messages.splice(i, 1); + messageStack.splice(messageStack.indexOf(id), 1); + return; + } + } + + } else { + while(messages.length > 0) { + messages.pop(); + } + messageStack = []; + } + }, + create: function(msg) { + msg = (typeof msg === 'object') ? msg : {content: msg}; + + if (defaults.combineDuplications) { + for (var i = messageStack.length - 1; i >= 0; i--) { + var _msg = messages[i]; + var _className = msg.className || 'success'; + + if (_msg.content === msg.content && + _msg.className === _className) { + messages[i].count++; + return; + } + } + } + + if (defaults.maxNumber > 0 && + messageStack.length >= defaults.maxNumber) { + this.dismiss(messageStack[0]); + } + + var newMsg = new Message(msg); + messages[defaults.newestOnTop ? 'unshift' : 'push'](newMsg); + messageStack.push(newMsg.id); + + return newMsg.id; + }, + success: function(msg) { + return _createWithClassName.call(this, 'success', msg); + }, + info: function(msg) { + return _createWithClassName.call(this, 'info', msg); + }, + warning: function(msg) { + return _createWithClassName.call(this, 'warning', msg); + }, + danger: function(msg) { + return _createWithClassName.call(this, 'danger', msg); + } + }; + }]; + } + ]); + +})(window, window.angular); + +(function(window, angular) { + 'use strict'; + + angular.module('ngToast.directives', ['ngToast.provider']) + .run(['$templateCache', + function($templateCache) { + $templateCache.put('ngToast/toast.html', + '
    ' + + '
      ' + + '' + + '' + + '' + + '
    ' + + '
    '); + $templateCache.put('ngToast/toastMessage.html', + '
  • ' + + '
    ' + + '' + + '' + + '{{count + 1}}' + + '' + + '' + + '
    ' + + '
  • '); + } + ]) + .directive('toast', ['ngToast', '$templateCache', '$log', + function(ngToast, $templateCache, $log) { + return { + replace: true, + restrict: 'EA', + templateUrl: 'ngToast/toast.html', + compile: function(tElem, tAttrs) { + if (tAttrs.template) { + var template = $templateCache.get(tAttrs.template); + if (template) { + tElem.replaceWith(template); + } else { + $log.warn('ngToast: Provided template could not be loaded. ' + + 'Please be sure that it is populated before the element is represented.'); + } + } + + return function(scope) { + scope.hPos = ngToast.settings.horizontalPosition; + scope.vPos = ngToast.settings.verticalPosition; + scope.animation = ngToast.settings.animation; + scope.messages = ngToast.messages; + }; + } + }; + } + ]) + .directive('toastMessage', ['$timeout', '$compile', 'ngToast', + function($timeout, $compile, ngToast) { + return { + replace: true, + transclude: true, + restrict: 'EA', + scope: { + message: '=', + count: '=' + }, + controller: ['$scope', 'ngToast', function($scope, ngToast) { + $scope.dismiss = function() { + ngToast.dismiss($scope.message.id); + }; + }], + templateUrl: 'ngToast/toastMessage.html', + link: function(scope, element, attrs, ctrl, transclude) { + element.attr('data-message-id', scope.message.id); + + var dismissTimeout; + var scopeToBind = scope.message.compileContent; + + scope.cancelTimeout = function() { + $timeout.cancel(dismissTimeout); + }; + + scope.startTimeout = function() { + if (scope.message.dismissOnTimeout) { + dismissTimeout = $timeout(function() { + ngToast.dismiss(scope.message.id); + }, scope.message.timeout); + } + }; + + scope.onMouseEnter = function() { + scope.cancelTimeout(); + }; + + scope.onMouseLeave = function() { + scope.startTimeout(); + }; + + if (scopeToBind) { + var transcludedEl; + + transclude(scope, function(clone) { + transcludedEl = clone; + element.children().append(transcludedEl); + }); + + $timeout(function() { + $compile(transcludedEl.contents()) + (typeof scopeToBind === 'boolean' ? + scope.$parent : scopeToBind, function(compiledClone) { + transcludedEl.replaceWith(compiledClone); + }); + }, 0); + } + + scope.startTimeout(); + + if (scope.message.dismissOnClick) { + element.bind('click', function() { + ngToast.dismiss(scope.message.id); + scope.$apply(); + }); + } + + if (scope.message.onDismiss) { + scope.$on('$destroy', + scope.message.onDismiss.bind(scope.message)); + } + } + }; + } + ]); + +})(window, window.angular); + +(function(window, angular) { + 'use strict'; + + angular + .module('ngToast', [ + 'ngSanitize', + 'ngToast.directives', + 'ngToast.provider' + ]); + +})(window, window.angular); diff --git a/awx/ui/client/lib/ngToast/dist/ngToast.min.css b/awx/ui/client/lib/ngToast/dist/ngToast.min.css new file mode 100644 index 0000000000..715f089fc1 --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast.min.css @@ -0,0 +1,7 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +.ng-toast{position:fixed;z-index:1080;width:100%;height:0;margin-top:20px;text-align:center}.ng-toast.ng-toast--top,.ng-toast.ng-toast--top .ng-toast__list{top:0;bottom:auto}.ng-toast.ng-toast--top.ng-toast--center .ng-toast__list{position:static}.ng-toast.ng-toast--bottom,.ng-toast.ng-toast--bottom .ng-toast__list{top:auto;bottom:0}.ng-toast.ng-toast--bottom.ng-toast--center .ng-toast__list{pointer-events:none}.ng-toast.ng-toast--bottom.ng-toast--center .ng-toast__message .alert{pointer-events:auto}.ng-toast.ng-toast--right .ng-toast__list{left:auto;right:0;margin-right:20px}.ng-toast.ng-toast--right .ng-toast__message{text-align:right}.ng-toast.ng-toast--left .ng-toast__list{right:auto;left:0;margin-left:20px}.ng-toast.ng-toast--left .ng-toast__message{text-align:left}.ng-toast .ng-toast__list{display:inline-block;position:absolute;right:0;left:0;margin:0 auto;padding:0;list-style:none}.ng-toast .ng-toast__message{display:block;width:100%;text-align:center}.ng-toast .ng-toast__message .alert{display:inline-block}.ng-toast .ng-toast__message__count{display:inline-block;margin:0 15px 0 5px} \ No newline at end of file diff --git a/awx/ui/client/lib/ngToast/dist/ngToast.min.js b/awx/ui/client/lib/ngToast/dist/ngToast.min.js new file mode 100644 index 0000000000..ecd44bf512 --- /dev/null +++ b/awx/ui/client/lib/ngToast/dist/ngToast.min.js @@ -0,0 +1,7 @@ +/*! + * ngToast v2.0.0 (http://tameraydin.github.io/ngToast) + * Copyright 2016 Tamer Aydin (http://tamerayd.in) + * Licensed under MIT (http://tameraydin.mit-license.org/) + */ + +!function(a,b,c){"use strict";b.module("ngToast.provider",[]).provider("ngToast",[function(){function a(a){for(var d=Math.floor(1e3*Math.random());c.indexOf(d)>-1;)d=Math.floor(1e3*Math.random());this.id=d,this.count=0,this.animation=e.animation,this.className=e.className,this.additionalClasses=e.additionalClasses,this.dismissOnTimeout=e.dismissOnTimeout,this.timeout=e.timeout,this.dismissButton=e.dismissButton,this.dismissButtonHtml=e.dismissButtonHtml,this.dismissOnClick=e.dismissOnClick,this.onDismiss=e.onDismiss,this.compileContent=e.compileContent,b.extend(this,a)}var c=[],d=[],e={animation:!1,className:"success",additionalClasses:null,dismissOnTimeout:!0,timeout:4e3,dismissButton:!1,dismissButtonHtml:"×",dismissOnClick:!0,onDismiss:null,compileContent:!1,combineDuplications:!1,horizontalPosition:"right",verticalPosition:"top",maxNumber:0,newestOnTop:!0};this.configure=function(a){b.extend(e,a)},this.$get=[function(){var b=function(a,b){return b="object"==typeof b?b:{content:b},b.className=a,this.create(b)};return{settings:e,messages:c,dismiss:function(a){if(a){for(var b=c.length-1;b>=0;b--)if(c[b].id===a)return c.splice(b,1),void d.splice(d.indexOf(a),1)}else{for(;c.length>0;)c.pop();d=[]}},create:function(b){if(b="object"==typeof b?b:{content:b},e.combineDuplications)for(var f=d.length-1;f>=0;f--){var g=c[f],h=b.className||"success";if(g.content===b.content&&g.className===h)return void c[f].count++}e.maxNumber>0&&d.length>=e.maxNumber&&this.dismiss(d[0]);var i=new a(b);return c[e.newestOnTop?"unshift":"push"](i),d.push(i.id),i.id},success:function(a){return b.call(this,"success",a)},info:function(a){return b.call(this,"info",a)},warning:function(a){return b.call(this,"warning",a)},danger:function(a){return b.call(this,"danger",a)}}}]}])}(window,window.angular),function(a,b){"use strict";b.module("ngToast.directives",["ngToast.provider"]).run(["$templateCache",function(a){a.put("ngToast/toast.html",'
    '),a.put("ngToast/toastMessage.html",'
  • {{count + 1}}
  • ')}]).directive("toast",["ngToast","$templateCache","$log",function(a,b,c){return{replace:!0,restrict:"EA",templateUrl:"ngToast/toast.html",compile:function(d,e){if(e.template){var f=b.get(e.template);f?d.replaceWith(f):c.warn("ngToast: Provided template could not be loaded. Please be sure that it is populated before the element is represented.")}return function(b){b.hPos=a.settings.horizontalPosition,b.vPos=a.settings.verticalPosition,b.animation=a.settings.animation,b.messages=a.messages}}}}]).directive("toastMessage",["$timeout","$compile","ngToast",function(a,b,c){return{replace:!0,transclude:!0,restrict:"EA",scope:{message:"=",count:"="},controller:["$scope","ngToast",function(a,b){a.dismiss=function(){b.dismiss(a.message.id)}}],templateUrl:"ngToast/toastMessage.html",link:function(d,e,f,g,h){e.attr("data-message-id",d.message.id);var i,j=d.message.compileContent;if(d.cancelTimeout=function(){a.cancel(i)},d.startTimeout=function(){d.message.dismissOnTimeout&&(i=a(function(){c.dismiss(d.message.id)},d.message.timeout))},d.onMouseEnter=function(){d.cancelTimeout()},d.onMouseLeave=function(){d.startTimeout()},j){var k;h(d,function(a){k=a,e.children().append(k)}),a(function(){b(k.contents())("boolean"==typeof j?d.$parent:j,function(a){k.replaceWith(a)})},0)}d.startTimeout(),d.message.dismissOnClick&&e.bind("click",function(){c.dismiss(d.message.id),d.$apply()}),d.message.onDismiss&&d.$on("$destroy",d.message.onDismiss.bind(d.message))}}}])}(window,window.angular),function(a,b){"use strict";b.module("ngToast",["ngSanitize","ngToast.directives","ngToast.provider"])}(window,window.angular); \ No newline at end of file diff --git a/awx/ui/client/lib/nvd3/build/nv.d3.css b/awx/ui/client/lib/nvd3/build/nv.d3.css index e60a4deacc..1ba83e267d 100644 --- a/awx/ui/client/lib/nvd3/build/nv.d3.css +++ b/awx/ui/client/lib/nvd3/build/nv.d3.css @@ -35,11 +35,12 @@ svg.nvd3-svg { .nvtooltip { position: absolute; - background-color: rgba(255,255,255,1.0); + background-color: #848992; padding: 1px; - border: 1px solid rgba(0,0,0,.2); + border: 1px solid #848992; + border-radius: 5px; z-index: 10000; - + color: #ffffff; font-family: Arial; font-size: 13px; text-align: left; @@ -70,7 +71,7 @@ svg.nvd3-svg { .nvtooltip.x-nvtooltip, .nvtooltip.y-nvtooltip { - padding: 8px; + padding: 10px; } .nvtooltip h3 { @@ -127,9 +128,11 @@ svg.nvd3-svg { } .nvtooltip table td.legend-color-guide div { - width: 8px; - height: 8px; + width: 12px; + height: 12px; vertical-align: middle; + border: 1px solid #ffffff; + border-radius: 5px; } .nvtooltip .footer { @@ -569,6 +572,8 @@ svg.nvd3-svg { .nvd3.nv-historicalStockChart .nv-axis .nv-axislabel { font-weight: bold; + fill: #848992; + font-family: 'Open Sans'; } .nvd3.nv-historicalStockChart .nv-dragTarget { diff --git a/awx/ui/client/lib/nvd3/build/nv.d3.js b/awx/ui/client/lib/nvd3/build/nv.d3.js index 0e27f9f1d5..42ffed47a4 100644 --- a/awx/ui/client/lib/nvd3/build/nv.d3.js +++ b/awx/ui/client/lib/nvd3/build/nv.d3.js @@ -476,7 +476,7 @@ nv.nearestValueIndex = function (values, searchVal, threshold) { theadEnter.append("tr") .append("td") .attr("colspan",3) - .append("strong") + // .append("strong") .classed("x-value",true) .html(headerFormatter(d.value)); @@ -9744,8 +9744,8 @@ nv.models.scatterChart = function() { , showYAxis = true , rightAlignYAxis = false , tooltips = true - , tooltipX = function(key, x, y) { return '' + x + '' } - , tooltipY = function(key, x, y) { return '' + y + '' } + , tooltipX = function(key, x, y) { return '
    ' + x + '
    ' } + , tooltipY = function(key, x, y) { return '
    ' + y + '
    ' } , tooltip = function(key, x, y, date) { return '

    ' + key + '

    ' + '

    ' + date + '

    ' } , state = nv.utils.state() diff --git a/awx/ui/client/lib/select2-bootstrap-theme/.bower.json b/awx/ui/client/lib/select2-bootstrap-theme/.bower.json deleted file mode 100644 index 545b43c759..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/.bower.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "select2-bootstrap-theme", - "version": "0.1.0-beta.4", - "main": [ - "dist/select2-bootstrap.css", - "dist/select2-bootstrap.min.css" - ], - "ignore": [ - "**/.*", - "node_modules", - "components" - ], - "devDependencies": { - "bootstrap": "~3.3.5", - "bootstrap-sass-official": "~3.3.5", - "respond": "~1.4.2", - "anchor-js": "~1.1.1" - }, - "homepage": "https://github.com/fk/select2-bootstrap-theme", - "_release": "0.1.0-beta.4", - "_resolution": { - "type": "version", - "tag": "0.1.0-beta.4", - "commit": "2fe20fd58120bf323fb6846d99ca91e6dbf11109" - }, - "_source": "git://github.com/fk/select2-bootstrap-theme.git", - "_target": "~0.1.0-beta.4", - "_originalSource": "select2-bootstrap-theme", - "_direct": true -} \ No newline at end of file diff --git a/awx/ui/client/lib/select2-bootstrap-theme/Gruntfile.js b/awx/ui/client/lib/select2-bootstrap-theme/Gruntfile.js deleted file mode 100755 index d2c9b9bfe5..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/Gruntfile.js +++ /dev/null @@ -1,128 +0,0 @@ -module.exports = function(grunt) { - // Load all grunt tasks. - require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); - - // Project configuration. - grunt.initConfig({ - nodeunit: { - all: ['tests/*_test.js'] - }, - - sass: { - options: { - style: 'expanded', - sourcemap: 'none', - // Increase Sass' default (5) precision to 9 to match Less output. - // - // @see https://github.com/twbs/bootstrap-sass#sass-number-precision - // @see https://github.com/sass/node-sass/issues/673#issue-57581701 - // @see https://github.com/sass/sass/issues/1122 - precision: 9 - }, - dist: { - files: { - 'docs/css/select2-bootstrap.css': 'src/build.scss', - 'dist/select2-bootstrap.css': 'src/build.scss' - } - }, - test: { - files: { - 'tmp/select2-bootstrap.css': 'src/build.scss' - } - } - }, - - cssmin: { - target: { - files: { - 'dist/select2-bootstrap.min.css': 'dist/select2-bootstrap.css' - } - } - }, - - jshint: { - all: ['Gruntfile.js', '*.json'] - }, - - bump: { - options: { - files: [ - 'package.json', - 'bower.json' - ], - push: false, - createTag: false - } - }, - - copy: { - main: { - files: [ - { - src: 'bower_components/bootstrap/dist/css/bootstrap.min.css', - dest: 'docs/css/bootstrap.min.css', - expand: false - }, - { - src: 'bower_components/bootstrap/dist/js/bootstrap.min.js', - dest: 'docs/js/bootstrap.min.js', - expand: false - }, - { - src: 'bower_components/respond/dest/respond.min.js', - dest: 'docs/js/respond.min.js', - expand: false - }, - { - cwd: 'bower_components/bootstrap/dist/fonts', - src: ['**/*'], - dest: 'docs/fonts', - expand: true - }, - { - src: 'bower_components/anchor-js/anchor.min.js', - dest: 'docs/js/anchor.min.js', - expand: false - } - ] - } - }, - - 'gh-pages': { - options: { - base: 'docs/_site', - message: 'Update gh-pages.' - }, - src: ['**/*'] - }, - - jekyll: { - options: { - src: 'docs', - dest: 'docs/_site', - sourcemaps: false - }, - build: { - d: null - }, - serve: { - options: { - serve: true, - watch: true - } - } - }, - - watch: { - files: 'src/select2-bootstrap.scss', - tasks: ['sass'], - options: { - livereload: true - } - } - }); - - // Default tasks. - grunt.registerTask('build', ['sass', 'cssmin', 'copy', 'jekyll:build']); - grunt.registerTask('serve', ['jekyll:serve']); -}; diff --git a/awx/ui/client/lib/select2-bootstrap-theme/README.md b/awx/ui/client/lib/select2-bootstrap-theme/README.md deleted file mode 100755 index 52a4793dff..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/README.md +++ /dev/null @@ -1,58 +0,0 @@ -A Select2 v4 [Theme](https://select2.github.io/examples.html#themes) for Bootstrap 3 - -**Note: Work in progress – depending on your use case, select2-bootstrap-theme might not be production-ready yet!** - -Demonstrations available at -http://select2.github.io/select2-bootstrap-theme/ - -Tested with Bootstrap v3.3.5 and Select2 v4.0.0 -in latest Chrome. - -##### Installation - -The Select2 Bootstrap Theme only works with Select2 v4.x. Applying the theme requires `select2-bootstrap.css` referenced after the default `select2.css` that comes with Select2: - - - - -To apply the theme, tell Select2 to do so by passing `bootstrap` to the [`theme`](https://select2.github.io/examples.html#themes) option when initializing Select2: - - $( "#dropdown" ).select2({ - theme: "bootstrap" - }); - -##### Changelog - -###### 0.1.0-beta.4 - - * Added missing styles for `.select2-container--focus`. [[#18](https://github.com/select2/select2-bootstrap-theme/issues/18)] - * Added support for Bootstrap's [`.form-inline`](http://getbootstrap.com/css/#forms-inline). [[#13](https://github.com/select2/select2-bootstrap-theme/pull/13)] - * Added basic styles for `.select2-selection__clear` in `.select2-selection--multiple`. [[#11](https://github.com/select2/select2-bootstrap-theme/issues/11)] - * Brought Less source in line with the Sass version and fixed Less patch file and test. [[`3e86f34](https://github.com/select2/select2-bootstrap-theme/commit/3e86f34f6c94302cd8b4d6c3d751c5fb70fe61f6)] - -###### 0.1.0-beta.3 - - * Fixed specifity problems with `.form-control.select2-hidden-accessible`. - -###### 0.1.0-beta.2 - - * Added Less version. - -###### 0.1.0-beta.1 - -##### Contributing - -The project offers [Less](http://lesscss.org/) and [Sass](http://sass-lang.com/) sources for building `select2-bootstrap.css`; both make use of variables from either [Bootstrap](https://github.com/twbs/bootstrap) (Less) or [Bootstrap for Sass](https://github.com/twbs/bootstrap-sass). The demo pages are built using [Jekyll](http://jekyllrb.com/) and there are a bunch of [Grunt](http://gruntjs.com/) tasks to ease development. - -With [Ruby](https://www.ruby-lang.org/en/downloads/) and [RubyGems](http://rubygems.org/pages/download), [Jekyll](http://jekyllrb.com/), [Bower](http://bower.io/), [node.js](http://nodejs.org/), [Less](http://lesscss.org/) and [Sass](http://sass-lang.com/) installed, run - - npm install && bower install - -to install all necessary development dependencies. - - * `grunt copy` copies assets from `components` to `_jekyll` – use this in case a new version of Twitter Bootstrap or Select2 are out and need to be tested - * `grunt build` builds `docs` - * `grunt serve` builds `docs` and serves them via Jekyll's `--watch` flag on http://localhost:4000 - * `grunt watch` watches for changes in `src/select2-bootstrap.scss` ([livereload](https://github.com/gruntjs/grunt-contrib-watch#optionslivereload) is enabled) - -Develop in `src/select2-bootstrap.scss` and test your changes using `grunt watch` and `grunt serve`. Ideally, port your changes to `lib/select2-bootstrap.less` and make sure tests are passing to verify that Less and Sass compile down to the target CSS via `npm test`. diff --git a/awx/ui/client/lib/select2-bootstrap-theme/bower.json b/awx/ui/client/lib/select2-bootstrap-theme/bower.json deleted file mode 100755 index a1933febec..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "select2-bootstrap-theme", - "version": "0.1.0-beta.4", - "main": [ - "dist/select2-bootstrap.css", - "dist/select2-bootstrap.min.css" - ], - "ignore": [ - "**/.*", - "node_modules", - "components" - ], - "devDependencies": { - "bootstrap": "~3.3.5", - "bootstrap-sass-official": "~3.3.5", - "respond": "~1.4.2", - "anchor-js": "~1.1.1" - } -} diff --git a/awx/ui/client/lib/select2-bootstrap-theme/dist/select2-bootstrap.css b/awx/ui/client/lib/select2-bootstrap-theme/dist/select2-bootstrap.css deleted file mode 100755 index a2385b5440..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/dist/select2-bootstrap.css +++ /dev/null @@ -1,598 +0,0 @@ -/*! Select2 Bootstrap Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-bootstrap-theme */ -.select2-container--bootstrap { - display: block; - /*------------------------------------*\ - #COMMON STYLES - \*------------------------------------*/ - /** - * Search field in the Select2 dropdown. - */ - /** - * No outline for all search fields - in the dropdown - * and inline in multi Select2s. - */ - /** - * Adjust Select2's choices hover and selected styles to match - * Bootstrap 3's default dropdown styles. - * - * @see http://getbootstrap.com/components/#dropdowns - */ - /** - * Clear the selection. - */ - /** - * Address disabled Select2 styles. - * - * @see https://select2.github.io/examples.html#disabled - * @see http://getbootstrap.com/css/#forms-control-disabled - */ - /*------------------------------------*\ - #DROPDOWN - \*------------------------------------*/ - /** - * Dropdown border color and box-shadow. - */ - /** - * Limit the dropdown height. - */ - /*------------------------------------*\ - #SINGLE SELECT2 - \*------------------------------------*/ - /*------------------------------------*\ - #MULTIPLE SELECT2 - \*------------------------------------*/ - /** - * Address Bootstrap control sizing classes - * - * 1. Reset Bootstrap defaults. - * 2. Adjust the dropdown arrow button icon position. - * - * @see http://getbootstrap.com/css/#forms-control-sizes - */ - /* 1 */ - /*------------------------------------*\ - #RTL SUPPORT - \*------------------------------------*/ -} -.select2-container--bootstrap .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - background-color: #fff; - border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - outline: 0; -} -.select2-container--bootstrap .select2-search--dropdown .select2-search__field { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - background-color: #fff; - border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; -} -.select2-container--bootstrap .select2-search__field { - outline: 0; - /* Firefox 18- */ - /** - * Firefox 19+ - * - * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox - */ -} -.select2-container--bootstrap .select2-search__field::-webkit-input-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-search__field:-moz-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-search__field::-moz-placeholder { - color: #999; - opacity: 1; -} -.select2-container--bootstrap .select2-search__field:-ms-input-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-results__option { - /** - * Disabled results. - * - * @see https://select2.github.io/examples.html#disabled-results - */ - /** - * Hover state. - */ - /** - * Selected state. - */ -} -.select2-container--bootstrap .select2-results__option[role=group] { - padding: 0; -} -.select2-container--bootstrap .select2-results__option[aria-disabled=true] { - color: #777777; - cursor: not-allowed; -} -.select2-container--bootstrap .select2-results__option[aria-selected=true] { - background-color: #f5f5f5; - color: #262626; -} -.select2-container--bootstrap .select2-results__option--highlighted[aria-selected] { - background-color: #337ab7; - color: #fff; -} -.select2-container--bootstrap .select2-results__option .select2-results__option { - padding: 6px 12px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option { - margin-left: -12px; - padding-left: 24px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -24px; - padding-left: 36px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -36px; - padding-left: 48px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -48px; - padding-left: 60px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -60px; - padding-left: 72px; -} -.select2-container--bootstrap .select2-results__group { - color: #777777; - display: block; - padding: 6px 12px; - font-size: 12px; - line-height: 1.428571429; - white-space: nowrap; -} -.select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - border-color: #66afe9; -} -.select2-container--bootstrap.select2-container--open { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ - /** - * Handle border radii of the container when the dropdown is showing. - */ -} -.select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 4px 4px 4px; -} -.select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - border-bottom-color: transparent; -} -.select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-top-color: transparent; -} -.select2-container--bootstrap .select2-selection__clear { - color: #999; - cursor: pointer; - float: right; - font-weight: bold; - margin-right: 10px; -} -.select2-container--bootstrap .select2-selection__clear:hover { - color: #333; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection { - border-color: #ccc; - -webkit-box-shadow: none; - box-shadow: none; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection, -.select2-container--bootstrap.select2-container--disabled .select2-search__field { - cursor: not-allowed; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection, -.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice { - background-color: #eeeeee; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection__clear, -.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove { - display: none; -} -.select2-container--bootstrap .select2-dropdown { - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - border-color: #66afe9; - overflow-x: hidden; - margin-top: -1px; -} -.select2-container--bootstrap .select2-dropdown--above { - margin-top: 1px; -} -.select2-container--bootstrap .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; -} -.select2-container--bootstrap .select2-selection--single { - height: 34px; - line-height: 1.428571429; - padding: 6px 24px 6px 12px; - /** - * Adjust the single Select2's dropdown arrow button appearance. - */ -} -.select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - position: absolute; - bottom: 0; - right: 12px; - top: 0; - width: 4px; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - border-color: #999 transparent transparent transparent; - border-style: solid; - border-width: 4px 4px 0 4px; - height: 0; - left: 0; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__rendered { - color: #555555; - padding: 0; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder { - color: #999; -} -.select2-container--bootstrap .select2-selection--multiple { - min-height: 34px; - /** - * Make Multi Select2's choices match Bootstrap 3's default button styles. - */ - /** - * Minus 2px borders. - */ - /** - * Clear the selection. - */ -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - display: block; - line-height: 1.428571429; - list-style: none; - margin: 0; - overflow: hidden; - padding: 0; - width: 100%; - text-overflow: ellipsis; - white-space: nowrap; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder { - color: #999; - float: left; - margin-top: 5px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - color: #555555; - background: #fff; - border: 1px solid #ccc; - border-radius: 4px; - cursor: default; - float: left; - margin: 5px 0 0 6px; - padding: 0 6px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - background: transparent; - padding: 0 12px; - height: 32px; - line-height: 1.428571429; - margin-top: 0; - min-width: 5em; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove { - color: #999; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 3px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #333; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 6px; -} -.select2-container--bootstrap.input-sm, .select2-container--bootstrap.input-lg { - border-radius: 0; - font-size: 12px; - height: auto; - line-height: 1; - padding: 0; -} -.select2-container--bootstrap.input-sm .select2-selection--single, .input-group-sm .select2-container--bootstrap .select2-selection--single, .form-group-sm .select2-container--bootstrap .select2-selection--single { - border-radius: 3px; - font-size: 12px; - height: 30px; - line-height: 1.5; - padding: 5px 22px 5px 10px; - /* 2 */ -} -.select2-container--bootstrap.input-sm .select2-selection--single .select2-selection__arrow b, .input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - margin-left: -5px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple, .input-group-sm .select2-container--bootstrap .select2-selection--multiple, .form-group-sm .select2-container--bootstrap .select2-selection--multiple { - min-height: 30px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__choice, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 12px; - line-height: 1.5; - margin: 4px 0 0 5px; - padding: 0 5px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 10px; - font-size: 12px; - height: 28px; - line-height: 1.5; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__clear, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 5px; -} -.select2-container--bootstrap.input-lg .select2-selection--single, .input-group-lg .select2-container--bootstrap .select2-selection--single, .form-group-lg .select2-container--bootstrap .select2-selection--single { - border-radius: 6px; - font-size: 18px; - height: 46px; - line-height: 1.3333333; - padding: 10px 31px 10px 16px; - /* 1 */ -} -.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - width: 5px; -} -.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow b, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - border-width: 5px 5px 0 5px; - margin-left: -5px; - margin-left: -10px; - margin-top: -2.5px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple, .input-group-lg .select2-container--bootstrap .select2-selection--multiple, .form-group-lg .select2-container--bootstrap .select2-selection--multiple { - min-height: 46px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__choice, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; - margin: 9px 0 0 8px; - padding: 0 10px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 16px; - font-size: 18px; - height: 44px; - line-height: 1.3333333; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__clear, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 10px; -} -.select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ -} -.select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; -} -.input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ -} -.input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; -} -.select2-container--bootstrap[dir="rtl"] { - /** - * Single Select2 - * - * 1. Makes sure that .select2-selection__placeholder is positioned - * correctly. - */ - /** - * Multiple Select2 - */ -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single { - padding-left: 24px; - padding-right: 12px; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 0; - padding-left: 0; - text-align: right; - /* 1 */ -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 12px; - right: auto; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow b { - margin-left: 0; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice, -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder { - float: right; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 0; - margin-right: 6px; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; -} - -/*------------------------------------*\ - #ADDITIONAL GOODIES -\*------------------------------------*/ -/** - * Address Bootstrap's validation states - * - * If a Select2 widget parent has one of Bootstrap's validation state modifier - * classes, adjust Select2's border colors and focus states accordingly. - * You may apply said classes to the Select2 dropdown (body > .select2-container) - * via JavaScript match Bootstraps' to make its styles match. - * - * @see http://getbootstrap.com/css/#forms-control-validation - */ -.has-warning .select2-dropdown, -.has-warning .select2-selection { - border-color: #8a6d3b; -} -.has-warning .select2-container--focus .select2-selection, -.has-warning .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - border-color: #66512c; -} -.has-warning.select2-drop-active { - border-color: #66512c; -} -.has-warning.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #66512c; -} - -.has-error .select2-dropdown, -.has-error .select2-selection { - border-color: #a94442; -} -.has-error .select2-container--focus .select2-selection, -.has-error .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - border-color: #843534; -} -.has-error.select2-drop-active { - border-color: #843534; -} -.has-error.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #843534; -} - -.has-success .select2-dropdown, -.has-success .select2-selection { - border-color: #3c763d; -} -.has-success .select2-container--focus .select2-selection, -.has-success .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - border-color: #2b542c; -} -.has-success.select2-drop-active { - border-color: #2b542c; -} -.has-success.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #2b542c; -} - -/** - * Select2 widgets in Bootstrap Input Groups - * - * When Select2 widgets are combined with other elements using Bootstraps - * "Input Group" component, we don't want specific edges of the Select2 - * container to have a border-radius. - * - * Use .select2-bootstrap-prepend and .select2-bootstrap-append on - * a Bootstrap 3 .input-group to let the contained Select2 widget know which - * edges should not be rounded as they are directly followed by another element. - * - * @see http://getbootstrap.com/components/#input-groups - */ -/** - * Mimick Bootstraps .input-group .form-control styles. - * - * @see https://github.com/twbs/bootstrap/blob/master/less/input-groups.less - */ -.input-group .select2-container--bootstrap { - display: table; - table-layout: fixed; - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} - -.input-group.select2-bootstrap-prepend .select2-container--bootstrap .select2-selection { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.input-group.select2-bootstrap-append .select2-container--bootstrap .select2-selection { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} - -/** - * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address - * Multi Select2's height which - depending on how many elements have been selected - - * may grow taller than its initial size. - * - * @see http://getbootstrap.com/components/#input-groups - */ -.select2-bootstrap-append .select2-container--bootstrap, -.select2-bootstrap-append .input-group-btn, -.select2-bootstrap-append .input-group-btn .btn, -.select2-bootstrap-prepend .select2-container--bootstrap, -.select2-bootstrap-prepend .input-group-btn, -.select2-bootstrap-prepend .input-group-btn .btn { - vertical-align: top; -} - -/** - * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9 - * - * Provides `!important` for certain properties of the class applied to the - * original ` -
    - -
    - - -
    - -
    - - -
    - - - -

    To let the Select2 widget know if any elements are directly being appended, prepended or both in the context of a Bootstrap Input Group, add .select2-bootstrap-prepend and/or .select2-bootstrap-append to the .input-group wrapper element to address Select2's corresponding border-radii.

    - -
    - -
    - - - - -
    -
    - -
    - -
    - - - - -
    -
    - -
    - -
    - - - - -
    -
    - -
    - -
    - - - - -
    -
    - -
    - -
    - - - - -
    -
    - -
    - -
    - - - - -
    -
    - - - -

    The theme offers styles to display "small" and "large" Select2 widgets in Bootstrap Input Groups with Bootstrap Control Sizing classes applied (e. g. Select2 in .input-group.input-group-sm or .input-group.input-group-lg). You may also apply the Bootstrap Control Sizing classes directly to the .select2-container to alter its appearance.

    - - - -
    -
    - - -

    RTL support via dir="rtl"

    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    - - - - -
    -
    -
    -
    - - - -
    -
    - - -

    Example block-level help text.

    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    - - - - -
    -
    -
    -
    - - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    - -
    - - - - -
    -
    -
    -
    - -

    - Horizontal form group sizes -

    - -

    The theme's styles work in Bootstrap's Horizontal Forms and offers support for Horizontal Form Group Sizes, too.

    - - -
    - - -
    - -
    - -
    - -
    -
    - -
    - - -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    - - - - -
    -
    -
    -
    - -
    -
    $
    - -
    .00
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    - - -
    - -
    - -
    - -
    -
    -
    - - - -

    Tests for Select2 widgets used in context with Bootstrap's Button Addons.

    - -
    -
    - -
    -
    - -
    - -
    -
    -
    - -
    - - - - -
    -
    -
    - - - -
    -
    - -
    - - -
    -
    -
    - -
    - - - - -
    -
    -
    - - - -
    -
    - -
    - - - - -
    -
    -
    - -
    - - - - -
    -
    -
    - - - -

    The theme applies Bootstrap's styles for disabled input elements and for disabled dropdown options to the Select2 widgets and its options. Also see Select2's documentation on its "Disabled mode".

    - -
    -
    -
    - -
    - - - - -
    -
    -
    -
    -
    - -
    - - - - -
    -
    -
    -
    - -
    - - {% include footer.html %} - - {% include scripts.html %} - - - - - diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_layouts/minimal.html b/awx/ui/client/lib/select2-bootstrap-theme/docs/_layouts/minimal.html deleted file mode 100755 index 9f63c182f6..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_layouts/minimal.html +++ /dev/null @@ -1,7 +0,0 @@ - - - {% include head.html %} - - {{ content }} - - diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_alert.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_alert.sass deleted file mode 100644 index ce89228001..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_alert.sass +++ /dev/null @@ -1,17 +0,0 @@ -.alert - padding: 20px - margin: 20px 0 - border: 1px solid #EEE - border-left-width: 5px - border-radius: 3px - .btn-set-scaling-classes - margin-top: 5px - &-info - border-left-color: #CE4844 - background: white - color: #333 - h4 - color: #CE4844 - margin-top: 0 - margin-bottom: 5px - font-size: 18px diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_anchorjs.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_anchorjs.sass deleted file mode 100644 index be1c0a8ec0..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_anchorjs.sass +++ /dev/null @@ -1,6 +0,0 @@ -.anchorjs-link - color: inherit - transition: all .25s linear - -*:hover > .anchorjs-link - margin-left: -1.125em !important diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_buttons.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_buttons.sass deleted file mode 100644 index 3bf6890e22..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_buttons.sass +++ /dev/null @@ -1,8 +0,0 @@ -.btn-outline - border-color: $component-active-bg - color: $component-active-bg - background-color: transparent - &:hover, - &:active - color: $component-active-color - background-color: $component-active-bg diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_common.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_common.sass deleted file mode 100644 index 93ff58116d..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_common.sass +++ /dev/null @@ -1,25 +0,0 @@ -a - &:hover, - &:focus - text-decoration: none - -h1[id] - padding-top: 20px - margin-top: 0 - -.row - padding-bottom: 20px - -@media (min-width: $screen-sm) - .jumbotron - padding-top: 60px - padding-bottom: 60px - font-size: $lead-font-size - h1 - font-size: 32px - .lead - font-size: $lead-font-size - .btn-lg - margin: 20px 0 - padding: 18px 24px - font-size: $lead-font-size diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_extends.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_extends.sass deleted file mode 100755 index c5c38ed627..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_extends.sass +++ /dev/null @@ -1,4 +0,0 @@ -%background-image - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwoAAAJ1CAYAAAB5OweBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAABpxhJREFUeNrsnQe0FFX29cs46lAGRDBgFnPCMCLmwCAiomMgKRkFFFERUBCQpKKgmBgwYUCUIIgJs6hjAhzBiHHMCjqmMo8zfvd3Pm7/6zWdw0vsvdZZr193VXWFW9Xn3LPPPqv88ccfgSAIgiAIgiAIQhyr6hQIgiAIgiAIgqBAQRAEQRAEQRAEBQqCIAiCIAiCIChQEARBEARBEARBgYIgCIIgCIIgCAoUBEEQBEEQBEFQoLAy4+OPPw6//PLLUGdCEARBEARBUKAgJLB06dIgiiKdCEEQBEEQBKFKsIoargmCIAiCIAiCkAxlFARBEARBEARBUKAgCIIgCIIgCIICBUEQBEEQBEEQFCgIgiAIgiAIgqBAQRAEQRAEQRAEBQqCIAiCIAiCIChQEARBEARBEARBgYIgCIIgCIIgCAoUBEEQBEEQBEFQoCAIgiAIgiAIggIFQRAEQRAEQRAUKAiCIAiCIAiCoEBBEARBEARBEAQFCoIgCIIgCIIgKFAQBEEQBEEQBEGBgiAIgiAIgiAIggIFQRAEQRAEQRAUKAiCIAiCIAiCoEBBEARBEARBEAQFCoIgCIIgCIIgKFAQBEEQBEEQBEGBgiAIgiAIgiAIChQEQRAEQRAEQVCgIAiCIAiCIAiCAoWC8fnnn4e6VIIgCIIgCIKgQKECPvvss+Ddd99VsCAIgiAIgiAIlYRV/vjjD50FQRAEQRAEQRAqQDUKgiAIgiAIgiAoUBAEQRAEQRAEQYGCIAiCIAiCIAgKFARBEARBEARBUKAgCIIgCIIgCIICBUEQBEEQBEEQFCgIgiAIgiAIgqBAQRAEQRAEQRAEBQqCINQqfPLJJ+qeLgiCIAgKFARBEP4Py5YtCz/44AOdCEEQBEGoRVjljz/+0FkQBEEQBEEQBKEClFEQBEEQBEEQBEGBgiAIgiAIgiAIChSEGoL58+erEFYQBEEQBEGBgiBUxIYbbqiTIAiCIAiCUI2gYmZBEARBEARBEFaAMgqCIAiCIAiCIChQEARBEARBEAQhO1bXKRCE2oWrr746/Oqrr4IJEyYE//73vxPvH3fcccFuu+0WdOvWLdhyyy0jnSlBEARBEDJBNQqCUIPx7LPPhrNmzQq++eabYPLkyRU+23TTTYMWLVoEu+++e/DLL7/Y50uWLLHPbrjhhqB79+4KFgRBEARBUKAgCLUFL7/8cnj++ecHjzzyiP2/5pprBn/961+DunXr2us+ffoEG2+8cVC/fv0VAoEvv/wy7NmzZ0BwMXXq1KBdu3YKFgRBEARBUKAgCDUdnTt3Dm+99dYgDMPg5JNPDrp27Ro0bdo0b2ffrRM+//zzgbv/FSgIgiAIgqBAQRBqKl577bVwv/32C1ZfffVg9OjRwZlnnlmUg//FF1+Em2yySbDddtsF77zzjoIFQRAEQRBWgFSPBKGaY8CAASFFyPvss0/w3XffRcUGCWDjjTeOFixYELz77rvUMKgrtiAIgiAIChQEoSZhwoQJ4eWXXx40aNAgeOqpp0o68+8Cjwj60auvvhqMGjVKwYIgCIIgCBUg6pEgFIjx48eHqA2tuuqqwSqrrBJEURSMHTvWnPrTTz+dQuFgxx13LMi579ixY3j77bfb6w4dOgRTpkwpGz1oww03DOvVqxe89dZboiAJgiAIgqBAQRAy4YknngjfeOON4F//+lew2mqrUfQbXHPNNcGvv/5qn9evXz9YtmxZhXXWWGMNKy5euHBh8NJLLwU43/QziAPJUr/sTjvtFKy99tomX/rzzz8HZA78/bj++usHxx9/vCkYNW7cuKwO/ODBg8Mnn3wyeO655xQoCIIgCIKQgBquCSstnOMf0pDsiy++CCZNmhQceeSRwTPPPJMIBgDqQuDHH380CVIc/f/+978WEGy//fbm2JNR4C+8f7/e0qVLLdtw4403IklqRchkHW666abgwAMPDLbYYguKiI32M3v27GCttdYii2Dr/u9//wuW040qxXH//vvvLWARBEEQBEGIQxkFYaVD7969w7///e+J/w8++OBgq622Cn744YdgnXXWsdn+Xr16BagCNWzYsOzO+meffRa6AKTKZvNPPvnkkCzI+++/r4yCIAiCIAgKFISqx4IFC8L777///w/EVVYJUPaBgvPee+8FH330kc2yQ99hjPI5s/hbbrllwc7s/PnzQzoVf/3118ExxxwTXHbZZcEGG2xQIROwMuK+++4Ljz322OCFF14I9ttvPwULgiAIgiAoUBCqBq+88kpIL4Dp06enXaZly5YWMCxZsuT/BqsLFhivp556KgFD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dKnKqCBfXCiNCNoQNB/OXZcuXXKuj5oEKDm6+RkOi0kRe+qppxS10C21zHuCSPq1116bcxtInSZxvaZOnaqMcwIc7CN9OXhnxb0dRBq0MMP06dMzpgzwlVdeqf6uV6+e+ttdGC4QR0EgEAiqHC644IIKHF/L6J4s50dQCE466STPWgNoHUwngmuqyng1K8Nogyte1c4N2ZJCGp3RUHH48OHZ5TGczaZ2XoAug2Oh/z7xxBMzZ599dsake7Vt27bCOmiCV2rlJtS0dFT/3XffLcq+oAZlGd3HdYZM05CgKPE3VDp51sVREAgEgioNKAl0dNZwc32L9XEWVC1g5MPz9nMiTCNVG65eGQiyD3DIq9r5wdikuDbqco8//rjK9rmnU8Tbt29f3/WRSTCbqxEMuOaaa7J/U3dA5F7/zbqgG5X6PNHQjYxGsbdLATPOQPPmzTNQ5nThNHQvfod+BQ1JnnVxFAQCgWCbBQ2YKF6Uc1HeCMtjjxMY/X7qRdBcWrRoUeE3OO8o07jnff/999V6HnvssSp3H/br1y+ysYmB7+4/Ae69917P82dSuXbccceMfq6pFfH6TVOIOOdBnZqLgQ8//FDtB/01SrF9sl5169bNZmLoB8H+/PnPf87oe1beLxVRXQRiZciQIWPbGb/5zW/sXr16iXZ4mY/DDz+8qNfw+uuvz6xcudKaNGmS5+9t27a1dthhByXRqac5BrONVj3yu+a8++yzj40ef/fu3RV9pipdl5kzZ9rLly+3yK6EXeaLL77I9gkwR9++fW3HOVMOg9dyb775pnXaaaep///888//jf5uHbNmzVLXY8uWLWrZd955R/UgOOigg0r27G+VJFX71bt375Lsw2GHHWZ/++239nfffUc/icwtt9xin3nmmdbpp5+unCvuWXm7VBziKMiQIUOGDBkyfAdKRxj8GHdjx471NKR22WUXm8ZXy5YtqzD93HPPtW677TZFkzGn//rXv7YdI80aOHBglTtfNKh74IEHQs2LuECTJk2siy66yPO81qpViyi457Kc11133VX9XzceM9ZLcbNyIPS8zjkvyfm49dZbVS+Eo446Su3vq6++SpfrkhrkCxcutNatW6c63T/00EM2TitOjAxxFGTIkCFDhgwZEQYOws4774zxG2jcdenSBYegwrQ999zTPuKII9C1rzT/iBEj7GbNmllb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) - background-repeat: no-repeat - background-position: 50% 0 diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_footer.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_footer.sass deleted file mode 100644 index b809547448..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_footer.sass +++ /dev/null @@ -1,22 +0,0 @@ -.footer - text-align: center - color: #ccc - a - +link - small a - color: #999 - &-links - margin-top: $padding-large-horizontal - margin-bottom: 0 - padding-bottom: $padding-large-horizontal - padding-left: 0 - list-style: none - font-size: 14px - li - display: inline - margin-left: 2px - margin-right: 2px - .demo & - padding-top: 200px - padding-bottom: 80px - @extend %background-image diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_home.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_home.sass deleted file mode 100644 index 7c419f9d18..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_home.sass +++ /dev/null @@ -1,8 +0,0 @@ -.home - padding-bottom: 30px - @extend %background-image - background-position: 50% 50% - body - background-color: transparent - .container - max-width: 700px diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_jumbotron.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_jumbotron.sass deleted file mode 100644 index 60ed699b1f..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_jumbotron.sass +++ /dev/null @@ -1,36 +0,0 @@ -.jumbotron - background-color: transparent - text-align: center - font-weight: normal - &-title - margin-top: 40px - font-size: 28px - h2 - text-align: center - font-size: 16px - hr - border-color: #eee - width: 100px - .lead - font-size: 16px - a - +link - .form-group - background: none - .select2-wrapper - width: 300px - text-align: left - margin: 0 auto $padding-large-horizontal - transition: all .1s ease-in-out - .btn - &-outline - padding: 18px 24px - transition: all .1s ease-in-out - &-lg - padding: 10px 16px - font-size: 18px - line-height: 1.33 - border-radius: 6px - margin-top: 15px - margin-bottom: 15px - margin-left: 0 diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_mixins.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_mixins.sass deleted file mode 100755 index 765a75f186..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_mixins.sass +++ /dev/null @@ -1,9 +0,0 @@ -=link($color: $link-color, $hover-color: $link-hover-color, $border-width: 1px, $font-weight: normal) - border-bottom: $border-width solid transparent - color: $color - font-weight: $font-weight - transition: all .1s ease-in-out - &:hover - border-color: $hover-color - border-width: $border-width - color: $hover-color diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_navbar.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_navbar.sass deleted file mode 100644 index c01caf16da..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_navbar.sass +++ /dev/null @@ -1,4 +0,0 @@ -.navbar-default - background: rgba(#fff,.95) - border-width: 0 0 1px - border-radius: 0 diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_select2-result-repository.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_select2-result-repository.sass deleted file mode 100755 index 85365c2386..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_select2-result-repository.sass +++ /dev/null @@ -1,40 +0,0 @@ -.select2-result-repository - padding-top: 4px - padding-bottom: 3px - &__avatar - float: left - width: 60px - margin-right: 10px - img - width: 100% - height: auto - border-radius: 2px - &__meta - margin-left: 70px - &__title - color: black - font-weight: bold - word-wrap: break-word - line-height: 1.1 - margin-bottom: 4px - &__forks, - &__stargazers - margin-right: 1em - &__forks, - &__stargazers, - &__watchers - display: inline-block - color: #aaa - font-size: 11px - &__description - font-size: 13px - color: #777 - margin-top: 4px - .select2-results__option--highlighted & - &__title - color: white - &__forks, - &__stargazers, - &__description, - &__watchers - color: mix($link-color, white, 30%) diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_variables.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_variables.sass deleted file mode 100755 index e94242b70a..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/_sass/_variables.sass +++ /dev/null @@ -1 +0,0 @@ -$lead-font-size: 20px diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/bootstrap.min.css b/awx/ui/client/lib/select2-bootstrap-theme/docs/css/bootstrap.min.css deleted file mode 100755 index d65c66b1ba..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/bootstrap.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/gh-pages.sass b/awx/ui/client/lib/select2-bootstrap-theme/docs/css/gh-pages.sass deleted file mode 100755 index 04eda11729..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/gh-pages.sass +++ /dev/null @@ -1,16 +0,0 @@ ---- ---- -@import ../../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/variables -@import variables -@import extends -@import mixins - -@import alert -@import anchorjs -@import buttons -@import common -@import footer -@import home -@import jumbotron -@import navbar -@import select2-result-repository diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/select2-bootstrap.css b/awx/ui/client/lib/select2-bootstrap-theme/docs/css/select2-bootstrap.css deleted file mode 100755 index a2385b5440..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/css/select2-bootstrap.css +++ /dev/null @@ -1,598 +0,0 @@ -/*! Select2 Bootstrap Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-bootstrap-theme */ -.select2-container--bootstrap { - display: block; - /*------------------------------------*\ - #COMMON STYLES - \*------------------------------------*/ - /** - * Search field in the Select2 dropdown. - */ - /** - * No outline for all search fields - in the dropdown - * and inline in multi Select2s. - */ - /** - * Adjust Select2's choices hover and selected styles to match - * Bootstrap 3's default dropdown styles. - * - * @see http://getbootstrap.com/components/#dropdowns - */ - /** - * Clear the selection. - */ - /** - * Address disabled Select2 styles. - * - * @see https://select2.github.io/examples.html#disabled - * @see http://getbootstrap.com/css/#forms-control-disabled - */ - /*------------------------------------*\ - #DROPDOWN - \*------------------------------------*/ - /** - * Dropdown border color and box-shadow. - */ - /** - * Limit the dropdown height. - */ - /*------------------------------------*\ - #SINGLE SELECT2 - \*------------------------------------*/ - /*------------------------------------*\ - #MULTIPLE SELECT2 - \*------------------------------------*/ - /** - * Address Bootstrap control sizing classes - * - * 1. Reset Bootstrap defaults. - * 2. Adjust the dropdown arrow button icon position. - * - * @see http://getbootstrap.com/css/#forms-control-sizes - */ - /* 1 */ - /*------------------------------------*\ - #RTL SUPPORT - \*------------------------------------*/ -} -.select2-container--bootstrap .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - background-color: #fff; - border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - outline: 0; -} -.select2-container--bootstrap .select2-search--dropdown .select2-search__field { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - background-color: #fff; - border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; -} -.select2-container--bootstrap .select2-search__field { - outline: 0; - /* Firefox 18- */ - /** - * Firefox 19+ - * - * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox - */ -} -.select2-container--bootstrap .select2-search__field::-webkit-input-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-search__field:-moz-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-search__field::-moz-placeholder { - color: #999; - opacity: 1; -} -.select2-container--bootstrap .select2-search__field:-ms-input-placeholder { - color: #999; -} -.select2-container--bootstrap .select2-results__option { - /** - * Disabled results. - * - * @see https://select2.github.io/examples.html#disabled-results - */ - /** - * Hover state. - */ - /** - * Selected state. - */ -} -.select2-container--bootstrap .select2-results__option[role=group] { - padding: 0; -} -.select2-container--bootstrap .select2-results__option[aria-disabled=true] { - color: #777777; - cursor: not-allowed; -} -.select2-container--bootstrap .select2-results__option[aria-selected=true] { - background-color: #f5f5f5; - color: #262626; -} -.select2-container--bootstrap .select2-results__option--highlighted[aria-selected] { - background-color: #337ab7; - color: #fff; -} -.select2-container--bootstrap .select2-results__option .select2-results__option { - padding: 6px 12px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option { - margin-left: -12px; - padding-left: 24px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -24px; - padding-left: 36px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -36px; - padding-left: 48px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -48px; - padding-left: 60px; -} -.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -60px; - padding-left: 72px; -} -.select2-container--bootstrap .select2-results__group { - color: #777777; - display: block; - padding: 6px 12px; - font-size: 12px; - line-height: 1.428571429; - white-space: nowrap; -} -.select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - border-color: #66afe9; -} -.select2-container--bootstrap.select2-container--open { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ - /** - * Handle border radii of the container when the dropdown is showing. - */ -} -.select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 4px 4px 4px; -} -.select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - border-bottom-color: transparent; -} -.select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-top-color: transparent; -} -.select2-container--bootstrap .select2-selection__clear { - color: #999; - cursor: pointer; - float: right; - font-weight: bold; - margin-right: 10px; -} -.select2-container--bootstrap .select2-selection__clear:hover { - color: #333; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection { - border-color: #ccc; - -webkit-box-shadow: none; - box-shadow: none; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection, -.select2-container--bootstrap.select2-container--disabled .select2-search__field { - cursor: not-allowed; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection, -.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice { - background-color: #eeeeee; -} -.select2-container--bootstrap.select2-container--disabled .select2-selection__clear, -.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove { - display: none; -} -.select2-container--bootstrap .select2-dropdown { - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - border-color: #66afe9; - overflow-x: hidden; - margin-top: -1px; -} -.select2-container--bootstrap .select2-dropdown--above { - margin-top: 1px; -} -.select2-container--bootstrap .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; -} -.select2-container--bootstrap .select2-selection--single { - height: 34px; - line-height: 1.428571429; - padding: 6px 24px 6px 12px; - /** - * Adjust the single Select2's dropdown arrow button appearance. - */ -} -.select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - position: absolute; - bottom: 0; - right: 12px; - top: 0; - width: 4px; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - border-color: #999 transparent transparent transparent; - border-style: solid; - border-width: 4px 4px 0 4px; - height: 0; - left: 0; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__rendered { - color: #555555; - padding: 0; -} -.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder { - color: #999; -} -.select2-container--bootstrap .select2-selection--multiple { - min-height: 34px; - /** - * Make Multi Select2's choices match Bootstrap 3's default button styles. - */ - /** - * Minus 2px borders. - */ - /** - * Clear the selection. - */ -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - display: block; - line-height: 1.428571429; - list-style: none; - margin: 0; - overflow: hidden; - padding: 0; - width: 100%; - text-overflow: ellipsis; - white-space: nowrap; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder { - color: #999; - float: left; - margin-top: 5px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - color: #555555; - background: #fff; - border: 1px solid #ccc; - border-radius: 4px; - cursor: default; - float: left; - margin: 5px 0 0 6px; - padding: 0 6px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - background: transparent; - padding: 0 12px; - height: 32px; - line-height: 1.428571429; - margin-top: 0; - min-width: 5em; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove { - color: #999; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 3px; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #333; -} -.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 6px; -} -.select2-container--bootstrap.input-sm, .select2-container--bootstrap.input-lg { - border-radius: 0; - font-size: 12px; - height: auto; - line-height: 1; - padding: 0; -} -.select2-container--bootstrap.input-sm .select2-selection--single, .input-group-sm .select2-container--bootstrap .select2-selection--single, .form-group-sm .select2-container--bootstrap .select2-selection--single { - border-radius: 3px; - font-size: 12px; - height: 30px; - line-height: 1.5; - padding: 5px 22px 5px 10px; - /* 2 */ -} -.select2-container--bootstrap.input-sm .select2-selection--single .select2-selection__arrow b, .input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - margin-left: -5px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple, .input-group-sm .select2-container--bootstrap .select2-selection--multiple, .form-group-sm .select2-container--bootstrap .select2-selection--multiple { - min-height: 30px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__choice, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 12px; - line-height: 1.5; - margin: 4px 0 0 5px; - padding: 0 5px; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 10px; - font-size: 12px; - height: 28px; - line-height: 1.5; -} -.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__clear, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 5px; -} -.select2-container--bootstrap.input-lg .select2-selection--single, .input-group-lg .select2-container--bootstrap .select2-selection--single, .form-group-lg .select2-container--bootstrap .select2-selection--single { - border-radius: 6px; - font-size: 18px; - height: 46px; - line-height: 1.3333333; - padding: 10px 31px 10px 16px; - /* 1 */ -} -.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - width: 5px; -} -.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow b, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - border-width: 5px 5px 0 5px; - margin-left: -5px; - margin-left: -10px; - margin-top: -2.5px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple, .input-group-lg .select2-container--bootstrap .select2-selection--multiple, .form-group-lg .select2-container--bootstrap .select2-selection--multiple { - min-height: 46px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__choice, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; - margin: 9px 0 0 8px; - padding: 0 10px; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 16px; - font-size: 18px; - height: 44px; - line-height: 1.3333333; -} -.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__clear, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 10px; -} -.select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ -} -.select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; -} -.input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single { - /** - * Make the dropdown arrow point up while the dropdown is visible. - */ -} -.input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; -} -.select2-container--bootstrap[dir="rtl"] { - /** - * Single Select2 - * - * 1. Makes sure that .select2-selection__placeholder is positioned - * correctly. - */ - /** - * Multiple Select2 - */ -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single { - padding-left: 24px; - padding-right: 12px; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 0; - padding-left: 0; - text-align: right; - /* 1 */ -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 12px; - right: auto; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow b { - margin-left: 0; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice, -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder { - float: right; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 0; - margin-right: 6px; -} -.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; -} - -/*------------------------------------*\ - #ADDITIONAL GOODIES -\*------------------------------------*/ -/** - * Address Bootstrap's validation states - * - * If a Select2 widget parent has one of Bootstrap's validation state modifier - * classes, adjust Select2's border colors and focus states accordingly. - * You may apply said classes to the Select2 dropdown (body > .select2-container) - * via JavaScript match Bootstraps' to make its styles match. - * - * @see http://getbootstrap.com/css/#forms-control-validation - */ -.has-warning .select2-dropdown, -.has-warning .select2-selection { - border-color: #8a6d3b; -} -.has-warning .select2-container--focus .select2-selection, -.has-warning .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - border-color: #66512c; -} -.has-warning.select2-drop-active { - border-color: #66512c; -} -.has-warning.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #66512c; -} - -.has-error .select2-dropdown, -.has-error .select2-selection { - border-color: #a94442; -} -.has-error .select2-container--focus .select2-selection, -.has-error .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - border-color: #843534; -} -.has-error.select2-drop-active { - border-color: #843534; -} -.has-error.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #843534; -} - -.has-success .select2-dropdown, -.has-success .select2-selection { - border-color: #3c763d; -} -.has-success .select2-container--focus .select2-selection, -.has-success .select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - border-color: #2b542c; -} -.has-success.select2-drop-active { - border-color: #2b542c; -} -.has-success.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #2b542c; -} - -/** - * Select2 widgets in Bootstrap Input Groups - * - * When Select2 widgets are combined with other elements using Bootstraps - * "Input Group" component, we don't want specific edges of the Select2 - * container to have a border-radius. - * - * Use .select2-bootstrap-prepend and .select2-bootstrap-append on - * a Bootstrap 3 .input-group to let the contained Select2 widget know which - * edges should not be rounded as they are directly followed by another element. - * - * @see http://getbootstrap.com/components/#input-groups - */ -/** - * Mimick Bootstraps .input-group .form-control styles. - * - * @see https://github.com/twbs/bootstrap/blob/master/less/input-groups.less - */ -.input-group .select2-container--bootstrap { - display: table; - table-layout: fixed; - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} - -.input-group.select2-bootstrap-prepend .select2-container--bootstrap .select2-selection { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.input-group.select2-bootstrap-append .select2-container--bootstrap .select2-selection { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} - -/** - * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address - * Multi Select2's height which - depending on how many elements have been selected - - * may grow taller than its initial size. - * - * @see http://getbootstrap.com/components/#input-groups - */ -.select2-bootstrap-append .select2-container--bootstrap, -.select2-bootstrap-append .input-group-btn, -.select2-bootstrap-append .input-group-btn .btn, -.select2-bootstrap-prepend .select2-container--bootstrap, -.select2-bootstrap-prepend .input-group-btn, -.select2-bootstrap-prepend .input-group-btn .btn { - vertical-align: top; -} - -/** - * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9 - * - * Provides `!important` for certain properties of the class applied to the - * original ` - - {% include select2-select.html %} - -
    -
    - -
    -
    -
    -
    - - - - -
    -
    -
    - -

    Select2 Bootstrap Theme

    - -

    A Select2 v4 theme built with Bootstrap 3 variables and mixins.

    - - Demonstrations -
    -
    - -{% include footer.html %} - -{% include scripts.html %} - diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/js/bootstrap.min.js b/awx/ui/client/lib/select2-bootstrap-theme/docs/js/bootstrap.min.js deleted file mode 100755 index 133aeecb98..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/awx/ui/client/lib/select2-bootstrap-theme/docs/js/respond.min.js b/awx/ui/client/lib/select2-bootstrap-theme/docs/js/respond.min.js deleted file mode 100755 index 80a7b69dcc..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/docs/js/respond.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl - * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT - * */ - -!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b .select2-results__options { - max-height: 200px; - overflow-y: auto; - } - - - - - - /*------------------------------------*\ - #SINGLE SELECT2 - \*------------------------------------*/ - - .select2-selection--single { - height: @input-height-base; - line-height: @line-height-base; - padding: @padding-base-vertical @padding-base-horizontal + @caret-width-base*3 @padding-base-vertical @padding-base-horizontal; - - /** - * Adjust the single Select2's dropdown arrow button appearance. - */ - - .select2-selection__arrow { - position: absolute; - bottom: 0; - right: @padding-base-horizontal; - top: 0; - width: @caret-width-base; - - b { - border-color: @dropdown-arrow-color transparent transparent transparent; - border-style: solid; - border-width: @caret-width-base @caret-width-base 0 @caret-width-base; - height: 0; - left: 0; - margin-left: -@caret-width-base; - margin-top: -@caret-width-base/2; - position: absolute; - top: 50%; - width: 0; - } - } - - .select2-selection__rendered { - color: @input-color; - padding: 0; - } - - .select2-selection__placeholder { - color: @input-color-placeholder; - } - } - - - - - - /*------------------------------------*\ - #MULTIPLE SELECT2 - \*------------------------------------*/ - - .select2-selection--multiple { - min-height: @input-height-base; - - .select2-selection__rendered { - box-sizing: border-box; - display: block; - line-height: @line-height-base; - list-style: none; - margin: 0; - overflow: hidden; - padding: 0; - width: 100%; - text-overflow: ellipsis; - white-space: nowrap; - } - - .select2-selection__placeholder { - color: @input-color-placeholder; - float: left; - margin-top: 5px; - } - - /** - * Make Multi Select2's choices match Bootstrap 3's default button styles. - */ - - .select2-selection__choice { - color: @input-color; - background: @btn-default-bg; - border: 1px solid @btn-default-border; - border-radius: 4px; - cursor: default; - float: left; - margin: (@padding-base-vertical - 1) 0 0 @padding-base-horizontal/2; - padding: 0 @padding-base-vertical; - } - - /** - * Minus 2px borders. - */ - - .select2-search--inline { - .select2-search__field { - background: transparent; - padding: 0 @padding-base-horizontal; - height: @input-height-base - 2; - line-height: @line-height-base; - margin-top: 0; - min-width: 5em; - } - } - - .select2-selection__choice__remove { - color: #999; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: @padding-base-vertical / 2; - - &:hover { - color: #333; - } - } - - /** - * Clear the selection. - */ - - .select2-selection__clear { - margin-top: @padding-base-vertical; - } - } - - - - - - /** - * Address Bootstrap control sizing classes - * - * 1. Reset Bootstrap defaults. - * 2. Adjust the dropdown arrow button icon position. - * - * @see http://getbootstrap.com/css/#forms-control-sizes - */ - - /* 1 */ - &.input-sm, - &.input-lg { - border-radius: 0; - font-size: 12px; - height: auto; - line-height: 1; - padding: 0; - } - - &.input-sm, - .input-group-sm &, - .form-group-sm & { - .select2-selection--single { - border-radius: @border-radius-small; - font-size: @font-size-small; - height: @input-height-small; - line-height: @line-height-small; - padding: @padding-small-vertical @padding-small-horizontal + @caret-width-base*3 @padding-small-vertical @padding-small-horizontal; - - /* 2 */ - .select2-selection__arrow b { - margin-left: -@padding-small-vertical; - } - } - - .select2-selection--multiple { - min-height: @input-height-small; - - .select2-selection__choice { - font-size: @font-size-small; - line-height: @line-height-small; - margin: (@padding-small-vertical - 1) 0 0 @padding-small-horizontal/2; - padding: 0 @padding-small-vertical; - } - - .select2-search--inline .select2-search__field { - padding: 0 @padding-small-horizontal; - font-size: @font-size-small; - height: @input-height-small - 2; - line-height: @line-height-small; - } - - .select2-selection__clear { - margin-top: @padding-small-vertical; - } - } - } - - &.input-lg, - .input-group-lg &, - .form-group-lg & { - .select2-selection--single { - border-radius: @border-radius-large; - font-size: @font-size-large; - height: @input-height-large; - line-height: @line-height-large; - padding: @padding-large-vertical @padding-large-horizontal + @caret-width-large*3 @padding-large-vertical @padding-large-horizontal; - - /* 1 */ - .select2-selection__arrow { - width: @caret-width-large; - - b { - border-width: @caret-width-large @caret-width-large 0 @caret-width-large; - margin-left: -@caret-width-large; - margin-left: -@padding-large-vertical; - margin-top: -@caret-width-large/2; - } - } - } - - .select2-selection--multiple { - min-height: @input-height-large; - - .select2-selection__choice { - font-size: @font-size-large; - line-height: @line-height-large; - border-radius: 4px; - margin: (@padding-large-vertical - 1) 0 0 @padding-large-horizontal/2; - padding: 0 @padding-large-vertical; - } - - .select2-search--inline .select2-search__field { - padding: 0 @padding-large-horizontal; - font-size: @font-size-large; - height: @input-height-large - 2; - line-height: @line-height-large; - } - - .select2-selection__clear { - margin-top: @padding-large-vertical; - } - } - } - - &.input-lg.select2-container--open { - .dropdown-arrow; - } - - .input-group-lg & { - &.select2-container--open { - .dropdown-arrow; - } - } - - - - - - /*------------------------------------*\ - #RTL SUPPORT - \*------------------------------------*/ - - &[dir="rtl"] { - - /** - * Single Select2 - * - * 1. Makes sure that .select2-selection__placeholder is positioned - * correctly. - */ - - .select2-selection--single { - padding-left: @padding-base-horizontal + @caret-width-base*3; - padding-right: @padding-base-horizontal; - .select2-selection__rendered { - padding-right: 0; - padding-left: 0; - text-align: right; /* 1 */ - } - - .select2-selection__clear { - float: left; - } - - .select2-selection__arrow { - left: @padding-base-horizontal; - right: auto; - - b { - margin-left: 0; - } - } - } - - /** - * Multiple Select2 - */ - - .select2-selection--multiple { - .select2-selection__choice, - .select2-selection__placeholder { - float: right; - } - - .select2-selection__choice { - margin-left: 0; - margin-right: @padding-base-horizontal/2; - } - - .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; - } - } - } -} - - - - - -/*------------------------------------*\ - #ADDITIONAL GOODIES -\*------------------------------------*/ - -/** - * Address Bootstrap's validation states - * - * If a Select2 widget parent has one of Bootstrap's validation state modifier - * classes, adjust Select2's border colors and focus states accordingly. - * You may apply said classes to the Select2 dropdown (body > .select2-container) - * via JavaScript match Bootstraps' to make its styles match. - * - * @see http://getbootstrap.com/css/#forms-control-validation - */ - -.has-warning { - .validation-state-focus(@state-warning-text); -} - -.has-error { - .validation-state-focus(@state-danger-text); -} - -.has-success { - .validation-state-focus(@state-success-text); -} - -/** - * Select2 widgets in Bootstrap Input Groups - * - * When Select2 widgets are combined with other elements using Bootstraps - * "Input Group" component, we don't want specific edges of the Select2 - * container to have a border-radius. - * - * Use .select2-bootstrap-prepend and .select2-bootstrap-append on - * a Bootstrap 3 .input-group to let the contained Select2 widget know which - * edges should not be rounded as they are directly followed by another element. - * - * @see http://getbootstrap.com/components/#input-groups - */ - -/** - * Mimick Bootstraps .input-group .form-control styles. - * - * @see https://github.com/twbs/bootstrap/blob/master/less/input-groups.less - */ - -.input-group .select2-container--bootstrap { - display: table; - table-layout: fixed; - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} - -.input-group.select2-bootstrap-prepend .select2-container--bootstrap { - .select2-selection { - .border-left-radius(0); - } -} - -.input-group.select2-bootstrap-append .select2-container--bootstrap { - .select2-selection { - .border-right-radius(0); - } -} - -/** - * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address - * Multi Select2's height which - depending on how many elements have been selected - - * may grow taller than its initial size. - * - * @see http://getbootstrap.com/components/#input-groups - */ - -.select2-bootstrap-append, -.select2-bootstrap-prepend { - .select2-container--bootstrap, - .input-group-btn, - .input-group-btn .btn { - vertical-align: top; - } -} - -/** - * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9 - * - * Provides `!important` for certain properties of the class applied to the - * original `` element to hide it. - * - * @see https://github.com/select2/select2/pull/3301 - * @see https://github.com/fk/select2/commit/31830c7b32cb3d8e1b12d5b434dee40a6e753ada - */ - -.form-control.select2-hidden-accessible { - position: absolute !important; - width: 1px !important; -} - -/** - * Display override for inline forms -*/ - -.form-inline .select2-container--bootstrap { - display: inline-block; -} diff --git a/awx/ui/client/lib/select2-bootstrap-theme/tests/less_test.js b/awx/ui/client/lib/select2-bootstrap-theme/tests/less_test.js deleted file mode 100755 index 1f9878b560..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/tests/less_test.js +++ /dev/null @@ -1,25 +0,0 @@ -exports.compileLess = function(test){ - var grunt = require('grunt'), - fs = require('fs'), - jsdiff = require('diff'), - t = test, - filename = 'select2-bootstrap.css', - patchfile = 'tests/support/less.patch', - - child = grunt.util.spawn({ - cmd: 'lessc', - args: ['--verbose', 'src/build.less', 'tmp/'+filename] - }, function() { - var readFile = function(name) { return fs.readFileSync(name, {encoding: 'utf8'}) }, - orig = readFile('dist/'+filename), - generated = readFile('tmp/'+filename), - patch = readFile(patchfile), - diff = jsdiff.createPatch(filename, orig, generated); - - // Save the output for future tests. - // fs.writeFileSync(patchfile, diff); - - t.equal(patch, diff); - t.done(); - }); -}; diff --git a/awx/ui/client/lib/select2-bootstrap-theme/tests/scss_test.js b/awx/ui/client/lib/select2-bootstrap-theme/tests/scss_test.js deleted file mode 100755 index 0fa5353f80..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/tests/scss_test.js +++ /dev/null @@ -1,25 +0,0 @@ -exports.compileScss = function(test){ - var grunt = require('grunt'), - fs = require('fs'), - jsdiff = require('diff'), - t = test, - filename = 'select2-bootstrap.css', - patchfile = 'tests/support/scss.patch', - - child = grunt.util.spawn({ - cmd: 'grunt', - args: ['sass:test'] - }, function() { - var readFile = function(name) { return fs.readFileSync(name, {encoding: 'utf8'}) }, - orig = readFile('dist/'+filename), - generated = readFile('tmp/'+filename), - patch = readFile(patchfile), - diff = jsdiff.createPatch(filename, orig, generated); - - // Save the output for future tests. - // fs.writeFileSync(patchfile, diff); - - t.equal(patch, diff); - t.done(); - }); -}; diff --git a/awx/ui/client/lib/select2-bootstrap-theme/tests/support/less.patch b/awx/ui/client/lib/select2-bootstrap-theme/tests/support/less.patch deleted file mode 100755 index c8e69cb88b..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/tests/support/less.patch +++ /dev/null @@ -1,610 +0,0 @@ -Index: select2-bootstrap.css -=================================================================== ---- select2-bootstrap.css -+++ select2-bootstrap.css -@@ -1,65 +1,79 @@ - /*! Select2 Bootstrap Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-bootstrap-theme */ - .select2-container--bootstrap { - display: block; - /*------------------------------------*\ -+ #COMMON STYLES -+ \*------------------------------------*/ -+ -- #COMMON STYLES -- \*------------------------------------*/ - /** -+ * Search field in the Select2 dropdown. -+ */ -+ -- * Search field in the Select2 dropdown. -- */ - /** -+ * No outline for all search fields - in the dropdown -+ * and inline in multi Select2s. -+ */ -+ -- * No outline for all search fields - in the dropdown -- * and inline in multi Select2s. -- */ - /** -+ * Adjust Select2's choices hover and selected styles to match -+ * Bootstrap 3's default dropdown styles. -+ * -+ * @see http://getbootstrap.com/components/#dropdowns -+ */ -+ -- * Adjust Select2's choices hover and selected styles to match -- * Bootstrap 3's default dropdown styles. -- * -- * @see http://getbootstrap.com/components/#dropdowns -- */ - /** -+ * Clear the selection. -+ */ -+ -- * Clear the selection. -- */ - /** -+ * Address disabled Select2 styles. -+ * -+ * @see https://select2.github.io/examples.html#disabled -+ * @see http://getbootstrap.com/css/#forms-control-disabled -+ */ -+ -- * Address disabled Select2 styles. -- * -- * @see https://select2.github.io/examples.html#disabled -- * @see http://getbootstrap.com/css/#forms-control-disabled -- */ - /*------------------------------------*\ -+ #DROPDOWN -+ \*------------------------------------*/ -+ -- #DROPDOWN -- \*------------------------------------*/ - /** -+ * Dropdown border color and box-shadow. -+ */ -+ -- * Dropdown border color and box-shadow. -- */ - /** -+ * Limit the dropdown height. -+ */ -+ -- * Limit the dropdown height. -- */ - /*------------------------------------*\ -+ #SINGLE SELECT2 -+ \*------------------------------------*/ -+ -- #SINGLE SELECT2 -- \*------------------------------------*/ - /*------------------------------------*\ -+ #MULTIPLE SELECT2 -+ \*------------------------------------*/ -+ -- #MULTIPLE SELECT2 -- \*------------------------------------*/ - /** -+ * Address Bootstrap control sizing classes -+ * -+ * 1. Reset Bootstrap defaults. -+ * 2. Adjust the dropdown arrow button icon position. -+ * -+ * @see http://getbootstrap.com/css/#forms-control-sizes -+ */ -+ -- * Address Bootstrap control sizing classes -- * -- * 1. Reset Bootstrap defaults. -- * 2. Adjust the dropdown arrow button icon position. -- * -- * @see http://getbootstrap.com/css/#forms-control-sizes -- */ - /* 1 */ -+ - /*------------------------------------*\ -+ #RTL SUPPORT -+ \*------------------------------------*/ -+ -- #RTL SUPPORT -- \*------------------------------------*/ - } - .select2-container--bootstrap .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -+ background-color: #ffffff; -+ border: 1px solid #cccccc; -- background-color: #fff; -- border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; -@@ -67,49 +81,54 @@ - } - .select2-container--bootstrap .select2-search--dropdown .select2-search__field { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -+ background-color: #ffffff; -+ border: 1px solid #cccccc; -- background-color: #fff; -- border: 1px solid #ccc; - border-radius: 4px; - color: #555555; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - } - .select2-container--bootstrap .select2-search__field { - outline: 0; - /* Firefox 18- */ -+ - /** -+ * Firefox 19+ -+ * -+ * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox -+ */ -+ -- * Firefox 19+ -- * -- * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox -- */ - } - .select2-container--bootstrap .select2-search__field::-webkit-input-placeholder { -+ color: #999999; -- color: #999; - } - .select2-container--bootstrap .select2-search__field:-moz-placeholder { -+ color: #999999; -- color: #999; - } - .select2-container--bootstrap .select2-search__field::-moz-placeholder { -+ color: #999999; -- color: #999; - opacity: 1; - } - .select2-container--bootstrap .select2-search__field:-ms-input-placeholder { -+ color: #999999; -- color: #999; - } - .select2-container--bootstrap .select2-results__option { - /** -+ * Disabled results. -+ * -+ * @see https://select2.github.io/examples.html#disabled-results -+ */ -+ -- * Disabled results. -- * -- * @see https://select2.github.io/examples.html#disabled-results -- */ - /** -+ * Hover state. -+ */ -+ -- * Hover state. -- */ - /** -+ * Selected state. -+ */ -+ -- * Selected state. -- */ - } - .select2-container--bootstrap .select2-results__option[role=group] { - padding: 0; - } -@@ -122,9 +141,9 @@ - color: #262626; - } - .select2-container--bootstrap .select2-results__option--highlighted[aria-selected] { - background-color: #337ab7; -+ color: #ffffff; -- color: #fff; - } - .select2-container--bootstrap .select2-results__option .select2-results__option { - padding: 6px 12px; - } -@@ -158,9 +177,10 @@ - font-size: 12px; - line-height: 1.428571429; - white-space: nowrap; - } -+.select2-container--bootstrap.select2-container--focus .select2-selection, -+.select2-container--bootstrap.select2-container--open .select2-selection { --.select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -@@ -168,16 +188,18 @@ - border-color: #66afe9; - } - .select2-container--bootstrap.select2-container--open { - /** -+ * Make the dropdown arrow point up while the dropdown is visible. -+ */ -+ -- * Make the dropdown arrow point up while the dropdown is visible. -- */ - /** -+ * Handle border radii of the container when the dropdown is showing. -+ */ -+ -- * Handle border radii of the container when the dropdown is showing. -- */ - } - .select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b { -+ border-color: transparent transparent #999999 transparent; -- border-color: transparent transparent #999 transparent; - border-width: 0 4px 4px 4px; - } - .select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection { - border-bottom-right-radius: 0; -@@ -189,9 +211,9 @@ - border-top-left-radius: 0; - border-top-color: transparent; - } - .select2-container--bootstrap .select2-selection__clear { -+ color: #999999; -- color: #999; - cursor: pointer; - float: right; - font-weight: bold; - margin-right: 10px; -@@ -199,9 +221,9 @@ - .select2-container--bootstrap .select2-selection__clear:hover { - color: #333; - } - .select2-container--bootstrap.select2-container--disabled .select2-selection { -+ border-color: #cccccc; -- border-color: #ccc; - -webkit-box-shadow: none; - box-shadow: none; - } - .select2-container--bootstrap.select2-container--disabled .select2-selection, -@@ -234,10 +256,11 @@ - height: 34px; - line-height: 1.428571429; - padding: 6px 24px 6px 12px; - /** -+ * Adjust the single Select2's dropdown arrow button appearance. -+ */ -+ -- * Adjust the single Select2's dropdown arrow button appearance. -- */ - } - .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - position: absolute; - bottom: 0; -@@ -245,9 +268,9 @@ - top: 0; - width: 4px; - } - .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { -+ border-color: #999999 transparent transparent transparent; -- border-color: #999 transparent transparent transparent; - border-style: solid; - border-width: 4px 4px 0 4px; - height: 0; - left: 0; -@@ -261,21 +284,24 @@ - color: #555555; - padding: 0; - } - .select2-container--bootstrap .select2-selection--single .select2-selection__placeholder { -+ color: #999999; -- color: #999; - } - .select2-container--bootstrap .select2-selection--multiple { - min-height: 34px; - /** -+ * Make Multi Select2's choices match Bootstrap 3's default button styles. -+ */ -+ -- * Make Multi Select2's choices match Bootstrap 3's default button styles. -- */ - /** -+ * Minus 2px borders. -+ */ -+ -- * Minus 2px borders. -- */ - /** -+ * Clear the selection. -+ */ -+ -- * Clear the selection. -- */ - } - .select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - display: block; -@@ -288,16 +314,16 @@ - text-overflow: ellipsis; - white-space: nowrap; - } - .select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder { -+ color: #999999; -- color: #999; - float: left; - margin-top: 5px; - } - .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - color: #555555; -+ background: #ffffff; -+ border: 1px solid #cccccc; -- background: #fff; -- border: 1px solid #ccc; - border-radius: 4px; - cursor: default; - float: left; - margin: 5px 0 0 6px; -@@ -323,108 +349,141 @@ - } - .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 6px; - } -+.select2-container--bootstrap.input-sm, -+.select2-container--bootstrap.input-lg { --.select2-container--bootstrap.input-sm, .select2-container--bootstrap.input-lg { - border-radius: 0; - font-size: 12px; - height: auto; - line-height: 1; - padding: 0; - } -+.select2-container--bootstrap.input-sm .select2-selection--single, -+.input-group-sm .select2-container--bootstrap .select2-selection--single, -+.form-group-sm .select2-container--bootstrap .select2-selection--single { --.select2-container--bootstrap.input-sm .select2-selection--single, .input-group-sm .select2-container--bootstrap .select2-selection--single, .form-group-sm .select2-container--bootstrap .select2-selection--single { - border-radius: 3px; - font-size: 12px; - height: 30px; - line-height: 1.5; - padding: 5px 22px 5px 10px; - /* 2 */ -+ - } -+.select2-container--bootstrap.input-sm .select2-selection--single .select2-selection__arrow b, -+.input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, -+.form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { --.select2-container--bootstrap.input-sm .select2-selection--single .select2-selection__arrow b, .input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - margin-left: -5px; - } -+.select2-container--bootstrap.input-sm .select2-selection--multiple, -+.input-group-sm .select2-container--bootstrap .select2-selection--multiple, -+.form-group-sm .select2-container--bootstrap .select2-selection--multiple { --.select2-container--bootstrap.input-sm .select2-selection--multiple, .input-group-sm .select2-container--bootstrap .select2-selection--multiple, .form-group-sm .select2-container--bootstrap .select2-selection--multiple { - min-height: 30px; - } -+.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__choice, -+.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, -+.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { --.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__choice, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 12px; - line-height: 1.5; - margin: 4px 0 0 5px; - padding: 0 5px; - } -+.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field, -+.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, -+.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { --.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 10px; - font-size: 12px; - height: 28px; - line-height: 1.5; - } -+.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__clear, -+.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, -+.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { --.select2-container--bootstrap.input-sm .select2-selection--multiple .select2-selection__clear, .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 5px; - } -+.select2-container--bootstrap.input-lg .select2-selection--single, -+.input-group-lg .select2-container--bootstrap .select2-selection--single, -+.form-group-lg .select2-container--bootstrap .select2-selection--single { --.select2-container--bootstrap.input-lg .select2-selection--single, .input-group-lg .select2-container--bootstrap .select2-selection--single, .form-group-lg .select2-container--bootstrap .select2-selection--single { - border-radius: 6px; - font-size: 18px; - height: 46px; - line-height: 1.3333333; - padding: 10px 31px 10px 16px; - /* 1 */ -+ - } -+.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow, -+.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow, -+.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { --.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { - width: 5px; - } -+.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow b, -+.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, -+.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { --.select2-container--bootstrap.input-lg .select2-selection--single .select2-selection__arrow b, .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { - border-width: 5px 5px 0 5px; - margin-left: -5px; - margin-left: -10px; - margin-top: -2.5px; - } -+.select2-container--bootstrap.input-lg .select2-selection--multiple, -+.input-group-lg .select2-container--bootstrap .select2-selection--multiple, -+.form-group-lg .select2-container--bootstrap .select2-selection--multiple { --.select2-container--bootstrap.input-lg .select2-selection--multiple, .input-group-lg .select2-container--bootstrap .select2-selection--multiple, .form-group-lg .select2-container--bootstrap .select2-selection--multiple { - min-height: 46px; - } -+.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__choice, -+.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, -+.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { --.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__choice, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; - margin: 9px 0 0 8px; - padding: 0 10px; - } -+.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field, -+.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, -+.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { --.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { - padding: 0 16px; - font-size: 18px; - height: 44px; - line-height: 1.3333333; - } -+.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__clear, -+.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, -+.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { --.select2-container--bootstrap.input-lg .select2-selection--multiple .select2-selection__clear, .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { - margin-top: 10px; - } - .select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single { - /** -+ * Make the dropdown arrow point up while the dropdown is visible. -+ */ -+ -- * Make the dropdown arrow point up while the dropdown is visible. -- */ - } - .select2-container--bootstrap.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b { -+ border-color: transparent transparent #999999 transparent; -- border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; - } - .input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single { - /** -+ * Make the dropdown arrow point up while the dropdown is visible. -+ */ -+ -- * Make the dropdown arrow point up while the dropdown is visible. -- */ - } - .input-group-lg .select2-container--bootstrap.select2-container--open .select2-selection--single .select2-selection__arrow b { -+ border-color: transparent transparent #999999 transparent; -- border-color: transparent transparent #999 transparent; - border-width: 0 5px 5px 5px; - } - .select2-container--bootstrap[dir="rtl"] { - /** -+ * Single Select2 -+ * -+ * 1. Makes sure that .select2-selection__placeholder is positioned -+ * correctly. -+ */ -+ -- * Single Select2 -- * -- * 1. Makes sure that .select2-selection__placeholder is positioned -- * correctly. -- */ - /** -+ * Multiple Select2 -+ */ -+ -- * Multiple Select2 -- */ - } - .select2-container--bootstrap[dir="rtl"] .select2-selection--single { - padding-left: 24px; - padding-right: 12px; -@@ -433,8 +492,9 @@ - padding-right: 0; - padding-left: 0; - text-align: right; - /* 1 */ -+ - } - .select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; - } -@@ -456,9 +516,8 @@ - .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; - } -- - /*------------------------------------*\ - #ADDITIONAL GOODIES - \*------------------------------------*/ - /** -@@ -486,9 +545,8 @@ - } - .has-warning.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #66512c; - } -- - .has-error .select2-dropdown, - .has-error .select2-selection { - border-color: #a94442; - } -@@ -503,9 +561,8 @@ - } - .has-error.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #843534; - } -- - .has-success .select2-dropdown, - .has-success .select2-selection { - border-color: #3c763d; - } -@@ -520,9 +577,8 @@ - } - .has-success.select2-drop-active.select2-drop.select2-drop-above { - border-top-color: #2b542c; - } -- - /** - * Select2 widgets in Bootstrap Input Groups - * - * When Select2 widgets are combined with other elements using Bootstraps -@@ -548,35 +604,31 @@ - float: left; - width: 100%; - margin-bottom: 0; - } -- - .input-group.select2-bootstrap-prepend .select2-container--bootstrap .select2-selection { - border-bottom-left-radius: 0; - border-top-left-radius: 0; - } -- - .input-group.select2-bootstrap-append .select2-container--bootstrap .select2-selection { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - } -- - /** - * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address - * Multi Select2's height which - depending on how many elements have been selected - - * may grow taller than its initial size. - * - * @see http://getbootstrap.com/components/#input-groups - */ - .select2-bootstrap-append .select2-container--bootstrap, -+.select2-bootstrap-prepend .select2-container--bootstrap, - .select2-bootstrap-append .input-group-btn, -+.select2-bootstrap-prepend .input-group-btn, - .select2-bootstrap-append .input-group-btn .btn, --.select2-bootstrap-prepend .select2-container--bootstrap, --.select2-bootstrap-prepend .input-group-btn, - .select2-bootstrap-prepend .input-group-btn .btn { - vertical-align: top; - } -- - /** - * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9 - * - * Provides `!important` for certain properties of the class applied to the -@@ -588,9 +640,8 @@ - .form-control.select2-hidden-accessible { - position: absolute !important; - width: 1px !important; - } -- - /** - * Display override for inline forms - */ - .form-inline .select2-container--bootstrap { diff --git a/awx/ui/client/lib/select2-bootstrap-theme/tests/support/scss.patch b/awx/ui/client/lib/select2-bootstrap-theme/tests/support/scss.patch deleted file mode 100755 index 4b2016d8c6..0000000000 --- a/awx/ui/client/lib/select2-bootstrap-theme/tests/support/scss.patch +++ /dev/null @@ -1,4 +0,0 @@ -Index: select2-bootstrap.css -=================================================================== ---- select2-bootstrap.css -+++ select2-bootstrap.css diff --git a/awx/ui/client/lib/select2/.bower.json b/awx/ui/client/lib/select2/.bower.json index 3c88b4f0e4..9fb07f92b4 100644 --- a/awx/ui/client/lib/select2/.bower.json +++ b/awx/ui/client/lib/select2/.bower.json @@ -3,21 +3,21 @@ "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", "main": [ "dist/js/select2.js", - "dist/css/select2.css" + "src/scss/core.scss" ], "repository": { "type": "git", "url": "git@github.com:select2/select2.git" }, "homepage": "https://github.com/ivaynberg/select2", - "version": "4.0.0", - "_release": "4.0.0", + "version": "4.0.2", + "_release": "4.0.2", "_resolution": { "type": "version", - "tag": "4.0.0", - "commit": "80eb44bec78568b152dc5547269c164cb7b5363c" + "tag": "4.0.2", + "commit": "622a619d25358b86a93c2335f88e1884acc9ccb8" }, - "_source": "git://github.com/ivaynberg/select2.git", + "_source": "https://github.com/ivaynberg/select2.git", "_target": "~4.0.0", "_originalSource": "select2" } \ No newline at end of file diff --git a/awx/ui/client/lib/select2/.gitignore b/awx/ui/client/lib/select2/.gitignore index 163c732b80..aa970da651 100644 --- a/awx/ui/client/lib/select2/.gitignore +++ b/awx/ui/client/lib/select2/.gitignore @@ -1,2 +1,3 @@ node_modules dist/js/i18n/build.txt +.sass-cache diff --git a/awx/ui/client/lib/select2/.travis.yml b/awx/ui/client/lib/select2/.travis.yml index 60e681f483..0af4c6960a 100644 --- a/awx/ui/client/lib/select2/.travis.yml +++ b/awx/ui/client/lib/select2/.travis.yml @@ -1,5 +1,7 @@ language: node_js +sudo: false + node_js: - 0.10 diff --git a/awx/ui/client/lib/select2/CONTRIBUTING.md b/awx/ui/client/lib/select2/CONTRIBUTING.md index 4fbf527c79..ad81e80371 100644 --- a/awx/ui/client/lib/select2/CONTRIBUTING.md +++ b/awx/ui/client/lib/select2/CONTRIBUTING.md @@ -17,7 +17,7 @@ When [reporting bugs][reporting-bugs] or [issue tracker on GitHub][issue-tracker] is the recommended channel to use. The issue tracker **is not** a place for support requests. The -[mailing list][mailing-list] or [IRC channel][irc-channel] are better places to +[mailing list][community] or [IRC channel][community] are better places to get help. Reporting bugs with Select2 @@ -57,6 +57,98 @@ Before starting work on a major feature for Select2, **contact the time on something which the project developers are not interested in bringing into the project. +Contributing changes to Select2 +------------------------------- +Select2 is made up of multiple submodules that all come together to make the +standard and extended builds that are available to users. The build system uses +Node.js to manage and compile the submodules, all of which is done using the +Grunt build system. + +### Installing development dependencies + +Select2 can be built and developed on any system which supports Node.js. The +preferred Node.js version is 0.10, but 0.12 and later versions can be used +without any noticeable issues. You can download Node.js at +[their website][nodejs]. + +All other required Node.js packages can be installed using [npm][npm], which +comes bundled alongside Node.js. + +```bash +cd /path/to/select2/repo +npm install +``` + +You may need to install libsass on your system if it is not already available +in order to build the SASS files which generate the CSS for themes and the main +component. + +In order to build and serve the documentation, you need to have [Jekyll][jekyll] +installed on your system. + +### Building the Select2 component + +Select2 uses the [Grunt][grunt] build task system and defines a few custom +tasks for common routines. One of them is the `compile` task, which compiles +the JavaScript and CSS and produces the final files. + +```bash +cd /path/to/select2/repo +grunt compile +``` + +You can also generate the minified versions (`.min.js` files) by executing the +`minify` task after compiling. + +```bash +cd /path/to/select2/repo +grunt minify +``` + +### Building the documentation + +Using the Grunt build system, you run Jekyll and serve the documentation +locally. This will also set up the examples to use the latest version of +Select2 that has been built. + +```bash +cd /path/to/select2/repo +grunt docs +``` + +### Running tests + +Select2 uses the QUnit test system to test individual components. + +```bash +cd /path/to/selct2/repo +grunt test +``` + +### Submitting a pull request + +We use GitHub's pull request system for submitting patches. Here are some +guidelines to follow when creating the pull request for your fix. + +1. Make sure to create a ticket for your pull request. This will serve as the +bug ticket, and any discussion about the bug will take place there. Your pull +request will be focused on the specific changes that fix the bug. +2. Make sure to reference the ticket you are fixing within your pull request. +This will allow us to close off the ticket once we merge the pull request, or +follow up on the ticket if there are any related blocking issues. +3. Explain why the specific change was made. Not everyone who is reviewing your +pull request will be familiar with the problem it is fixing. +4. Run your tests first. If your tests aren't passing, the pull request won't +be able to be merged. If you're breaking existing tests, make sure that you +aren't causing any breaking changes. +5. Only include source changes. While it's not required, only including changes +from the `src` directory will prevent merge conflicts from occuring. Making +this happen can be as a simple as not committing changes from the `dist` +directory. + +By following these steps, you will make it easier for your pull request to be +reviewed and eventually merged. + Triaging issues and pull requests --------------------------------- Anyone can help the project maintainers triage issues and review pull requests. @@ -100,11 +192,13 @@ licensable under the [MIT license][licensing]. Code that cannot be released under this license **cannot be accepted** into the project. [community]: https://select2.github.io/community.html -[reporting-bugs]: #reporting-bugs-with-select2 -[requesting-features]: #requesting-features-in-select2 -[issue-tracker]: https://github.com/select2/select2/issues -[mailing-list]: https://github.com/select2/select2#mailing-list -[irc-channel]: https://github.com/select2/select2#irc-channel -[issue-search]: https://github.com/select2/select2/search?q=&type=Issues +[grunt]: http://gruntjs.com/ [isolated-case]: http://css-tricks.com/6263-reduced-test-cases/ +[issue-search]: https://github.com/select2/select2/search?q=&type=Issues +[issue-tracker]: https://github.com/select2/select2/issues +[jekyll]: https://jekyllrb.com/docs/installation/ [licensing]: https://github.com/select2/select2/blob/master/LICENSE.md +[nodejs]: https://nodejs.org/ +[npm]: https://www.npmjs.com/ +[reporting-bugs]: #reporting-bugs-with-select2 +[requesting-features]: #requesting-features-in-select2 \ No newline at end of file diff --git a/awx/ui/client/lib/select2/Gruntfile.js b/awx/ui/client/lib/select2/Gruntfile.js index b14a9863c9..63619dea08 100644 --- a/awx/ui/client/lib/select2/Gruntfile.js +++ b/awx/ui/client/lib/select2/Gruntfile.js @@ -4,7 +4,7 @@ module.exports = function (grunt) { 'jquery.select2', 'almond', - 'jquery.mousewheel' // shimmed for non-full builds + 'jquery-mousewheel' // shimmed for non-full builds ]; fullIncludes = [ @@ -150,7 +150,8 @@ module.exports = function (grunt) { }, { - browserName: 'firefox' + browserName: 'firefox', + platform: 'linux' }, { @@ -159,7 +160,8 @@ module.exports = function (grunt) { { browserName: 'opera', - version: '12' + version: '12', + platform: 'linux' } ] } @@ -254,9 +256,9 @@ module.exports = function (grunt) { include: includes, namespace: 'S2', paths: { - almond: '../../vendor/almond-0.2.9', - jquery: 'jquery.shim', - 'jquery.mousewheel': 'jquery.mousewheel.shim' + 'almond': require.resolve('almond').slice(0, -3), + 'jquery': 'jquery.shim', + 'jquery-mousewheel': 'jquery.mousewheel.shim' }, wrap: { startFile: 'src/js/banner.start.js', @@ -273,9 +275,9 @@ module.exports = function (grunt) { include: fullIncludes, namespace: 'S2', paths: { - almond: '../../vendor/almond-0.2.9', - jquery: 'jquery.shim', - 'jquery.mousewheel': '../../vendor/jquery.mousewheel' + 'almond': require.resolve('almond').slice(0, -3), + 'jquery': 'jquery.shim', + 'jquery-mousewheel': require.resolve('jquery-mousewheel').slice(0, -3) }, wrap: { startFile: 'src/js/banner.start.js', diff --git a/awx/ui/client/lib/select2/ISSUE_TEMPLATE.md b/awx/ui/client/lib/select2/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..42223285eb --- /dev/null +++ b/awx/ui/client/lib/select2/ISSUE_TEMPLATE.md @@ -0,0 +1,46 @@ +## Prerequisites + +- [ ] I have searched for similar issues in both open and closed tickets and cannot find a duplicate +- [ ] The issue still exists against the latest `master` branch of Select2 +- [ ] This is not a usage question (Those should be directed to the [community](https://select2.github.io/community.html)) +- [ ] I have attempted to find the simplest possible steos to reproduce the issue +- [ ] I have included a failing test as a pull request (Optional) + +## Steps to reproduce the issue + +1. +2. +3. + +## Expected behavior and actual behavior + +When I follow those steps, I see... + +I was expecting... + +## Environment + +Browsers + +- [ ] Google Chrome +- [ ] Mozilla Firefox +- [ ] Internet Explorer + +Operating System + +- [ ] Windows +- [ ] Mac OS X +- [ ] Linux +- [ ] Mobile + +Libraries + +- jQuery version: +- Select2 version: + +## Isolating the problem + +- [ ] This bug happens [on the examples page](https://select2.github.io/examples.html) +- [ ] The bug happens consistently across all tested browsers +- [ ] This bug happens when using Select2 without other pluigns +- [ ] I can reproduce this bug in [a jsbin](https://jsbin.com/) diff --git a/awx/ui/client/lib/select2/PULL_REQUEST_TEMPLATE.md b/awx/ui/client/lib/select2/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..82395c757b --- /dev/null +++ b/awx/ui/client/lib/select2/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +This pull request includes a + +- [ ] Bug fix +- [ ] New feature +- [ ] Translation + +The following changes were made + +- +- +- + +If this is related to an existing ticket, include a link to it as well. diff --git a/awx/ui/client/lib/select2/README.md b/awx/ui/client/lib/select2/README.md index 53581bfdcf..5984bb2484 100644 --- a/awx/ui/client/lib/select2/README.md +++ b/awx/ui/client/lib/select2/README.md @@ -31,6 +31,10 @@ Browser compatibility * Safari 3+ * Opera 10.6+ +Select2 is automatically tested on the following browsers. + +[![Sauce Labs Test Status][saucelabs-matrix]][saucelabs-status] + Usage ----- You can source Select2 directly from a CDN like [JSDliver][jsdelivr] or @@ -39,19 +43,25 @@ the integrations below. Integrations ------------ -* [Wicket-Select2][wicket-select2] (Java / [Apache Wicket][wicket]) -* [select2-rails][select2-rails] (Ruby on Rails) -* [AngularUI][angularui-select] ([AngularJS][angularjs]) -* [Django][django-select2] -* [Symfony][symfony-select2] -* [Symfony2][symfony2-select2] -* [Bootstrap 2][bootstrap2-select2] and [Bootstrap 3][bootstrap3-select2] - (CSS skins) -* [Meteor][meteor-select2] ([Bootstrap 3 skin][meteor-select2-bootstrap3]) -* [Meteor][meteor-select2-alt] -* [Yii 2.x][yii2-select2] -* [Yii 1.x][yii-select2] -* [AtmosphereJS][atmospherejs-select2] +Third party developers have create plugins for platforms which allow Select2 to be integrated more natively and quickly. For many platforms, additional plugins are not required because Select2 acts as a standard `' + + ' spellcheck="false" role="textbox" aria-autocomplete="list" />' + '' ); @@ -1777,6 +1816,8 @@ S2.define('select2/selection/search',[ var $rendered = decorated.call(this); + this._transferTabIndex(); + return $rendered; }; @@ -1786,32 +1827,39 @@ S2.define('select2/selection/search',[ decorated.call(this, container, $container); container.on('open', function () { - self.$search.attr('tabindex', 0); - - self.$search.focus(); + self.$search.trigger('focus'); }); container.on('close', function () { - self.$search.attr('tabindex', -1); - self.$search.val(''); - self.$search.focus(); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); }); container.on('enable', function () { self.$search.prop('disabled', false); + + self._transferTabIndex(); }); container.on('disable', function () { self.$search.prop('disabled', true); }); + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + self.$search.attr('aria-activedescendant', params.id); + }); + this.$selection.on('focusin', '.select2-search--inline', function (evt) { self.trigger('focus', evt); }); this.$selection.on('focusout', '.select2-search--inline', function (evt) { - self.trigger('blur', evt); + self._handleBlur(evt); }); this.$selection.on('keydown', '.select2-search--inline', function (evt) { @@ -1837,18 +1885,73 @@ S2.define('select2/selection/search',[ } }); + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. - this.$selection.on('input', '.select2-search--inline', function (evt) { - // Unbind the duplicated `keyup` event - self.$selection.off('keyup.search'); - }); + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } - this.$selection.on('keyup.search input', '.select2-search--inline', - function (evt) { - self.handleSearch(evt); - }); + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); }; Search.prototype.createPlaceholder = function (decorated, placeholder) { @@ -1856,6 +1959,8 @@ S2.define('select2/selection/search',[ }; Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + this.$search.attr('placeholder', ''); decorated.call(this, data); @@ -1864,6 +1969,9 @@ S2.define('select2/selection/search',[ .append(this.$searchContainer); this.resizeSearch(); + if (searchHadFocus) { + this.$search.focus(); + } }; Search.prototype.handleSearch = function () { @@ -1885,9 +1993,8 @@ S2.define('select2/selection/search',[ data: item }); - this.trigger('open'); - - this.$search.val(item.text + ' '); + this.$search.val(item.text); + this.handleSearch(); }; Search.prototype.resizeSearch = function () { @@ -3221,9 +3328,9 @@ S2.define('select2/data/array',[ var $existingOption = $existing.filter(onlyItem(item)); var existingData = this.item($existingOption); - var newData = $.extend(true, {}, existingData, item); + var newData = $.extend(true, {}, item, existingData); - var $newOption = this.option(existingData); + var $newOption = this.option(newData); $existingOption.replaceWith($newOption); @@ -3259,7 +3366,7 @@ S2.define('select2/data/ajax',[ this.processResults = this.ajaxOptions.processResults; } - ArrayAdapter.__super__.constructor.call(this, $element, options); + AjaxAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(AjaxAdapter, ArrayAdapter); @@ -3267,9 +3374,9 @@ S2.define('select2/data/ajax',[ AjaxAdapter.prototype._applyDefaults = function (options) { var defaults = { data: function (params) { - return { + return $.extend({}, params, { q: params.term - }; + }); }, transport: function (params, success, failure) { var $request = $.ajax(params); @@ -3306,11 +3413,11 @@ S2.define('select2/data/ajax',[ }, this.ajaxOptions); if (typeof options.url === 'function') { - options.url = options.url(params); + options.url = options.url.call(this.$element, params); } if (typeof options.data === 'function') { - options.data = options.data(params); + options.data = options.data.call(this.$element, params); } function request () { @@ -3329,7 +3436,9 @@ S2.define('select2/data/ajax',[ callback(results); }, function () { - // TODO: Handle AJAX errors + self.trigger('results:message', { + message: 'errorLoading' + }); }); self._request = $request; @@ -3361,6 +3470,12 @@ S2.define('select2/data/tags',[ this.createTag = createTag; } + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + decorated.call(this, $element, options); if ($.isArray(tags)) { @@ -3493,7 +3608,9 @@ S2.define('select2/data/tokenizer',[ var self = this; function select (data) { - self.select(data); + self.trigger('select', { + data: data + }); } params.term = params.term || ''; @@ -3541,6 +3658,11 @@ S2.define('select2/data/tokenizer',[ var data = createTag(partParams); + if (data == null) { + i++; + continue; + } + callback(data); // Reset the term to not include the tokenized portion @@ -3678,6 +3800,10 @@ S2.define('select2/dropdown',[ return $dropdown; }; + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + Dropdown.prototype.position = function ($dropdown, $container) { // Should be implmented in subclasses }; @@ -3904,7 +4030,9 @@ S2.define('select2/dropdown/infiniteScroll',[ InfiniteScroll.prototype.createLoadingMore = function () { var $option = $( - '
  • ' + '
  • ' ); var message = this.options.get('translations').get('loadingMore'); @@ -3922,7 +4050,7 @@ S2.define('select2/dropdown/attachBody',[ '../utils' ], function ($, Utils) { function AttachBody (decorated, $element, options) { - this.$dropdownParent = options.get('dropdownParent') || document.body; + this.$dropdownParent = options.get('dropdownParent') || $(document.body); decorated.call(this, $element, options); } @@ -3963,6 +4091,12 @@ S2.define('select2/dropdown/attachBody',[ }); }; + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + AttachBody.prototype.position = function (decorated, $dropdown, $container) { // Clone all of the container classes $dropdown.attr('class', $container.attr('class')); @@ -3993,7 +4127,8 @@ S2.define('select2/dropdown/attachBody',[ this.$dropdownContainer.detach(); }; - AttachBody.prototype._attachPositioningHandler = function (container) { + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { var self = this; var scrollEvent = 'scroll.select2.' + container.id; @@ -4020,7 +4155,8 @@ S2.define('select2/dropdown/attachBody',[ }); }; - AttachBody.prototype._detachPositioningHandler = function (container) { + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; @@ -4039,7 +4175,6 @@ S2.define('select2/dropdown/attachBody',[ var newDirection = null; - var position = this.$container.position(); var offset = this.$container.offset(); offset.bottom = offset.top + this.$container.outerHeight(false); @@ -4068,6 +4203,20 @@ S2.define('select2/dropdown/attachBody',[ top: container.bottom }; + // Determine what the parent element is to use for calciulating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positoned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = $offsetParent.offset(); + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + if (!isCurrentlyAbove && !isCurrentlyBelow) { newDirection = 'below'; } @@ -4096,8 +4245,6 @@ S2.define('select2/dropdown/attachBody',[ }; AttachBody.prototype._resizeDropdown = function () { - this.$dropdownContainer.width(); - var css = { width: this.$container.outerWidth(false) + 'px' }; @@ -4178,12 +4325,23 @@ S2.define('select2/dropdown/selectOnClose',[ SelectOnClose.prototype._handleSelectOnClose = function () { var $highlightedResults = this.getHighlightedResults(); + // Only select highlighted results if ($highlightedResults.length < 1) { return; } + var data = $highlightedResults.data('data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + this.trigger('select', { - data: $highlightedResults.data('data') + data: data }); }; @@ -4217,7 +4375,7 @@ S2.define('select2/dropdown/closeOnSelect',[ return; } - this.trigger('close'); + this.trigger('close', {}); }; return CloseOnSelect; @@ -4325,7 +4483,7 @@ S2.define('select2/defaults',[ } Defaults.prototype.apply = function (options) { - options = $.extend({}, this.defaults, options); + options = $.extend(true, {}, this.defaults, options); if (options.dataAdapter == null) { if (options.ajax != null) { @@ -4868,8 +5026,8 @@ S2.define('select2/core',[ // Hide the original select $element.addClass('select2-hidden-accessible'); - $element.attr('aria-hidden', 'true'); - + $element.attr('aria-hidden', 'true'); + // Synchronize any monitored attributes this._syncAttributes(); @@ -4889,6 +5047,7 @@ S2.define('select2/core',[ id = Utils.generateChars(4); } + id = id.replace(/(:|\.|\[|\]|,)/g, ''); id = 'select2-' + id; return id; @@ -5004,12 +5163,16 @@ S2.define('select2/core',[ Select2.prototype._registerSelectionEvents = function () { var self = this; - var nonRelayEvents = ['toggle']; + var nonRelayEvents = ['toggle', 'focus']; this.selection.on('toggle', function () { self.toggleDropdown(); }); + this.selection.on('focus', function (params) { + self.focus(params); + }); + this.selection.on('*', function (name, params) { if ($.inArray(name, nonRelayEvents) !== -1) { return; @@ -5054,17 +5217,13 @@ S2.define('select2/core',[ self.$container.addClass('select2-container--disabled'); }); - this.on('focus', function () { - self.$container.addClass('select2-container--focus'); - }); - this.on('blur', function () { self.$container.removeClass('select2-container--focus'); }); this.on('query', function (params) { if (!self.isOpen()) { - self.trigger('open'); + self.trigger('open', {}); } this.dataAdapter.query(params, function (data) { @@ -5088,30 +5247,31 @@ S2.define('select2/core',[ var key = evt.which; if (self.isOpen()) { - if (key === KEYS.ENTER) { - self.trigger('results:select'); + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); evt.preventDefault(); } else if ((key === KEYS.SPACE && evt.ctrlKey)) { - self.trigger('results:toggle'); + self.trigger('results:toggle', {}); evt.preventDefault(); } else if (key === KEYS.UP) { - self.trigger('results:previous'); + self.trigger('results:previous', {}); evt.preventDefault(); } else if (key === KEYS.DOWN) { - self.trigger('results:next'); - - evt.preventDefault(); - } else if (key === KEYS.ESC || key === KEYS.TAB) { - self.close(); + self.trigger('results:next', {}); evt.preventDefault(); } } else { if (key === KEYS.ENTER || key === KEYS.SPACE || - ((key === KEYS.DOWN || key === KEYS.UP) && evt.altKey)) { + (key === KEYS.DOWN && evt.altKey)) { self.open(); evt.preventDefault(); @@ -5128,9 +5288,9 @@ S2.define('select2/core',[ this.close(); } - this.trigger('disable'); + this.trigger('disable', {}); } else { - this.trigger('enable'); + this.trigger('enable', {}); } }; @@ -5147,6 +5307,10 @@ S2.define('select2/core',[ 'unselect': 'unselecting' }; + if (args === undefined) { + args = {}; + } + if (name in preTriggerMap) { var preTriggerName = preTriggerMap[name]; var preTriggerArgs = { @@ -5185,8 +5349,6 @@ S2.define('select2/core',[ } this.trigger('query', {}); - - this.trigger('open'); }; Select2.prototype.close = function () { @@ -5194,13 +5356,27 @@ S2.define('select2/core',[ return; } - this.trigger('close'); + this.trigger('close', {}); }; Select2.prototype.isOpen = function () { return this.$container.hasClass('select2-container--open'); }; + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + Select2.prototype.enable = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( @@ -5281,7 +5457,7 @@ S2.define('select2/core',[ this.$element.attr('tabindex', this.$element.data('old-tabindex')); this.$element.removeClass('select2-hidden-accessible'); - this.$element.attr('aria-hidden', 'false'); + this.$element.attr('aria-hidden', 'false'); this.$element.removeData('select2'); this.dataAdapter.destroy(); @@ -5385,7 +5561,7 @@ S2.define('select2/compat/containerCss',[ containerCssAdapter = containerCssAdapter || _containerAdapter; if (containerCssClass.indexOf(':all:') !== -1) { - containerCssClass = containerCssClass.replace(':all', ''); + containerCssClass = containerCssClass.replace(':all:', ''); var _cssAdapter = containerCssAdapter; @@ -5442,7 +5618,7 @@ S2.define('select2/compat/dropdownCss',[ dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter; if (dropdownCssClass.indexOf(':all:') !== -1) { - dropdownCssClass = dropdownCssClass.replace(':all', ''); + dropdownCssClass = dropdownCssClass.replace(':all:', ''); var _cssAdapter = dropdownCssAdapter; @@ -5813,76 +5989,18 @@ S2.define('select2/selection/stopPropagation',[ return StopPropagation; }); -S2.define('jquery.select2',[ - 'jquery', - 'require', - - './select2/core', - './select2/defaults' -], function ($, require, Select2, Defaults) { - // Force jQuery.mousewheel to be loaded if it hasn't already - require('jquery.mousewheel'); - - if ($.fn.select2 == null) { - // All methods that should return the element - var thisMethods = ['open', 'close', 'destroy']; - - $.fn.select2 = function (options) { - options = options || {}; - - if (typeof options === 'object') { - this.each(function () { - var instanceOptions = $.extend({}, options, true); - - var instance = new Select2($(this), instanceOptions); - }); - - return this; - } else if (typeof options === 'string') { - var instance = this.data('select2'); - - if (instance == null && window.console && console.error) { - console.error( - 'The select2(\'' + options + '\') method was called on an ' + - 'element that is not using Select2.' - ); - } - - var args = Array.prototype.slice.call(arguments, 1); - - var ret = instance[options](args); - - // Check if we should be returning `this` - if ($.inArray(options, thisMethods) > -1) { - return this; - } - - return ret; - } else { - throw new Error('Invalid arguments for Select2: ' + options); - } - }; - } - - if ($.fn.select2.defaults == null) { - $.fn.select2.defaults = Defaults; - } - - return Select2; -}); - /*! - * jQuery Mousewheel 3.1.12 + * jQuery Mousewheel 3.1.13 * - * Copyright 2014 jQuery Foundation and other contributors - * Released under the MIT license. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license * http://jquery.org/license */ (function (factory) { if ( typeof S2.define === 'function' && S2.define.amd ) { // AMD. Register as an anonymous module. - S2.define('jquery.mousewheel',['jquery'], factory); + S2.define('jquery-mousewheel',['jquery'], factory); } else if (typeof exports === 'object') { // Node/CommonJS style for Browserify module.exports = factory; @@ -6093,6 +6211,65 @@ S2.define('jquery.select2',[ })); +S2.define('jquery.select2',[ + 'jquery', + 'jquery-mousewheel', + + './select2/core', + './select2/defaults' +], function ($, _, Select2, Defaults) { + if ($.fn.select2 == null) { + // All methods that should return the element + var thisMethods = ['open', 'close', 'destroy']; + + $.fn.select2 = function (options) { + options = options || {}; + + if (typeof options === 'object') { + this.each(function () { + var instanceOptions = $.extend(true, {}, options); + + var instance = new Select2($(this), instanceOptions); + }); + + return this; + } else if (typeof options === 'string') { + var ret; + + this.each(function () { + var instance = $(this).data('select2'); + + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } + + var args = Array.prototype.slice.call(arguments, 1); + + ret = instance[options].apply(instance, args); + }); + + // Check if we should be returning `this` + if ($.inArray(options, thisMethods) > -1) { + return this; + } + + return ret; + } else { + throw new Error('Invalid arguments for Select2: ' + options); + } + }; + } + + if ($.fn.select2.defaults == null) { + $.fn.select2.defaults = Defaults; + } + + return Select2; +}); + // Return the AMD loader configuration so it can be used outside of this file return { define: S2.define, diff --git a/awx/ui/client/lib/select2/dist/js/select2.full.min.js b/awx/ui/client/lib/select2/dist/js/select2.full.min.js index 59d8c1aaa6..36403ae2d1 100644 --- a/awx/ui/client/lib/select2/dist/js/select2.full.min.js +++ b/awx/ui/client/lib/select2/dist/js/select2.full.min.js @@ -1,3 +1,3 @@ -/*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
      ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
    • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";{a(h)}this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b){var c=this,d=b.id+"-results";this.$results.attr("id",d),b.on("results:all",function(a){c.clear(),c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("results:append",function(a){c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("query",function(a){c.showLoading(a)}),b.on("select",function(){b.isOpen()&&c.setClasses()}),b.on("unselect",function(){b.isOpen()&&c.setClasses()}),b.on("open",function(){c.$results.attr("aria-expanded","true"),c.$results.attr("aria-hidden","false"),c.setClasses(),c.ensureHighlightVisible()}),b.on("close",function(){c.$results.attr("aria-expanded","false"),c.$results.attr("aria-hidden","true"),c.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=c.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=c.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?c.trigger("close"):c.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a);if(0!==d){var e=d-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top,h=f.offset().top,i=c.$results.scrollTop()+(h-g);0===e?c.$results.scrollTop(0):0>h-g&&c.$results.scrollTop(i)}}),b.on("results:next",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a),e=d+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top+c.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=c.$results.scrollTop()+h-g;0===e?c.$results.scrollTop(0):h>g&&c.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){c.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=c.$results.scrollTop(),d=c.$results.get(0).scrollHeight-c.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&d<=c.$results.height();e?(c.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(c.$results.scrollTop(c.$results.get(0).scrollHeight-c.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var d=a(this),e=d.data("data");return"true"===d.attr("aria-selected")?void(c.options.get("multiple")?c.trigger("unselect",{originalEvent:b,data:e}):c.trigger("close")):void c.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(){var b=a(this).data("data");c.getHighlightedResults().removeClass("select2-results__option--highlighted"),c.trigger("results:focus",{data:b,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a){var b=this,d=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){b.trigger("focus",a)}),this.$selection.on("blur",function(a){b.trigger("blur",a)}),this.$selection.on("keydown",function(a){b.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){b.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){b.update(a.data)}),a.on("open",function(){b.$selection.attr("aria-expanded","true"),b.$selection.attr("aria-owns",d),b._attachCloseHandler(a)}),a.on("close",function(){b.$selection.attr("aria-expanded","false"),b.$selection.removeAttr("aria-activedescendant"),b.$selection.removeAttr("aria-owns"),b.$selection.focus(),b._detachCloseHandler(a)}),a.on("enable",function(){b.$selection.attr("tabindex",b._tabindex)}),a.on("disable",function(){b.$selection.attr("tabindex","-1")})},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},d.prototype.bind=function(a){var b=this;d.__super__.bind.apply(this,arguments);var c=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",c),this.$selection.attr("aria-labelledby",c),this.$selection.on("mousedown",function(a){1===a.which&&b.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(){}),this.$selection.on("blur",function(){}),a.on("selection:update",function(a){b.update(a.data)})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){return a("")},d.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.display(b),d=this.$selection.find(".select2-selection__rendered");d.empty().append(c),d.prop("title",b.title||b.text)},d}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
        '),a},d.prototype.bind=function(){var b=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){b.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(c){var d=a(this),e=d.parent(),f=e.data("data");b.trigger("unselect",{originalEvent:c,data:f})})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){var b=a('
      • ×
      • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},a}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus()}),b.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.focus()}),b.on("enable",function(){e.$search.prop("disabled",!1)}),b.on("disable",function(){e.$search.prop("disabled",!0)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e.trigger("blur",a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}}),this.$selection.on("input",".select2-search--inline",function(){e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input",".select2-search--inline",function(a){e.handleSearch(a)})},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open"),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=(c.extend(!0,{},l,j),this.option(l));k.replaceWith(m)}else{var n=this.option(j);if(j.children){var o=this.convertToOptions(j.children);b.appendMany(n,o)}h.push(n)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(b,c){this.ajaxOptions=this._applyDefaults(c.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),a.__super__.constructor.call(this,b,c)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return{q:a.term}},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url(a)),"function"==typeof f.data&&(f.data=f.data(a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.position=function(){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a){function b(){}return b.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},b.prototype.handleSearch=function(){if(!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},b.prototype.showSearch=function(){return!0},b}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
      • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c){var d=this,e="scroll.select2."+c.id,f="resize.select2."+c.id,g="orientationchange.select2."+c.id,h=this.$container.parents().filter(b.hasScroll);h.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),h.on(e,function(){var b=a(this).data("select2-scroll-position");a(this).scrollTop(b.y)}),a(window).on(e+" "+f+" "+g,function(){d._positionDropdown(),d._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c){var d="scroll.select2."+c.id,e="resize.select2."+c.id,f="orientationchange.select2."+c.id,g=this.$container.parents().filter(b.hasScroll);g.off(d),a(window).off(d+" "+e+" "+f)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){this.$dropdownContainer.width();var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.selectionAdapter=l.multiple?e:d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(this.options.dir=a.prop("dir")?a.prop("dir"):a.closest("[dir]").prop("dir")?a.closest("[dir]").prop("dir"):"ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("focus",function(){a.$container.addClass("select2-container--focus")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open"),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ENTER?(a.trigger("results:select"),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle"),b.preventDefault()):c===d.UP?(a.trigger("results:previous"),b.preventDefault()):c===d.DOWN?(a.trigger("results:next"),b.preventDefault()):(c===d.ESC||c===d.TAB)&&(a.close(),b.preventDefault()):(c===d.ENTER||c===d.SPACE||(c===d.DOWN||c===d.UP)&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable")):this.trigger("enable")},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||(this.trigger("query",{}),this.trigger("open"))},e.prototype.close=function(){this.isOpen()&&this.trigger("close")},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
      • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a; +}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `' + + ' spellcheck="false" role="textbox" aria-autocomplete="list" />' + '' ); @@ -1777,6 +1816,8 @@ S2.define('select2/selection/search',[ var $rendered = decorated.call(this); + this._transferTabIndex(); + return $rendered; }; @@ -1786,32 +1827,39 @@ S2.define('select2/selection/search',[ decorated.call(this, container, $container); container.on('open', function () { - self.$search.attr('tabindex', 0); - - self.$search.focus(); + self.$search.trigger('focus'); }); container.on('close', function () { - self.$search.attr('tabindex', -1); - self.$search.val(''); - self.$search.focus(); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); }); container.on('enable', function () { self.$search.prop('disabled', false); + + self._transferTabIndex(); }); container.on('disable', function () { self.$search.prop('disabled', true); }); + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + self.$search.attr('aria-activedescendant', params.id); + }); + this.$selection.on('focusin', '.select2-search--inline', function (evt) { self.trigger('focus', evt); }); this.$selection.on('focusout', '.select2-search--inline', function (evt) { - self.trigger('blur', evt); + self._handleBlur(evt); }); this.$selection.on('keydown', '.select2-search--inline', function (evt) { @@ -1837,18 +1885,73 @@ S2.define('select2/selection/search',[ } }); + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. - this.$selection.on('input', '.select2-search--inline', function (evt) { - // Unbind the duplicated `keyup` event - self.$selection.off('keyup.search'); - }); + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } - this.$selection.on('keyup.search input', '.select2-search--inline', - function (evt) { - self.handleSearch(evt); - }); + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); }; Search.prototype.createPlaceholder = function (decorated, placeholder) { @@ -1856,6 +1959,8 @@ S2.define('select2/selection/search',[ }; Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + this.$search.attr('placeholder', ''); decorated.call(this, data); @@ -1864,6 +1969,9 @@ S2.define('select2/selection/search',[ .append(this.$searchContainer); this.resizeSearch(); + if (searchHadFocus) { + this.$search.focus(); + } }; Search.prototype.handleSearch = function () { @@ -1885,9 +1993,8 @@ S2.define('select2/selection/search',[ data: item }); - this.trigger('open'); - - this.$search.val(item.text + ' '); + this.$search.val(item.text); + this.handleSearch(); }; Search.prototype.resizeSearch = function () { @@ -3221,9 +3328,9 @@ S2.define('select2/data/array',[ var $existingOption = $existing.filter(onlyItem(item)); var existingData = this.item($existingOption); - var newData = $.extend(true, {}, existingData, item); + var newData = $.extend(true, {}, item, existingData); - var $newOption = this.option(existingData); + var $newOption = this.option(newData); $existingOption.replaceWith($newOption); @@ -3259,7 +3366,7 @@ S2.define('select2/data/ajax',[ this.processResults = this.ajaxOptions.processResults; } - ArrayAdapter.__super__.constructor.call(this, $element, options); + AjaxAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(AjaxAdapter, ArrayAdapter); @@ -3267,9 +3374,9 @@ S2.define('select2/data/ajax',[ AjaxAdapter.prototype._applyDefaults = function (options) { var defaults = { data: function (params) { - return { + return $.extend({}, params, { q: params.term - }; + }); }, transport: function (params, success, failure) { var $request = $.ajax(params); @@ -3306,11 +3413,11 @@ S2.define('select2/data/ajax',[ }, this.ajaxOptions); if (typeof options.url === 'function') { - options.url = options.url(params); + options.url = options.url.call(this.$element, params); } if (typeof options.data === 'function') { - options.data = options.data(params); + options.data = options.data.call(this.$element, params); } function request () { @@ -3329,7 +3436,9 @@ S2.define('select2/data/ajax',[ callback(results); }, function () { - // TODO: Handle AJAX errors + self.trigger('results:message', { + message: 'errorLoading' + }); }); self._request = $request; @@ -3361,6 +3470,12 @@ S2.define('select2/data/tags',[ this.createTag = createTag; } + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + decorated.call(this, $element, options); if ($.isArray(tags)) { @@ -3493,7 +3608,9 @@ S2.define('select2/data/tokenizer',[ var self = this; function select (data) { - self.select(data); + self.trigger('select', { + data: data + }); } params.term = params.term || ''; @@ -3541,6 +3658,11 @@ S2.define('select2/data/tokenizer',[ var data = createTag(partParams); + if (data == null) { + i++; + continue; + } + callback(data); // Reset the term to not include the tokenized portion @@ -3678,6 +3800,10 @@ S2.define('select2/dropdown',[ return $dropdown; }; + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + Dropdown.prototype.position = function ($dropdown, $container) { // Should be implmented in subclasses }; @@ -3904,7 +4030,9 @@ S2.define('select2/dropdown/infiniteScroll',[ InfiniteScroll.prototype.createLoadingMore = function () { var $option = $( - '
      • ' + '
      • ' ); var message = this.options.get('translations').get('loadingMore'); @@ -3922,7 +4050,7 @@ S2.define('select2/dropdown/attachBody',[ '../utils' ], function ($, Utils) { function AttachBody (decorated, $element, options) { - this.$dropdownParent = options.get('dropdownParent') || document.body; + this.$dropdownParent = options.get('dropdownParent') || $(document.body); decorated.call(this, $element, options); } @@ -3963,6 +4091,12 @@ S2.define('select2/dropdown/attachBody',[ }); }; + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + AttachBody.prototype.position = function (decorated, $dropdown, $container) { // Clone all of the container classes $dropdown.attr('class', $container.attr('class')); @@ -3993,7 +4127,8 @@ S2.define('select2/dropdown/attachBody',[ this.$dropdownContainer.detach(); }; - AttachBody.prototype._attachPositioningHandler = function (container) { + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { var self = this; var scrollEvent = 'scroll.select2.' + container.id; @@ -4020,7 +4155,8 @@ S2.define('select2/dropdown/attachBody',[ }); }; - AttachBody.prototype._detachPositioningHandler = function (container) { + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; @@ -4039,7 +4175,6 @@ S2.define('select2/dropdown/attachBody',[ var newDirection = null; - var position = this.$container.position(); var offset = this.$container.offset(); offset.bottom = offset.top + this.$container.outerHeight(false); @@ -4068,6 +4203,20 @@ S2.define('select2/dropdown/attachBody',[ top: container.bottom }; + // Determine what the parent element is to use for calciulating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positoned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = $offsetParent.offset(); + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + if (!isCurrentlyAbove && !isCurrentlyBelow) { newDirection = 'below'; } @@ -4096,8 +4245,6 @@ S2.define('select2/dropdown/attachBody',[ }; AttachBody.prototype._resizeDropdown = function () { - this.$dropdownContainer.width(); - var css = { width: this.$container.outerWidth(false) + 'px' }; @@ -4178,12 +4325,23 @@ S2.define('select2/dropdown/selectOnClose',[ SelectOnClose.prototype._handleSelectOnClose = function () { var $highlightedResults = this.getHighlightedResults(); + // Only select highlighted results if ($highlightedResults.length < 1) { return; } + var data = $highlightedResults.data('data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + this.trigger('select', { - data: $highlightedResults.data('data') + data: data }); }; @@ -4217,7 +4375,7 @@ S2.define('select2/dropdown/closeOnSelect',[ return; } - this.trigger('close'); + this.trigger('close', {}); }; return CloseOnSelect; @@ -4325,7 +4483,7 @@ S2.define('select2/defaults',[ } Defaults.prototype.apply = function (options) { - options = $.extend({}, this.defaults, options); + options = $.extend(true, {}, this.defaults, options); if (options.dataAdapter == null) { if (options.ajax != null) { @@ -4868,8 +5026,8 @@ S2.define('select2/core',[ // Hide the original select $element.addClass('select2-hidden-accessible'); - $element.attr('aria-hidden', 'true'); - + $element.attr('aria-hidden', 'true'); + // Synchronize any monitored attributes this._syncAttributes(); @@ -4889,6 +5047,7 @@ S2.define('select2/core',[ id = Utils.generateChars(4); } + id = id.replace(/(:|\.|\[|\]|,)/g, ''); id = 'select2-' + id; return id; @@ -5004,12 +5163,16 @@ S2.define('select2/core',[ Select2.prototype._registerSelectionEvents = function () { var self = this; - var nonRelayEvents = ['toggle']; + var nonRelayEvents = ['toggle', 'focus']; this.selection.on('toggle', function () { self.toggleDropdown(); }); + this.selection.on('focus', function (params) { + self.focus(params); + }); + this.selection.on('*', function (name, params) { if ($.inArray(name, nonRelayEvents) !== -1) { return; @@ -5054,17 +5217,13 @@ S2.define('select2/core',[ self.$container.addClass('select2-container--disabled'); }); - this.on('focus', function () { - self.$container.addClass('select2-container--focus'); - }); - this.on('blur', function () { self.$container.removeClass('select2-container--focus'); }); this.on('query', function (params) { if (!self.isOpen()) { - self.trigger('open'); + self.trigger('open', {}); } this.dataAdapter.query(params, function (data) { @@ -5088,30 +5247,31 @@ S2.define('select2/core',[ var key = evt.which; if (self.isOpen()) { - if (key === KEYS.ENTER) { - self.trigger('results:select'); + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); evt.preventDefault(); } else if ((key === KEYS.SPACE && evt.ctrlKey)) { - self.trigger('results:toggle'); + self.trigger('results:toggle', {}); evt.preventDefault(); } else if (key === KEYS.UP) { - self.trigger('results:previous'); + self.trigger('results:previous', {}); evt.preventDefault(); } else if (key === KEYS.DOWN) { - self.trigger('results:next'); - - evt.preventDefault(); - } else if (key === KEYS.ESC || key === KEYS.TAB) { - self.close(); + self.trigger('results:next', {}); evt.preventDefault(); } } else { if (key === KEYS.ENTER || key === KEYS.SPACE || - ((key === KEYS.DOWN || key === KEYS.UP) && evt.altKey)) { + (key === KEYS.DOWN && evt.altKey)) { self.open(); evt.preventDefault(); @@ -5128,9 +5288,9 @@ S2.define('select2/core',[ this.close(); } - this.trigger('disable'); + this.trigger('disable', {}); } else { - this.trigger('enable'); + this.trigger('enable', {}); } }; @@ -5147,6 +5307,10 @@ S2.define('select2/core',[ 'unselect': 'unselecting' }; + if (args === undefined) { + args = {}; + } + if (name in preTriggerMap) { var preTriggerName = preTriggerMap[name]; var preTriggerArgs = { @@ -5185,8 +5349,6 @@ S2.define('select2/core',[ } this.trigger('query', {}); - - this.trigger('open'); }; Select2.prototype.close = function () { @@ -5194,13 +5356,27 @@ S2.define('select2/core',[ return; } - this.trigger('close'); + this.trigger('close', {}); }; Select2.prototype.isOpen = function () { return this.$container.hasClass('select2-container--open'); }; + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + Select2.prototype.enable = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( @@ -5281,7 +5457,7 @@ S2.define('select2/core',[ this.$element.attr('tabindex', this.$element.data('old-tabindex')); this.$element.removeClass('select2-hidden-accessible'); - this.$element.attr('aria-hidden', 'false'); + this.$element.attr('aria-hidden', 'false'); this.$element.removeData('select2'); this.dataAdapter.destroy(); @@ -5317,16 +5493,20 @@ S2.define('select2/core',[ return Select2; }); +S2.define('jquery-mousewheel',[ + 'jquery' +], function ($) { + // Used to shim jQuery.mousewheel for non-full builds. + return $; +}); + S2.define('jquery.select2',[ 'jquery', - 'require', + 'jquery-mousewheel', './select2/core', './select2/defaults' -], function ($, require, Select2, Defaults) { - // Force jQuery.mousewheel to be loaded if it hasn't already - require('jquery.mousewheel'); - +], function ($, _, Select2, Defaults) { if ($.fn.select2 == null) { // All methods that should return the element var thisMethods = ['open', 'close', 'destroy']; @@ -5336,25 +5516,29 @@ S2.define('jquery.select2',[ if (typeof options === 'object') { this.each(function () { - var instanceOptions = $.extend({}, options, true); + var instanceOptions = $.extend(true, {}, options); var instance = new Select2($(this), instanceOptions); }); return this; } else if (typeof options === 'string') { - var instance = this.data('select2'); + var ret; - if (instance == null && window.console && console.error) { - console.error( - 'The select2(\'' + options + '\') method was called on an ' + - 'element that is not using Select2.' - ); - } + this.each(function () { + var instance = $(this).data('select2'); - var args = Array.prototype.slice.call(arguments, 1); + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } - var ret = instance[options](args); + var args = Array.prototype.slice.call(arguments, 1); + + ret = instance[options].apply(instance, args); + }); // Check if we should be returning `this` if ($.inArray(options, thisMethods) > -1) { @@ -5375,13 +5559,6 @@ S2.define('jquery.select2',[ return Select2; }); -S2.define('jquery.mousewheel',[ - 'jquery' -], function ($) { - // Used to shim jQuery.mousewheel for non-full builds. - return $; -}); - // Return the AMD loader configuration so it can be used outside of this file return { define: S2.define, diff --git a/awx/ui/client/lib/select2/dist/js/select2.min.js b/awx/ui/client/lib/select2/dist/js/select2.min.js index 49a988c7ab..1fefa0d138 100644 --- a/awx/ui/client/lib/select2/dist/js/select2.min.js +++ b/awx/ui/client/lib/select2/dist/js/select2.min.js @@ -1,2 +1,2 @@ -/*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){return n.apply(b,v.call(arguments,0).concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
          ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
        • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),this.$results.append(d)},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";{a(h)}this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b){var c=this,d=b.id+"-results";this.$results.attr("id",d),b.on("results:all",function(a){c.clear(),c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("results:append",function(a){c.append(a.data),b.isOpen()&&c.setClasses()}),b.on("query",function(a){c.showLoading(a)}),b.on("select",function(){b.isOpen()&&c.setClasses()}),b.on("unselect",function(){b.isOpen()&&c.setClasses()}),b.on("open",function(){c.$results.attr("aria-expanded","true"),c.$results.attr("aria-hidden","false"),c.setClasses(),c.ensureHighlightVisible()}),b.on("close",function(){c.$results.attr("aria-expanded","false"),c.$results.attr("aria-hidden","true"),c.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=c.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=c.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?c.trigger("close"):c.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a);if(0!==d){var e=d-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top,h=f.offset().top,i=c.$results.scrollTop()+(h-g);0===e?c.$results.scrollTop(0):0>h-g&&c.$results.scrollTop(i)}}),b.on("results:next",function(){var a=c.getHighlightedResults(),b=c.$results.find("[aria-selected]"),d=b.index(a),e=d+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=c.$results.offset().top+c.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=c.$results.scrollTop()+h-g;0===e?c.$results.scrollTop(0):h>g&&c.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){c.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=c.$results.scrollTop(),d=c.$results.get(0).scrollHeight-c.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&d<=c.$results.height();e?(c.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(c.$results.scrollTop(c.$results.get(0).scrollHeight-c.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var d=a(this),e=d.data("data");return"true"===d.attr("aria-selected")?void(c.options.get("multiple")?c.trigger("unselect",{originalEvent:b,data:e}):c.trigger("close")):void c.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(){var b=a(this).data("data");c.getHighlightedResults().removeClass("select2-results__option--highlighted"),c.trigger("results:focus",{data:b,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a){var b=this,d=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){b.trigger("focus",a)}),this.$selection.on("blur",function(a){b.trigger("blur",a)}),this.$selection.on("keydown",function(a){b.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){b.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){b.update(a.data)}),a.on("open",function(){b.$selection.attr("aria-expanded","true"),b.$selection.attr("aria-owns",d),b._attachCloseHandler(a)}),a.on("close",function(){b.$selection.attr("aria-expanded","false"),b.$selection.removeAttr("aria-activedescendant"),b.$selection.removeAttr("aria-owns"),b.$selection.focus(),b._detachCloseHandler(a)}),a.on("enable",function(){b.$selection.attr("tabindex",b._tabindex)}),a.on("disable",function(){b.$selection.attr("tabindex","-1")})},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},d.prototype.bind=function(a){var b=this;d.__super__.bind.apply(this,arguments);var c=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",c),this.$selection.attr("aria-labelledby",c),this.$selection.on("mousedown",function(a){1===a.which&&b.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(){}),this.$selection.on("blur",function(){}),a.on("selection:update",function(a){b.update(a.data)})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){return a("")},d.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.display(b),d=this.$selection.find(".select2-selection__rendered");d.empty().append(c),d.prop("title",b.title||b.text)},d}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
            '),a},d.prototype.bind=function(){var b=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){b.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(c){var d=a(this),e=d.parent(),f=e.data("data");b.trigger("unselect",{originalEvent:c,data:f})})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a){var b=this.options.get("templateSelection"),c=this.options.get("escapeMarkup");return c(b(a))},d.prototype.selectionContainer=function(){var b=a('
          • ×
          • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},a}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus()}),b.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.focus()}),b.on("enable",function(){e.$search.prop("disabled",!1)}),b.on("disable",function(){e.$search.prop("disabled",!0)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e.trigger("blur",a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}}),this.$selection.on("input",".select2-search--inline",function(){e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input",".select2-search--inline",function(a){e.handleSearch(a)})},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.trigger("open"),this.$search.val(b.text+" ")},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=(c.extend(!0,{},l,j),this.option(l));k.replaceWith(m)}else{var n=this.option(j);if(j.children){var o=this.convertToOptions(j.children);b.appendMany(n,o)}h.push(n)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(b,c){this.ajaxOptions=this._applyDefaults(c.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),a.__super__.constructor.call(this,b,c)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return{q:a.term}},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url(a)),"function"==typeof f.data&&(f.data=f.data(a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.position=function(){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a){function b(){}return b.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},b.prototype.handleSearch=function(){if(!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},b.prototype.showSearch=function(){return!0},b}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
          • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(a,b,c){this.$dropdownParent=c.get("dropdownParent")||document.body,a.call(this,b,c)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c){var d=this,e="scroll.select2."+c.id,f="resize.select2."+c.id,g="orientationchange.select2."+c.id,h=this.$container.parents().filter(b.hasScroll);h.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),h.on(e,function(){var b=a(this).data("select2-scroll-position");a(this).scrollTop(b.y)}),a(window).on(e+" "+f+" "+g,function(){d._positionDropdown(),d._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c){var d="scroll.select2."+c.id,e="resize.select2."+c.id,f="orientationchange.select2."+c.id,g=this.$container.parents().filter(b.hasScroll);g.off(d),a(window).off(d+" "+e+" "+f)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom};c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){this.$dropdownContainer.width();var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.selectionAdapter=l.multiple?e:d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(this.options.dir=a.prop("dir")?a.prop("dir"):a.closest("[dir]").prop("dir")?a.closest("[dir]").prop("dir"):"ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("focus",function(){a.$container.addClass("select2-container--focus")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open"),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ENTER?(a.trigger("results:select"),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle"),b.preventDefault()):c===d.UP?(a.trigger("results:previous"),b.preventDefault()):c===d.DOWN?(a.trigger("results:next"),b.preventDefault()):(c===d.ESC||c===d.TAB)&&(a.close(),b.preventDefault()):(c===d.ENTER||c===d.SPACE||(c===d.DOWN||c===d.UP)&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable")):this.trigger("enable")},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||(this.trigger("query",{}),this.trigger("open"))},e.prototype.close=function(){this.isOpen()&&this.trigger("close")},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery.select2",["jquery","require","./select2/core","./select2/defaults"],function(a,b,c,d){if(b("jquery.mousewheel"),null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){{var d=a.extend({},b,!0);new c(a(this),d)}}),this;if("string"==typeof b){var d=this.data("select2");null==d&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2.");var f=Array.prototype.slice.call(arguments,1),g=d[b](f);return a.inArray(b,e)>-1?this:g}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),b.define("jquery.mousewheel",["jquery"],function(a){return a}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file +/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
              ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
            • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
                '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
              • ×
              • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
              • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d;return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2.");var e=Array.prototype.slice.call(arguments,1);d=c[b].apply(c,e)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/basics.html b/awx/ui/client/lib/select2/docs/_includes/examples/basics.html new file mode 100644 index 0000000000..5cd1ca199f --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/basics.html @@ -0,0 +1,64 @@ +
                + +

                The basics

                + +

                Single select boxes

                + +

                + Select2 can take a regular select box like this... +

                + +

                + +

                + +

                + and turn it into this... +

                + +
                +

                + +

                +
                + +{% highlight html linenos %} + + + +{% endhighlight %} + +

                Multiple select boxes

                + +

                + Select2 also supports multi-value select boxes. The select below is declared with the multiple attribute. +

                + +
                +

                + +

                +
                + +{% highlight html linenos %} + + + +{% endhighlight %} +
                + + diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/data.html b/awx/ui/client/lib/select2/docs/_includes/examples/data.html new file mode 100644 index 0000000000..4b55a760ac --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/data.html @@ -0,0 +1,123 @@ +
                + +

                + Data sources +

                + +

                In addition to handling options from a standard <select>, Select2 can also retrieve the results from other data sources.

                + +

                Loading array data

                + +

                + Select2 provides a way to load the data from a local array. + You can provide initial selections with array data by providing the + option tag for the selected values, similar to how it would be done for + a standard select. +

                + +
                +

                + +

                +

                + +

                +
                + +{% highlight html linenos %} + + + + + +{% endhighlight %} + +

                Loading remote data

                + +

                + Select2 comes with AJAX support built in, using jQuery's AJAX methods. + In this example, we can search for repositories using GitHub's API. +

                + +

                + +

                + +

                + When using Select2 with remote data, the HTML required for the + select is the same as any other Select2. If you need to + provide default selections, you just need to include an + option for each selection that contains the value and text + that should be displayed. +

                + +{% highlight html linenos %} + +{% endhighlight %} + +

                + You can configure how Select2 searches for remote data using the + ajax option. More information on the individual options + that Select2 handles can be found in the + options documentation for ajax. +

                + +{% highlight js linenos %} +$(".js-data-example-ajax").select2({ + ajax: { + url: "https://api.github.com/search/repositories", + dataType: 'json', + delay: 250, + data: function (params) { + return { + q: params.term, // search term + page: params.page + }; + }, + processResults: function (data, params) { + // parse the results into the format expected by Select2 + // since we are using custom formatting functions we do not need to + // alter the remote JSON data, except to indicate that infinite + // scrolling can be used + params.page = params.page || 1; + + return { + results: data.items, + pagination: { + more: (params.page * 30) < data.total_count + } + }; + }, + cache: true + }, + escapeMarkup: function (markup) { return markup; }, // let our custom formatter work + minimumInputLength: 1, + templateResult: formatRepo, // omitted for brevity, see the source of this page + templateSelection: formatRepoSelection // omitted for brevity, see the source of this page +}); +{% endhighlight %} + +

                + Select2 will pass any options in the ajax object to + jQuery's $.ajax function, or the transport + function you specify. +

                +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/disabled-mode.html b/awx/ui/client/lib/select2/docs/_includes/examples/disabled-mode.html new file mode 100644 index 0000000000..309a2c2b63 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/disabled-mode.html @@ -0,0 +1,43 @@ +
                + +

                Disabled mode

                + +

                + Select2 will respond to the disabled attribute on + <select> elements. You can also initialize Select2 + with disabled: true to get the same effect. +

                + +
                +

                + +

                + +

                + +

                +
                + + +
                +
                + +
                
                +
                +
                +
                +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/disabled-results.html b/awx/ui/client/lib/select2/docs/_includes/examples/disabled-results.html new file mode 100644 index 0000000000..b695a3b6f4 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/disabled-results.html @@ -0,0 +1,29 @@ +
                + +

                Disabled results

                + +

                + Select2 will correctly handle disabled results, both with data coming + from a standard select (when the disabled attribute is set) + and from remote sources, where the object has + disabled: true set. +

                + +
                +

                + +

                +
                + +{% highlight html linenos %} + +{% endhighlight %} +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/hide-search.html b/awx/ui/client/lib/select2/docs/_includes/examples/hide-search.html new file mode 100644 index 0000000000..0203c1a750 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/hide-search.html @@ -0,0 +1,22 @@ +
                + +

                Hiding the search box

                + +

                + Select2 allows you to hide the search box depending on the number of + options which are displayed. In this example, we use the value + Infinity to tell Select2 to never display the search box. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +$(".js-example-basic-hide-search").select2({ + minimumResultsForSearch: Infinity +}); +{% endhighlight %} +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/localization-rtl-diacritics.html b/awx/ui/client/lib/select2/docs/_includes/examples/localization-rtl-diacritics.html new file mode 100644 index 0000000000..8b881586a6 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/localization-rtl-diacritics.html @@ -0,0 +1,82 @@ +
                +

                + Localization, RTL and diacritics support +

                + +

                Multiple languages

                + +

                + Select2 supports displaying the messages in different languages, as well + as providing your own + custom messages + that can be displayed. +

                + +

                + The language does not have to be defined when Select2 is being + initialized, but instead can be defined in the [lang] + attribute of any parent elements as [lang="es"]. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +$(".js-example-language").select2({ + language: "es" +}); +{% endhighlight %} + +

                RTL support

                + +

                + Select2 will work on RTL websites if the dir attribute is + set on the <select> or any parents of it. You can also + initialize Select2 with dir: "rtl" set. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +$(".js-example-rtl").select2({ + dir: "rtl" +}); +{% endhighlight %} + +

                Diacritics support

                + +

                + Select2's default matcher will ignore diacritics, making it easier for + users to filter results in international selects. Type "aero" into the + select below. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +$(".js-example-diacritics").select2(); +{% endhighlight %} +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/matcher.html b/awx/ui/client/lib/select2/docs/_includes/examples/matcher.html new file mode 100644 index 0000000000..fbdcf1f204 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/matcher.html @@ -0,0 +1,39 @@ +
                +

                Customizing how results are matched

                + +

                + Unlike other dropdowns on this page, this one matches options only if + the term appears in the beginning of the string as opposed to anywhere: +

                + +

                + This custom matcher uses a + compatibility module that is + only bundled in the + full version of Select2. You also + have the option of using a + more complex matcher. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +function matchStart (term, text) { + if (text.toUpperCase().indexOf(term.toUpperCase()) == 0) { + return true; + } + + return false; +} + +$.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) { + $(".js-example-matcher-start").select2({ + matcher: oldMatcher(matchStart) + }) +}); +{% endhighlight %} +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/multiple-max.html b/awx/ui/client/lib/select2/docs/_includes/examples/multiple-max.html new file mode 100644 index 0000000000..6ec0056e70 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/multiple-max.html @@ -0,0 +1,24 @@ +
                +

                + Limiting the number of selections +

                + +

                + Select2 multi-value select boxes can set restrictions regarding the + maximum number of options selected. The select below is declared with + the multiple attribute with maximumSelectionLength + in the select2 options. +

                + +
                +

                + +

                +
                + +{% highlight js linenos %} +$(".js-example-basic-multiple-limit").select2({ + maximumSelectionLength: 2 +}); +{% endhighlight %} +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/placeholders.html b/awx/ui/client/lib/select2/docs/_includes/examples/placeholders.html new file mode 100644 index 0000000000..1b6afda950 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/placeholders.html @@ -0,0 +1,36 @@ +
                +

                Placeholders

                + +

                + A placeholder value can be defined and will be displayed until a + selection is made. Select2 uses the placeholder attribute + on multiple select boxes, which requires IE 10+. You can support it in + older versions with + the Placeholders.js polyfill. +

                + +
                +

                + +

                +

                + +

                +
                + +
                
                +
                +
                +
                +
                diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/programmatic-control.html b/awx/ui/client/lib/select2/docs/_includes/examples/programmatic-control.html new file mode 100644 index 0000000000..375eaa4206 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/programmatic-control.html @@ -0,0 +1,155 @@ +
                +

                + Programmatic control +

                + +

                DOM events

                + +

                + Select2 will trigger some events on the original select element, + allowing you to integrate it with other components. You can find more + information on events + on the options page. +

                + +

                + change is fired whenever an option is selected or removed. +

                + +

                + select2:open is fired whenever the dropdown is opened. + select2:opening is fired before this and can be prevented. +

                + +

                + select2:close is fired whenever the dropdown is closed. + select2:closing is fired before this and can be prevented. +

                + +

                + select2:select is fired whenever a result is selected. + select2:selecting is fired before this and can be prevented. +

                + +

                + select2:unselect is fired whenever a result is unselected. + select2:unselecting is fired before this and can be prevented. +

                + +
                +

                + +

                +

                + +

                +
                + +
                +
                  +
                  + +
                  
                  +
                  +
                  +
                  +  

                  Programmatic access

                  + +

                  + Select2 supports methods that allow programmatic control of the + component. +

                  + +
                  + +

                  + +

                  + + + +

                  + +

                  + +
                  + + +
                  + +
                  + +
                  
                  +
                  +
                  +
                  +
                  diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/tags.html b/awx/ui/client/lib/select2/docs/_includes/examples/tags.html new file mode 100644 index 0000000000..69733a386d --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/tags.html @@ -0,0 +1,29 @@ +
                  +

                  Tagging support

                  + +

                  + Select2 can be used to quickly set up fields used for tagging. +

                  + +

                  + Note that when tagging is enabled the user can select from pre-existing + options or create a new tag by picking the first choice, which is what + the user has typed into the search box so far. +

                  + +
                  +

                  + +

                  +
                  + +{% highlight js linenos %} +$(".js-example-tags").select2({ + tags: true +}) +{% endhighlight %} +
                  diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/themes-templating-responsive-design.html b/awx/ui/client/lib/select2/docs/_includes/examples/themes-templating-responsive-design.html new file mode 100644 index 0000000000..15537f7480 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/themes-templating-responsive-design.html @@ -0,0 +1,104 @@ +
                  + +

                  + Themes, templating and responsive design +

                  + +

                  Theme support

                  + +

                  + Select2 supports custom themes using the + theme option + so you can style Select2 to match the rest of your application. +

                  + +

                  + These are using the classic theme, which matches the old + look of Select2. +

                  + +
                  +

                  + +

                  +

                  + +

                  +
                  + +{% highlight js linenos %} +$(".js-example-theme-single").select2({ + theme: "classic" +}); + +$(".js-example-theme-multiple").select2({ + theme: "classic" +}); +{% endhighlight %} + +

                  Templating

                  + +

                  + Various display options of the Select2 component can be changed: + You can access the <option> element + (or <optgroup>) and any attributes on those elements + using .element. +

                  + +

                  + Templating is primarily controlled by the + templateResult + and templateSelection + options. +

                  + +
                  +

                  + +

                  +
                  + +{% highlight js linenos %} +function formatState (state) { + if (!state.id) { return state.text; } + var $state = $( + ' ' + state.text + '' + ); + return $state; +}; + +$(".js-example-templating").select2({ + templateResult: formatState +}); +{% endhighlight %} + +

                  Responsive design - Percent width

                  + +

                  + Select2's width can be set to a percentage of its parent to support + responsive design. The two Select2 boxes below are styled to 50% and 75% + width respectively. +

                  + +
                  +

                  + +

                  +

                  + +

                  +
                  + +{% highlight html linenos %} + + +{% endhighlight %} + +
                  + Select2 will do its best to resolve the percent width specified via a + css class, but it is not always possible. The best way to ensure that + Select2 is using a percent based width is to inline the + style declaration into the tag. +
                  +
                  diff --git a/awx/ui/client/lib/select2/docs/_includes/examples/tokenizer.html b/awx/ui/client/lib/select2/docs/_includes/examples/tokenizer.html new file mode 100644 index 0000000000..6fa04ca6d1 --- /dev/null +++ b/awx/ui/client/lib/select2/docs/_includes/examples/tokenizer.html @@ -0,0 +1,32 @@ +
                  +

                  Automatic tokenization

                  + +

                  + Select2 supports ability to add choices automatically as the user is + typing into the search field. Try typing in the search field below and + entering a space or a comma. +

                  + +

                  + The separators that should be used when tokenizing can be specified + using the tokenSeparators + options. +

                  + +
                  +

                  + +

                  +
                  + +{% highlight js linenos %} +$(".js-example-tokenizer").select2({ + tags: true, + tokenSeparators: [',', ' '] +}) +{% endhighlight %} +
                  diff --git a/awx/ui/client/lib/select2/docs/_includes/footer.html b/awx/ui/client/lib/select2/docs/_includes/footer.html index 2878ef601f..9388ad93ed 100644 --- a/awx/ui/client/lib/select2/docs/_includes/footer.html +++ b/awx/ui/client/lib/select2/docs/_includes/footer.html @@ -1,11 +1,20 @@ -