Duplicity 0.8.00
Milestone information
- Project:
- Duplicity
- Series:
- 0.8
- Version:
- 0.8.00
- Released:
- Registrant:
- Kenneth Loafman
- Release registered:
- Active:
- No. Drivers cannot target bugs and blueprints to this milestone.
Activities
- Assigned to you:
- No blueprints or bugs assigned to you.
- Assignees:
- 1 Aaron Whitehouse
- Blueprints:
- 1 Implemented
- Bugs:
- 17 Fix Released
Download files for this release
Release notes
New in v0.8.00 (2019/05/29)
-------
* Merged in lp:~aaron-whitehouse/duplicity/remove-python26
- Remove Python 2.6 support references and tests.
* Fixed bug #1600692 with patch from Wolfgang Rohdewald
- Allow symlink to have optional trailing slash during verify.
* Merged in lp:~aaron-whitehouse/duplicity/07-fix_deja_dup_error_on_locked_files
- Revert log.Error to log.Warn, as it was prior to the merge in rev 1224,
as this was affecting other applications (e.g. deja dup; Bug #1605939).
* Merged in lp:~mwilck/duplicity/duplicity
- Speedup of path_matches_glob() by about 8x. See
https:/
for more details.
* Fixed conflict in merge from Martin Wilck and applied
- https:/
- merge fixes setsid usage in functional testing.
* Fixed bug #1612472 with patch from David Cuthbert
- Restore from S3 fails with --with-
* Merged in lp:~arashad.ahamad/duplicity/duplicity_latest
- Changes for connecting to IBM Bluemix ObjectStorage. See man page.
* Merged in lp:~fenisilius/duplicity/acd_init_mkdir
- Allow duplicity to create remote folder
* Fixed bugs #815510 and #1615480
- Changed default --volsize to 200MB
* Merged in lp:~mstoll-de/duplicity/duplicity
- Backblaze announced a new domain for the b2 api
* Fixed bug #1623342 with patch from Daniel Jakots
- failing test on OpenBSD because tar/gtar not found
* Merged in lp:~mwilck/duplicity/duplicity
- GPG: enable truly non-interactive operation with gpg2
- This patch fixes the IMO unexpected behavior that, when using GnuPG2, a pass phrase dialog always pops up for
saving backups. This is particularly annoying when trying to do unattended / fully automatic backups.
* Fixed bug #1621194 with code from Tornhoof
- Do backup to google drive working without a service account
* Merged in lp:~havard/duplicity/jottacloudbackend
- Adds support for a new backend, jottacloud.com, using the scheme `jottacloud:
- Reverse-engineered library, `jottalib`: http://
- Here's how you set up jottalib https:/
* Merged in lp:~breunigs/duplicity/amazondrive
- Provide a native backend for AmazonDrive
* Merged in lp:~breunigs/duplicity/amazondrive2
- Fixed variable renaming issue
* Fixed bug #1642098 - does not create PAR2 archives when '--par2-options' is used
- Missing space between par2-options plus default options
* Fix bug using 40-char sign keys, from Richard McGraw on mail list
- Remove truncation of argument and adjust comments
* Merged in lp:~dernils/duplicity/robust-dropbox-backend
- Added new command line option --backend-
that allows to determine the time that duplicity sleeps
before retrying after an error has occured.
- Added some robustness to dpbxbackend.py that ensures re-authentication
happens in case that a socket is changed (e.g. due to a forced reconnect
of a dynamic internet connection).
* Merged in lp:~ed.so/duplicity/manpage.fixes
- Fix html output via rman on the website
* Merged in lp:~horgh/duplicity/copy-symlink-targets-721599
- Add --copy-links to copy symlink contents, not just the link itself.
* Merged in lp:~aaron-whitehouse/duplicity/Bug_1624725_files_within_folder_slash
- Fixed Bug #1624725, so that an include glob ending in "/" now includes folder contents (for globs with
and without special characters). This preserves the behaviour that an expression ending in "/" only
matches a folder, but now the contents of any matching folder is included.
* Fix some issues with testing on MacOS
* Fix problem with gpg2 in yakety and zesty
* Fix Bug #1642813 with patch from Ravi
- If stat() returns None, don't attempt to set perms.
* Merged in lp:~breunigs/duplicity/amazondrive3
- As reported on the mailinglist, if a space is entered while duplicity asks for the URL, it fails.
Since all important spaces are URL encoded anyway, this should be fine even if there are spaces in
the URL at all. I also patched it in the onedrive backend, because it must have similar issues.
* Fixed bug #1623342 with patch supplied by Daniel Jakots
- Failing test on OpenBSD because tar/gtar not found
* Fixed bug #1654220 with patch supplied by Kenneth Newwood
- Duplicity fails on MacOS because GPG version parsing fails
* Merged in lp:~aaron-whitehouse/duplicity/0-8-merge_selection_tests
- Merge in TestExcludeIfPr
duplicity's --exclude-
- Move and rename TestTrailingSlash2 test (was duplicate name) as in 0.7-series.
- Fix PEP error on adbackend.py.
- Add jottalib as a tox dep to fix pylint error.
- Remove unnecessary skipUnless Linux as per 0.7-series.
* Fixed bug #1655268 "--gpg-binary option not working"
- If gpg binary is specified rebuild gpg profile using new binary location
* Merged in lp:~matthew-t-bentley/duplicity/duplicity
- Sets a user agent. Backblaze asked for this in case there are errors that originate
from the Duplicity B2 backend
- Only retrieves a new upload URL when the current one expires, to bring it in line
with their best practices for integrations: https:/
* Merged in lp:~aaron-whitehouse/duplicity/08-merge-glob-parsers
- Use a single code path for glob strings whether or not these contain special
characters/
- Remove run-tests-ve as this was identical to run-tests.
* Add detail about import exceptions in onedrivebackend.py
* Merged in lp:~aaron-whitehouse/duplicity/08-refactor-unit-test-globmatch
- Rename path_matches_
- Significantly refactored unit/test_
* Fixed bug #1657916 with patch supplied by Daniel Harvey
- B2 provider cannot handle two backups in the same bucket
* Fixed bug #1603704 with patch supplied by Maciej Bliziński
- Crash with UnicodeEncodeError
* Merged in lp:~aaron-whitehouse/duplicity/08-python-futurize-stage-1
- Made many of the safer changes for improved Python 3 support (python-future's futurize -stage1)
without functional change to the code (and leaving the isinstance(s, types.StringType) tests unchanged).
- Created Python 2/3 compatible tests for int and long.
- Update setup.py to show only Python 2.7 support.
* Merged in lp:~marix/duplicity/azure-storage-0.30.0-plus
- This makes the Azure backend compatible with version 0.30.0 and up of the
underlying azure-storage package.
* Merged in lp:~marix/duplicity/azure-storage-sas
- This branch adds support for Shared Access Signature to the Azure backend
which allows to run Duplicity with a minimal set of permissions.
* Merged in lp:~aaron-whitehouse/duplicity/pep8_test_fixes
- Fix PEP-8 testing by moving to using pycodestyle library.
- Temporarily add ignores to allow these tests to pass.
- Fix E305 PEP8 errors: expected 2 blank lines after class or function definition, found 1.
* Merged in lp:~benoit.bertholon/duplicity/duplicity
- Fixes bug #1666194 - ProcessCommandLine function called twice fail and arglist argument not used
* Fixed variable name change in last merge which broke a bunch of tests
- Changed archive_dir_root back to archive_dir
* Fixed bug #1367675 - IMAP Backend does not work with Yahoo server
- added the split() as needed in 'nums=list[
- the other fixes mentioned in the bug report comments were already done
* Merged in lp:~benoit.bertholon/duplicity/duplicity
- Use the globals.archive_dir variable to store only a string
in the case of a path, uses globals.
* Merged in p:~aaron-
- Fixed PEP8 errors: E402 module level import not at top of file
* Fixed bug #1671852 - Code regression caused by revision 1108
- change util.uexc() back to bare uexc()
* Fixed bug #1668750 - Don't mask backend errors
- added exception prints to module import errors
* Fixed bug #1680682 with patch supplied from Dave Allan
- Only specify --pinentry-
* Fixed man page that had 'cancel' instead of 'loopback' for pinentry mode
* Fixed bug #1684312 with suggestion from Wade Rossman
- Use shutil.copyfile instead of os.system('cp ...')
- Should reduce overhead of os.system() memory usage.
* Merged in lp:~dernils/duplicity/testing
- Fixed minor stuff in requirements.txt.
- Added a Dockerfile for testing.
- Minor changes to README files.
- Added README-TESTING with some information on testing.
* Merged in lp:~dernils/duplicity/documentation
- Minor changes to README-REPO, README-TESTING
- Also redo the changes to requirements.txt and Dockerfile
* Merged in lp:~dawgfoto/duplicity/replicate
- Add replicate command to replicate a backup (or backup
sets older than a given time) to another backend, leveraging
duplicity's backend and compression/
* Fixed some incoming PyLint and PEP-8 errors.
* Merged in lp:~marix/duplicity/add-azure-arguments
- Using the Azure backend to store large amounts of data we found that
performance is sub-optimal. The changes on this branch add command line
parameters to fine-tune some parameters of the Azure storage library,
allowing to push write performance towards Azure above 1 Gb/s for large
back-ups. If a user does not provide the parameters the defaults of the
Azure storage library will continue to be used.
* Replace incoming non-ASCII chars in commandline.py
* bzr does not honor perms so fix the perms at the start of the testing and
avoid annoying error regarding testing/gnupg having too lenient perms
* Merged in lp:~dernils/duplicity/DockerfileConvenience
- Added a few tools to the Dockerfile that make life easier
* Fixed bug #1320832 with suggestion from Oskar Wycislak
- Use chunks instead of reading it all in swiftbackend
* Merged in lp:~dernils/duplicity/DockerfileConvenience
- Add a few files that are the beginning of further infrastructure based
on docker. It contains a Dockerfile for a simple ftp server (used for
backend testing) and a setup script that can be used to set up the
complete test environment.
* Moved Dockerfile for duplicitytest into testinfrastruct
* Moved some things around in testing/
* Fixed bug #1689632 with patch from Howard Kaye
- On MacOS, the tempfile.
IOError exception saying that too many files are open. This causes
restores to fail randomly, after thousands of files have been restored.
* Fixed bug #1320641 and others regarding lockfile
- swap from lockfile to fasteners module
- use an fcntl() style lock for process lock of duplicity cache
- lockfile will now clear if duplicity is killed or crashes
* Merged in lp:~aaron-whitehouse/duplicity/tox_pylint_fixes
- Changes needed to run-tests without pylint E0401(import-error) errors
* Merged in lp:~xlucas/duplicity/swift-storage-policies
- This brings support for Swift storage policies: when using a Swift
backend, you can specify the policy containers should be operating on.
- This is similar to AWS Cloud Storage classes (ia, rrs, glacier and so on).
* Merged in lp:~dernils/duplicity/Dockerfile
- Added another backend to the docker test infrastructure, updated the setup
for testing and updated the documentation.
* Merged in lp:~dernils/duplicity/Dockerfile
- Now have subnet name and IP of the subnet for testing as a variable.
* May have finally fixed bug #1556553, "Too many open files...".
- Applied patch from Howard Kaye, question #631423. The fix is to dup
the file descriptor, and then close the file in the deallocator
routine in the glue code. Duping the file lets the C code and the Python
code each close the file when they are done with it.
- Invalidated and removed the fix put in for bug #1320832.
- Caveat: long incremental chains will still eat up a large number of file
descriptors. It's a very risky practice, so I'm not inclined to fix it.
* Revisited bug #670891 with patch from Edgar Soldin
- Forced librsync.
object when on Windows or Cygwin systems. This allows us to avoid the
problem of tmpfile() use which creates temp files in the wrong place.
- See discussion at https:/
* Fix bug #1672540 with patch from Benoit Nadeau
- Rename would fail to move par files when moving across filesystems.
- Patch uses shutil.move() to do the rename instead.
* Merged in lp:~dernils/duplicity/docker-compose
- Test Infrastructure now utilizing docker-compose
* Merged in lp:~aaron-whitehouse/duplicity/08-fix-man-verify
- Fix description of --verify and --compare-data in the man page. Now
clarifies that verify compares the restored files to hashes stored at
backup date, while --compare-data compares restored files to files
in target_path.
* Fixed bug #1265765 with patches from Matthias Larisch and Edgar Soldin
- SSH Paramiko backend now uses BufferedFile implementation to enable
collecting the entire list of files on the backend.
* Copy.com is gone so remove copycombackend.py.
* Merged in lp:~xlucas/duplicity/swift-multibackend-bug
- Fix a bug when swift backend is used in a multibackend configuration.
* Fixed problem in dist/makedist when building on Mac where AppleDouble
files were being created in the tarball. See:
https:/
* Merged in lp:~dawgfoto/duplicity/replicate
- Add integration test for newly added replicate command.
- Also see https:/
* Merged in lp:~xlucas/duplicity/multibackend-prefix-affinity
- Support prefix affinity in multibackend.
* Merged in lp:~xlucas/duplicity/pca-backend
- Add support for OVH Public Cloud Archive backend.
* Fixed PEP8 and 2to3 issues.
* Patched in lp:~dawgfoto/duplicity/skip_sync_collection_status
- collection-status should not sync metadata
- up-to-date local metadata is not needed as collection-status is
generated from remote file list
- syncing metadata might require to download several GBs
* Fixed slowness in 'collection-status' by basing the status on the
remote system only. The local cache is treated as empty.
* Fixed encrypted remote manifest handling to merely put out a non-fatal
error message and continue if the private key is not available.
* Merged in lp:~mterry/duplicity/giobackend-display-name
- giobackend: handle a wider variety of gio backends by making less assumptions;
in particular, this fixes the google-drive: backend
* Fixed bug #1709047 with suggestion from Gary Hasson
- fixed so default was to use original filename
* Fixed PEP8 errors in bin/duplicity
* Merged in lp:~mterry/duplicity/gio_child_for_display_name
- gio: be slightly more correct and get child GFiles based on display name
* Fixed bug #1711905 with suggestion from Schneider
- log.Warn was invoked with log.warn in webdavbackend.py
* Merged in lp:~mterry/duplicity/gpg-tag-versions
- Support gpg versions numbers that have tags on them.
- This can happen if you build gpg from git trunk (e.g. 2.1.15-beta20). Or if you run
against the freedesktop flatpak runtime (e.g. 2.1.14-unknown).
* Fixed bug #1394386 with new module megabackend.py from Tomas Vondra
- uses megatools from https:/
which has been deprecated
- fixed copyright and PEP8 issues
- replaced subprocess.call() with self.subprocess
* Fixed bug #1538333 Assertion error in manifest.py: assert filecount == ...
- Made sure to never pass .part files as true manifest files
- Changed assert to log.Error to warn about truncated/corrupt filelist
- Added unit test to make sure detection works
- Note: while this condition is serious, it will not affect the basic backup and restore
functions. Interactive options like --list-
work correctly for this backup set, so it is advised to run a full backup as soon as
possible after this error occurs.
* Fixed bug #1638033 Remove leading slash on --file-to-restore
- code already used rstrip('/') so change to just strip('/')
* Fixed bug introduced in new megabackend.py where process_
takes a string not a list. Now it takes both.
* Updated web page for new megabackend requirements.
* Merged in lp:~mterry/duplicity/more-decode-issues
- Here's some fixes for another couple UnicodeDecodeEr
- The duplicity/
utf8 characters, but they have to really try to do that). This is bug 1334436.
- The bin/duplicity change from str(e) to util.uexc(e) fixes bug 1324188.
- The rest of the changes (util.exception
make the printing of exceptions prettier. Without this, if you see a French exception, you see
"accept\xe9es" instead of "acceptées".
- You can test all of these changes in one simple line:
$ LANGUAGE=fr duplicity remove-older-than $'accept\xffées'
* Fix backend.py to allow string, list, and tuple types to support megabackend.py.
* Fixed bug #1715650 with patch from Mattheww S
- Fix to make duplicity attempt a get first, then create, a container
in order to support container ACLs.
* Fixed bug #1714663 "Volume signed by XXXXXXXXXXXXXXXX, not XXXXXXXX"
- Normalized comparison length to min length of compared keys before comparison
- Avoids comparing mix of short, long, or fingerprint size keys.
* Patched in lp:~mterry/duplicity/rename-dep
- Make rename command a dependency for LP build
* Fixed bug #1654756 with new b2backend.py module from Vincent Rouille
- Faster (big files are uploaded in chunks)
- Added upload progress reporting support
* Fixed bug #1448094 with patch from Wolfgang Rohdewald
- Don't log incremental deletes for chains that have no incrementals
* Fixed bug #1724144 "--gpg-options unused with some commands"
- Add --gpg-options to get version run command
* Fixed bug #1720159 - Cannot allocate memory with large manifest file since 0.7.03
- filelist is not read if --file-changed option in collection-status not present
- This will keep memory usage lower in non collection-status operations
* Fixed bug #1723890 with patch from Killian Lackhove
- Fixes error handling in pydrivebackend.py
* Fixed bug #1730902 GPG Error Handling
- use util.ufn() not str() to handle encoding
* Fixed bug #1733057 AttributeError: 'GPGError' object has no attribute 'decode'
- Replaced call to util.ufn() with call to util.uexc(). Stupid typo!
* More fixes for Unicode handling
- Default to 'utf-8' if sys.getfilesyst
- Fixed bug #1386373 with suggestion from Eugene Morozov
* Merged in lp:~crosser/duplicity/fix-oauth-flow
- Fixed bug #1638236 "BackendException with oauth2client 4.0.0"
* Merged in lp:~crosser/duplicity/dpbx-fix-file-listing
- Fixed bug #1639664 "Dropbox support needs to be updated for Dropbox SDK v7.1"
* Merged in lp:~crosser/duplicity/fix-small-file-upload
- Fixed small file upload changes made in Dropbox SDK v7.1
* Converted to use pytest instead of unittest (setup.py test is now discouraged)
- We use @pytest.
no capture of file streams (currently 10 tests).
- The rest of the tests are run normally
* More pytest changes
- Use requirements.txt for dependencies
- Run unit tests first, then functional
- Some general cleanup
* Merged in lp:~aaron-whitehouse/duplicity/08-ufn-to-uc_name
- Replace util.ufn(path.name) with path.uc_name throughout.
* Merged in lp:~aaron-whitehouse/duplicity/08-ufn-to-fsdecode
- Change util.fsdecode to use "replace" instead of "ignore" (matching behaviour of util.ufn)
- Replace all uses of ufn with fsdecode
- Make backend.tobytes use util.fsencode rather than reimplementing
* Reduce dependencies on backend libraries
- Moved backend imports into backend class __init__ method
- Surrounded imports with try/except to allow better errors
- Put all library dependencies in requirements.txt
* Merged in lp:~dawgfoto/duplicity/fixup1251
- Avoid redundant replication of already present backup sets.
- Fixed by adding back BackupSet.__eq__ which was accidentally(?) removed in 1251.
* Merged in lp:~dawgfoto/duplicity/fixup1252
* only check decryptable remote manifests
- fixup of revision 1252 which introduces a non-fatal error message (see #1729796)
- for backups the GPG private key and/or it's password are typically not available
- also avoid interactive password queries through e.g. gpg agent
* Fixed bug #1768954 with patch from Max Hallden
- Add AZURE_ENDPOINT_
* Fixed bug #x1717935 with suggestion from strainu
- Use urllib.quote_plus() to properly quote pathnames passed via URL
* Merged in lp:~aaron-whitehouse/duplicity/08-pycodestyle
- Tox changes to accommodate new pycodestyle version warnings.
Ignored W504 for now and marked as a TODO.
Marked W503 as a permanent ignore, as it is prefered to the (mutually exclusive) W504 under PEP8.
- Marked various regex strings as raw strings to avoid the new W605 "invalid escape sequence".
* Merged in lp:~aaron-whitehouse/duplicity/08-unadorned-strings
- Added new script to find unadorned strings (testing/
which prints all unadorned strings in a .py file.
- Added a new test to test_code.py that checks across all files for unadorned strings and gives
an error if any are found (most files are in an ignore list at this stage, but this will allow
us to incrementally remove the exceptions as we adorn the strings in each file).
- Adorn string literals in test_code.py with u/b
* Fixed bug #1780617 Test fail when GnuPG >= 2.2.8
- Relevant change in GnuPG 2.2.8: https:/
- Added '--ignore-
* Merged in lp:~aaron-whitehouse/duplicity/08-adorn-strings
- Adorning string literals (normally to make these unicode), in support of a transition to Python 3.
See https:/
- Adorn string in duplicity/
- Adorn strings in testing/
- Adorn strings in selection.py
- Adorn strings in functional/
- Remove ignores for these files in test_code.py
* Added function to fix unadorned strings (testing/
- Fixes by inserting 'u' before token string
- Solves 99.9% of the use cases we have
- Fix unadorned strings to unicode in bin/duplicity and bin/rdiffdir
- Add import for __future_
* Fixed unadorned strings to unicode in duplicity/
- Some fixup due to shifting indentataion not matching PEP8.
* Reverted back to rev 1317 and reimplemented revs 1319 to 1322
* Adorned strings in testing/, testing/
* Added AUTHORS file listing all copyright claimants in headers
* Merged in lp:~mgorse/duplicity/0.8-series
- Adorn some duplicity/*.py strings. I've avoided submitting anything that I think might require
significant discussion; I think that reviewing will be easier this way. Mostly annotated strings
as unicode, except for librsync.py.
* Merged in lp:~qsantos/duplicity/fix-unmatched-rule-error
- There are actually two commits: the first fixes a very minor detail in the README regarding the
Python version that should be used; the second fixes the way exceptions are handled when an
incorrect rule is specified, and display the nice error message rather than an obscure stack trace.
* Merged in lp:~mgorse/duplicity/0.8-series
- Adorn some remaining strings
* Merged in lp:~mgorse/duplicity/0.8-series
- Run futurize --stage1, and adjust so that tests still pass.
* Fixed but #1797797 with patch from Bas Hulsken
- use bytes instead of unicode for '/' in filenames
* Merged in lp:~mcuelenaere/duplicity/duplicity
- Make sure we don't load files completely into memory when transferring them from/to
the remote WebDAV endpoint.
* Fixed bug #1798206 and bug #1798504
- Made paramiko a global with import during __init__ so it would
not be loaded unless needed.
* Merged in lp:~mgorse/duplicity/0.8-series
- First pass at a python 3 port.
* Fixed bug #1803896 with patch from slawekbunka
- Add __enter__ and __exit__ to B2ProgressListener
* Merged in lp:~okrasz/duplicity/duplicity
- Add --azure-blob-tier that specifies storage tier
(Hot,
* Merged in lp:~vam9/duplicity/0.8-series-s3-kms-support
- Added s3 kms server side encryption support with kms-grants support.
* Merged in lp:~mgorse/duplicity/0.8-series
- More python 3 fixes
* Merged in lp:~aaron-whitehouse/duplicity/08-uexc-fix
- Fix for Bug #1770929 with associated test cases (thanks to Pete Zaitcev (zaitcev)
in Bug #1797928 for the head start).
* Merged in lp:~aaron-whitehouse/duplicity/08-style-fixes
- Fix pylint style issues (over-indented text, whitespace on blank lines etc)
- Removed "pylint: disable=
an error and does not seem to be needed.
* Removed last mention of copy.com from man page with help from edso.
* Fix bug #1811114 with revised onedrivebackend.py from David Martin
- Adapt to new Microsoft Graph API
* Merged in lp:~brandon753-ba/duplicity/aws-glacier
- Adds support for for a command line option to store data on AWS S3 Glacier.
* Manual merge of lp:~yajo/duplicity/duplicity
- Support partial metadata sync.
- Fixes bug #1823858 by letting the user to choose partial syncing. Only the metadata for the target chain
will be downloaded. If older (or newer) chains are encrypted with a different passphrase, the user will
be able to restore to a given time by supplying only the passphrase for the chain selected by
the `--restore-time` option when using this new option.
- A side effect is that using this flag reduces dramatically the sync time when moving files from one to
another location, in cases where big amounts of chains are found.
* Merged in lp:~mgorse/duplicity/0.8-series
- Python 3 fixes to imapbackend.py
- Fix bug 1828869: refresh CollectionsStatus after sync
* Fixed bug #1828662 with patch from Bas Hulsken
- string.split() had been deprecated in 2, removed in 3.7
* Some more work on unadorned strings
- Fixed test_unadorned_
- Added bin/duplicity and bin/rdiffdir to list of files tested
- All unadorned strings have now been adorned
* Fix TestGlobToRegex
- see https:/
* Merged in lp:~stragerneds/duplicity/duplicity
- improve test backup speed
- insure all test output is read
Changelog
1 blueprint and 17 bugs targeted
Blueprint | Priority | Assignee | Delivery | |
---|---|---|---|---|
Python 3 Support | Python 3 Support | 4 High | Aaron Whitehouse | 11 Implemented |